Buckets:
| import{s as rl,b as yl,n as cl,o as ml}from"../chunks/scheduler.aec39e6a.js";import{S as dl,i as jl,e as M,s as a,c as o,h as Jl,a as i,d as t,b as n,f as He,g as p,j as d,k as h,l as ul,m as s,n as r,t as y,o as c,p as m}from"../chunks/index.4ee0a2d0.js";import{C as hl,H as le,E as Tl}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.6ca9a012.js";import{C as J}from"../chunks/CodeBlock.424a7a42.js";function wl(Ee){let u,ae,te,ne,w,Me,U,ie,b,Qe="The get started guide will show you how to quickly use Hugging Face on Amazon SageMaker with the SDK. Learn how to fine-tune and deploy a pretrained 🤗 Transformers model on SageMaker for a binary text classification task.",oe,j,qe,pe,g,xe='📓 Open the <a href="https://github.com/huggingface/notebooks/blob/main/sagemaker/01_getting_started_pytorch/sagemaker-notebook.ipynb" rel="nofollow">sagemaker-notebook.ipynb file</a> to follow along!',re,I,ye,f,Le='Get started by installing the necessary Hugging Face libraries and SageMaker. You will also need to install <a href="https://pytorch.org/get-started/locally/" rel="nofollow">PyTorch</a> if you don’t already have it installed. If you run this example in SageMaker Studio, it is already installed in the notebook kernel!',ce,Z,me,T,De='<p>These docs and examples use the <a href="https://github.com/aws/sagemaker-python-sdk" rel="nofollow">SageMaker Python SDK v3</a>, which introduces a new framework-agnostic API built around <code>ModelBuilder</code> (inference) and <code>ModelTrainer</code> (training), replacing the v2 <code>HuggingFaceModel</code> and <code>HuggingFace</code> classes. Install it with <code>pip install "sagemaker>=3.0.0"</code>.</p>',de,C,Pe='If you want to run this example in <a href="https://docs.aws.amazon.com/sagemaker/latest/dg/studio.html" rel="nofollow">SageMaker Studio</a>, upgrade <a href="https://ipywidgets.readthedocs.io/en/latest/" rel="nofollow">ipywidgets</a> for the 🤗 Datasets library and restart the kernel:',je,k,Je,B,Ke='Next, you should set up your environment: a SageMaker session and an S3 bucket. The S3 bucket will store data, models, and logs. You will need access to an <a href="https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html" rel="nofollow">IAM execution role</a> with the required permissions.',ue,W,Oe='If you are planning on using SageMaker in a local environment, you need to provide the <code>role</code> yourself. Learn more about how to set this up <a href="https://huggingface.co/docs/sagemaker/train#installation-and-setup" rel="nofollow">here</a>.',he,A,el="⚠️ The execution role is only available when you run a notebook within SageMaker. If you try to run <code>get_execution_role</code> in a notebook not on SageMaker, you will get a region error.",Te,X,we,_,Ue,R,ll='The 🤗 Datasets library makes it easy to download and preprocess a dataset for training. Download and tokenize the <a href="https://huggingface.co/datasets/imdb" rel="nofollow">IMDb</a> dataset:',be,V,ge,G,Ie,Y,tl='Next, upload the preprocessed dataset to your S3 session bucket with 🤗 Datasets S3 <a href="https://huggingface.co/docs/datasets/filesystems.html" rel="nofollow">filesystem</a> implementation:',fe,$,Ze,z,Ce,F,sl="Create a <code>ModelTrainer</code> to handle end-to-end SageMaker training. The most important parameters to pay attention to are:",ke,S,al='<li><code>source_code</code> bundles the fine-tuning script (<code>entry_script</code>) and its directory (<code>source_dir</code>); you can find the script in <a href="https://github.com/huggingface/notebooks/blob/main/sagemaker/01_getting_started_pytorch/scripts/train.py" rel="nofollow">train.py file</a>.</li> <li><code>compute</code> defines the SageMaker instance(s) that will be launched. Take a look <a href="https://aws.amazon.com/sagemaker/pricing/" rel="nofollow">here</a> for a complete list of instance types.</li> <li><code>training_image</code> is the container image used for training. We retrieve the Hugging Face PyTorch training DLC with <code>image_uris.retrieve</code>.</li> <li><code>hyperparameters</code> refers to the training hyperparameters the model will be fine-tuned with (passed to the script as <code>--key value</code> CLI args).</li>',Be,N,We,v,nl="Begin training by passing your S3 paths as input data channels:",Ae,H,Xe,E,_e,Q,Ml="Once the training job is complete, deploy your fine-tuned model with a <code>ModelBuilder</code>. We point it at the trained model artifacts and the Hugging Face PyTorch inference DLC, then call <code>deploy()</code>:",Re,q,Ve,x,il="Call <code>invoke()</code> on your data. The request and response bodies are JSON:",Ge,L,Ye,D,ol="After running your request, delete the endpoint:",$e,P,ze,K,Fe,O,pl="Congratulations, you’ve just fine-tuned and deployed a pretrained 🤗 Transformers model on SageMaker for binary text classification! 🎉",Se,ee,Ne,se,ve;return w=new hl({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),U=new le({props:{title:"Train and deploy a Hugging Face model on Amazon SageMaker with the SDK",local:"train-and-deploy-a-hugging-face-model-on-amazon-sagemaker-with-the-sdk",headingTag:"h1"}}),I=new le({props:{title:"Installation and setup",local:"installation-and-setup",headingTag:"h2"}}),Z=new J({props:{code:"cGlwJTIwaW5zdGFsbCUyMCUyMnNhZ2VtYWtlciUzRSUzRDMuMC4wJTIyJTIwJTIydHJhbnNmb3JtZXJzJTIyJTIwJTIyZGF0YXNldHMlNUJzMyU1RCUyMiUyMC0tdXBncmFkZQ==",highlighted:'pip install <span class="hljs-string">"sagemaker>=3.0.0"</span> <span class="hljs-string">"transformers"</span> <span class="hljs-string">"datasets[s3]"</span> --upgrade',lang:"python",wrap:!1}}),k=new J({props:{code:"JTI1JTI1Y2FwdHVyZSUwQWltcG9ydCUyMElQeXRob24lMEEhY29uZGElMjBpbnN0YWxsJTIwLWMlMjBjb25kYS1mb3JnZSUyMGlweXdpZGdldHMlMjAteSUwQUlQeXRob24uQXBwbGljYXRpb24uaW5zdGFuY2UoKS5rZXJuZWwuZG9fc2h1dGRvd24oVHJ1ZSk=",highlighted:`%%capture | |
| <span class="hljs-keyword">import</span> IPython | |
| !conda install -c conda-forge ipywidgets -y | |
| IPython.Application.instance().kernel.do_shutdown(<span class="hljs-literal">True</span>)`,lang:"python",wrap:!1}}),X=new J({props:{code:"ZnJvbSUyMHNhZ2VtYWtlci5jb3JlLmhlbHBlci5zZXNzaW9uX2hlbHBlciUyMGltcG9ydCUyMFNlc3Npb24lMkMlMjBnZXRfZXhlY3V0aW9uX3JvbGUlMEElMEFzZXNzJTIwJTNEJTIwU2Vzc2lvbigpJTBBc2FnZW1ha2VyX3Nlc3Npb25fYnVja2V0JTIwJTNEJTIwc2Vzcy5kZWZhdWx0X2J1Y2tldCgpJTBBcm9sZSUyMCUzRCUyMGdldF9leGVjdXRpb25fcm9sZSgp",highlighted:`<span class="hljs-keyword">from</span> sagemaker.core.helper.session_helper <span class="hljs-keyword">import</span> Session, get_execution_role | |
| sess = Session() | |
| sagemaker_session_bucket = sess.default_bucket() | |
| role = get_execution_role()`,lang:"python",wrap:!1}}),_=new le({props:{title:"Preprocess",local:"preprocess",headingTag:"h2"}}),V=new J({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTBBZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMEElMEElMjMlMjBsb2FkJTIwZGF0YXNldCUwQXRyYWluX2RhdGFzZXQlMkMlMjB0ZXN0X2RhdGFzZXQlMjAlM0QlMjBsb2FkX2RhdGFzZXQoJTIyaW1kYiUyMiUyQyUyMHNwbGl0JTNEJTVCJTIydHJhaW4lMjIlMkMlMjAlMjJ0ZXN0JTIyJTVEKSUwQSUwQSUyMyUyMGxvYWQlMjB0b2tlbml6ZXIlMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZCglMjJkaXN0aWxiZXJ0JTJGZGlzdGlsYmVydC1iYXNlLXVuY2FzZWQlMjIpJTBBJTBBJTIzJTIwY3JlYXRlJTIwdG9rZW5pemF0aW9uJTIwZnVuY3Rpb24lMEFkZWYlMjB0b2tlbml6ZShiYXRjaCklM0ElMEElMjAlMjAlMjAlMjByZXR1cm4lMjB0b2tlbml6ZXIoYmF0Y2glNUIlMjJ0ZXh0JTIyJTVEJTJDJTIwcGFkZGluZyUzRCUyMm1heF9sZW5ndGglMjIlMkMlMjB0cnVuY2F0aW9uJTNEVHJ1ZSklMEElMEElMjMlMjB0b2tlbml6ZSUyMHRyYWluJTIwYW5kJTIwdGVzdCUyMGRhdGFzZXRzJTBBdHJhaW5fZGF0YXNldCUyMCUzRCUyMHRyYWluX2RhdGFzZXQubWFwKHRva2VuaXplJTJDJTIwYmF0Y2hlZCUzRFRydWUpJTBBdGVzdF9kYXRhc2V0JTIwJTNEJTIwdGVzdF9kYXRhc2V0Lm1hcCh0b2tlbml6ZSUyQyUyMGJhdGNoZWQlM0RUcnVlKSUwQSUwQSUyMyUyMHNldCUyMGRhdGFzZXQlMjBmb3JtYXQlMjBmb3IlMjBQeVRvcmNoJTBBdHJhaW5fZGF0YXNldCUyMCUzRCUyMCUyMHRyYWluX2RhdGFzZXQucmVuYW1lX2NvbHVtbiglMjJsYWJlbCUyMiUyQyUyMCUyMmxhYmVscyUyMiklMEF0cmFpbl9kYXRhc2V0LnNldF9mb3JtYXQoJTIydG9yY2glMjIlMkMlMjBjb2x1bW5zJTNEJTVCJTIyaW5wdXRfaWRzJTIyJTJDJTIwJTIyYXR0ZW50aW9uX21hc2slMjIlMkMlMjAlMjJsYWJlbHMlMjIlNUQpJTBBdGVzdF9kYXRhc2V0JTIwJTNEJTIwdGVzdF9kYXRhc2V0LnJlbmFtZV9jb2x1bW4oJTIybGFiZWwlMjIlMkMlMjAlMjJsYWJlbHMlMjIpJTBBdGVzdF9kYXRhc2V0LnNldF9mb3JtYXQoJTIydG9yY2glMjIlMkMlMjBjb2x1bW5zJTNEJTVCJTIyaW5wdXRfaWRzJTIyJTJDJTIwJTIyYXR0ZW50aW9uX21hc2slMjIlMkMlMjAlMjJsYWJlbHMlMjIlNUQp",highlighted:`<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_dataset | |
| <span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer | |
| <span class="hljs-comment"># load dataset</span> | |
| train_dataset, test_dataset = load_dataset(<span class="hljs-string">"imdb"</span>, split=[<span class="hljs-string">"train"</span>, <span class="hljs-string">"test"</span>]) | |
| <span class="hljs-comment"># load tokenizer</span> | |
| tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">"distilbert/distilbert-base-uncased"</span>) | |
| <span class="hljs-comment"># create tokenization function</span> | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">tokenize</span>(<span class="hljs-params">batch</span>): | |
| <span class="hljs-keyword">return</span> tokenizer(batch[<span class="hljs-string">"text"</span>], padding=<span class="hljs-string">"max_length"</span>, truncation=<span class="hljs-literal">True</span>) | |
| <span class="hljs-comment"># tokenize train and test datasets</span> | |
| train_dataset = train_dataset.<span class="hljs-built_in">map</span>(tokenize, batched=<span class="hljs-literal">True</span>) | |
| test_dataset = test_dataset.<span class="hljs-built_in">map</span>(tokenize, batched=<span class="hljs-literal">True</span>) | |
| <span class="hljs-comment"># set dataset format for PyTorch</span> | |
| train_dataset = train_dataset.rename_column(<span class="hljs-string">"label"</span>, <span class="hljs-string">"labels"</span>) | |
| train_dataset.set_format(<span class="hljs-string">"torch"</span>, columns=[<span class="hljs-string">"input_ids"</span>, <span class="hljs-string">"attention_mask"</span>, <span class="hljs-string">"labels"</span>]) | |
| test_dataset = test_dataset.rename_column(<span class="hljs-string">"label"</span>, <span class="hljs-string">"labels"</span>) | |
| test_dataset.set_format(<span class="hljs-string">"torch"</span>, columns=[<span class="hljs-string">"input_ids"</span>, <span class="hljs-string">"attention_mask"</span>, <span class="hljs-string">"labels"</span>])`,lang:"python",wrap:!1}}),G=new le({props:{title:"Upload dataset to S3 bucket",local:"upload-dataset-to-s3-bucket",headingTag:"h2"}}),$=new J({props:{code:"JTIzJTIwc2F2ZSUyMHRyYWluX2RhdGFzZXQlMjB0byUyMHMzJTBBdHJhaW5pbmdfaW5wdXRfcGF0aCUyMCUzRCUyMGYnczMlM0ElMkYlMkYlN0JzZXNzLmRlZmF1bHRfYnVja2V0KCklN0QlMkYlN0JzM19wcmVmaXglN0QlMkZ0cmFpbiclMEF0cmFpbl9kYXRhc2V0LnNhdmVfdG9fZGlzayh0cmFpbmluZ19pbnB1dF9wYXRoKSUwQSUwQSUyMyUyMHNhdmUlMjB0ZXN0X2RhdGFzZXQlMjB0byUyMHMzJTBBdGVzdF9pbnB1dF9wYXRoJTIwJTNEJTIwZidzMyUzQSUyRiUyRiU3QnNlc3MuZGVmYXVsdF9idWNrZXQoKSU3RCUyRiU3QnMzX3ByZWZpeCU3RCUyRnRlc3QnJTBBdGVzdF9kYXRhc2V0LnNhdmVfdG9fZGlzayh0ZXN0X2lucHV0X3BhdGgp",highlighted:`<span class="hljs-comment"># save train_dataset to s3</span> | |
| training_input_path = <span class="hljs-string">f's3://<span class="hljs-subst">{sess.default_bucket()}</span>/<span class="hljs-subst">{s3_prefix}</span>/train'</span> | |
| train_dataset.save_to_disk(training_input_path) | |
| <span class="hljs-comment"># save test_dataset to s3</span> | |
| test_input_path = <span class="hljs-string">f's3://<span class="hljs-subst">{sess.default_bucket()}</span>/<span class="hljs-subst">{s3_prefix}</span>/test'</span> | |
| test_dataset.save_to_disk(test_input_path)`,lang:"python",wrap:!1}}),z=new le({props:{title:"Start a training job",local:"start-a-training-job",headingTag:"h2"}}),N=new J({props:{code:"ZnJvbSUyMHNhZ2VtYWtlci50cmFpbi5tb2RlbF90cmFpbmVyJTIwaW1wb3J0JTIwTW9kZWxUcmFpbmVyJTBBZnJvbSUyMHNhZ2VtYWtlci50cmFpbi5jb25maWdzJTIwaW1wb3J0JTIwU291cmNlQ29kZSUyQyUyMENvbXB1dGUlMEFmcm9tJTIwc2FnZW1ha2VyLmNvcmUlMjBpbXBvcnQlMjBpbWFnZV91cmlzJTBBJTBBaHlwZXJwYXJhbWV0ZXJzJTIwJTNEJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIyZXBvY2hzJTIyJTNBJTIwMSUyQyUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMG51bWJlciUyMG9mJTIwdHJhaW5pbmclMjBlcG9jaHMlMEElMjAlMjAlMjAlMjAlMjJ0cmFpbl9iYXRjaF9zaXplJTIyJTNBJTIwMzIlMkMlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjB0cmFpbmluZyUyMGJhdGNoJTIwc2l6ZSUwQSUyMCUyMCUyMCUyMCUyMm1vZGVsX25hbWUlMjIlM0ElMjAlMjJkaXN0aWxiZXJ0JTJGZGlzdGlsYmVydC1iYXNlLXVuY2FzZWQlMjIlMjAlMjAlMjMlMjBuYW1lJTIwb2YlMjBwcmV0cmFpbmVkJTIwbW9kZWwlMEElN0QlMEElMEFpbnN0YW5jZV90eXBlJTIwJTNEJTIwJTIybWwucDMuMnhsYXJnZSUyMiUwQSUwQSUyMyUyMFJldHJpZXZlJTIwdGhlJTIwSHVnZ2luZyUyMEZhY2UlMjBQeVRvcmNoJTIwdHJhaW5pbmclMjBETEMlMjBpbWFnZSUyMFVSSSUwQXRyYWluaW5nX2ltYWdlJTIwJTNEJTIwaW1hZ2VfdXJpcy5yZXRyaWV2ZSglMEElMjAlMjAlMjAlMjBmcmFtZXdvcmslM0QlMjJodWdnaW5nZmFjZSUyMiUyQyUwQSUyMCUyMCUyMCUyMHJlZ2lvbiUzRHNlc3MuYm90b19yZWdpb25fbmFtZSUyQyUwQSUyMCUyMCUyMCUyMHZlcnNpb24lM0QlMjI0LjQ5LjAlMjIlMkMlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBUcmFuc2Zvcm1lcnMlMjB2ZXJzaW9uJTBBJTIwJTIwJTIwJTIwYmFzZV9mcmFtZXdvcmtfdmVyc2lvbiUzRCUyMnB5dG9yY2gyLjUuMSUyMiUyQyUyMCUyMCUyMCUyMyUyMFB5VG9yY2glMjB2ZXJzaW9uJTBBJTIwJTIwJTIwJTIwcHlfdmVyc2lvbiUzRCUyMnB5MzExJTIyJTJDJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwUHl0aG9uJTIwdmVyc2lvbiUwQSUyMCUyMCUyMCUyMGltYWdlX3Njb3BlJTNEJTIydHJhaW5pbmclMjIlMkMlMEElMjAlMjAlMjAlMjBpbnN0YW5jZV90eXBlJTNEaW5zdGFuY2VfdHlwZSUyQyUwQSklMEElMEFodWdnaW5nZmFjZV9lc3RpbWF0b3IlMjAlM0QlMjBNb2RlbFRyYWluZXIoJTBBJTIwJTIwJTIwJTIwc2FnZW1ha2VyX3Nlc3Npb24lM0RzZXNzJTJDJTBBJTIwJTIwJTIwJTIwcm9sZSUzRHJvbGUlMkMlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBJQU0lMjByb2xlJTIwdXNlZCUyMGluJTIwdHJhaW5pbmclMjBqb2IlMjB0byUyMGFjY2VzcyUyMEFXUyUyMHJlc291cmNlcyUyMChTMyklMEElMjAlMjAlMjAlMjB0cmFpbmluZ19pbWFnZSUzRHRyYWluaW5nX2ltYWdlJTJDJTBBJTIwJTIwJTIwJTIwc291cmNlX2NvZGUlM0RTb3VyY2VDb2RlKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHNvdXJjZV9kaXIlM0QlMjIuJTJGc2NyaXB0cyUyMiUyQyUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMGRpcmVjdG9yeSUyMHdoZXJlJTIwZmluZS10dW5pbmclMjBzY3JpcHQlMjBpcyUyMHN0b3JlZCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGVudHJ5X3NjcmlwdCUzRCUyMnRyYWluLnB5JTIyJTJDJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwZmluZS10dW5pbmclMjBzY3JpcHQlMjB0byUyMHVzZSUyMGluJTIwdHJhaW5pbmclMjBqb2IlMEElMjAlMjAlMjAlMjApJTJDJTBBJTIwJTIwJTIwJTIwY29tcHV0ZSUzRENvbXB1dGUoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaW5zdGFuY2VfdHlwZSUzRGluc3RhbmNlX3R5cGUlMkMlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBpbnN0YW5jZSUyMHR5cGUlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpbnN0YW5jZV9jb3VudCUzRDElMkMlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBudW1iZXIlMjBvZiUyMGluc3RhbmNlcyUwQSUyMCUyMCUyMCUyMCklMkMlMEElMjAlMjAlMjAlMjBoeXBlcnBhcmFtZXRlcnMlM0RoeXBlcnBhcmFtZXRlcnMlMkMlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBoeXBlcnBhcmFtZXRlcnMlMjB0byUyMHVzZSUyMGluJTIwdHJhaW5pbmclMjBqb2IlMEEp",highlighted:`<span class="hljs-keyword">from</span> sagemaker.train.model_trainer <span class="hljs-keyword">import</span> ModelTrainer | |
| <span class="hljs-keyword">from</span> sagemaker.train.configs <span class="hljs-keyword">import</span> SourceCode, Compute | |
| <span class="hljs-keyword">from</span> sagemaker.core <span class="hljs-keyword">import</span> image_uris | |
| hyperparameters = { | |
| <span class="hljs-string">"epochs"</span>: <span class="hljs-number">1</span>, <span class="hljs-comment"># number of training epochs</span> | |
| <span class="hljs-string">"train_batch_size"</span>: <span class="hljs-number">32</span>, <span class="hljs-comment"># training batch size</span> | |
| <span class="hljs-string">"model_name"</span>: <span class="hljs-string">"distilbert/distilbert-base-uncased"</span> <span class="hljs-comment"># name of pretrained model</span> | |
| } | |
| instance_type = <span class="hljs-string">"ml.p3.2xlarge"</span> | |
| <span class="hljs-comment"># Retrieve the Hugging Face PyTorch training DLC image URI</span> | |
| training_image = image_uris.retrieve( | |
| framework=<span class="hljs-string">"huggingface"</span>, | |
| region=sess.boto_region_name, | |
| version=<span class="hljs-string">"4.49.0"</span>, <span class="hljs-comment"># Transformers version</span> | |
| base_framework_version=<span class="hljs-string">"pytorch2.5.1"</span>, <span class="hljs-comment"># PyTorch version</span> | |
| py_version=<span class="hljs-string">"py311"</span>, <span class="hljs-comment"># Python version</span> | |
| image_scope=<span class="hljs-string">"training"</span>, | |
| instance_type=instance_type, | |
| ) | |
| huggingface_estimator = ModelTrainer( | |
| sagemaker_session=sess, | |
| role=role, <span class="hljs-comment"># IAM role used in training job to access AWS resources (S3)</span> | |
| training_image=training_image, | |
| source_code=SourceCode( | |
| source_dir=<span class="hljs-string">"./scripts"</span>, <span class="hljs-comment"># directory where fine-tuning script is stored</span> | |
| entry_script=<span class="hljs-string">"train.py"</span>, <span class="hljs-comment"># fine-tuning script to use in training job</span> | |
| ), | |
| compute=Compute( | |
| instance_type=instance_type, <span class="hljs-comment"># instance type</span> | |
| instance_count=<span class="hljs-number">1</span>, <span class="hljs-comment"># number of instances</span> | |
| ), | |
| hyperparameters=hyperparameters, <span class="hljs-comment"># hyperparameters to use in training job</span> | |
| )`,lang:"python",wrap:!1}}),H=new J({props:{code:"ZnJvbSUyMHNhZ2VtYWtlci50cmFpbi5jb25maWdzJTIwaW1wb3J0JTIwSW5wdXREYXRhJTBBJTBBaHVnZ2luZ2ZhY2VfZXN0aW1hdG9yLnRyYWluKCUwQSUyMCUyMCUyMCUyMGlucHV0X2RhdGFfY29uZmlnJTNEJTVCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwSW5wdXREYXRhKGNoYW5uZWxfbmFtZSUzRCUyMnRyYWluJTIyJTJDJTIwZGF0YV9zb3VyY2UlM0R0cmFpbmluZ19pbnB1dF9wYXRoKSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMElucHV0RGF0YShjaGFubmVsX25hbWUlM0QlMjJ0ZXN0JTIyJTJDJTIwZGF0YV9zb3VyY2UlM0R0ZXN0X2lucHV0X3BhdGgpJTJDJTBBJTIwJTIwJTIwJTIwJTVEJTBBKQ==",highlighted:`<span class="hljs-keyword">from</span> sagemaker.train.configs <span class="hljs-keyword">import</span> InputData | |
| huggingface_estimator.train( | |
| input_data_config=[ | |
| InputData(channel_name=<span class="hljs-string">"train"</span>, data_source=training_input_path), | |
| InputData(channel_name=<span class="hljs-string">"test"</span>, data_source=test_input_path), | |
| ] | |
| )`,lang:"python",wrap:!1}}),E=new le({props:{title:"Deploy model",local:"deploy-model",headingTag:"h2"}}),q=new J({props:{code:"ZnJvbSUyMHNhZ2VtYWtlci5zZXJ2ZSUyMGltcG9ydCUyME1vZGVsQnVpbGRlciUwQWZyb20lMjBzYWdlbWFrZXIuY29yZSUyMGltcG9ydCUyMGltYWdlX3VyaXMlMEElMEFpbnN0YW5jZV90eXBlJTIwJTNEJTIwJTIybWwuZzRkbi54bGFyZ2UlMjIlMEElMEElMjMlMjBTMyUyMFVSSSUyMG9mJTIwdGhlJTIwZmluZS10dW5lZCUyMG1vZGVsJTIwYXJ0aWZhY3RzJTIwcHJvZHVjZWQlMjBieSUyMHRoZSUyMHRyYWluaW5nJTIwam9iJTBBbW9kZWxfZGF0YSUyMCUzRCUyMGh1Z2dpbmdmYWNlX2VzdGltYXRvci5fbGF0ZXN0X3RyYWluaW5nX2pvYi5tb2RlbF9hcnRpZmFjdHMuczNfbW9kZWxfYXJ0aWZhY3RzJTBBJTBBJTIzJTIwUmV0cmlldmUlMjB0aGUlMjBIdWdnaW5nJTIwRmFjZSUyMFB5VG9yY2glMjBpbmZlcmVuY2UlMjBETEMlMjBpbWFnZSUyMFVSSSUwQWluZmVyZW5jZV9pbWFnZSUyMCUzRCUyMGltYWdlX3VyaXMucmV0cmlldmUoJTBBJTIwJTIwJTIwJTIwZnJhbWV3b3JrJTNEJTIyaHVnZ2luZ2ZhY2UlMjIlMkMlMEElMjAlMjAlMjAlMjByZWdpb24lM0RzZXNzLmJvdG9fcmVnaW9uX25hbWUlMkMlMEElMjAlMjAlMjAlMjB2ZXJzaW9uJTNEJTIyNC41MS4zJTIyJTJDJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwVHJhbnNmb3JtZXJzJTIwdmVyc2lvbiUwQSUyMCUyMCUyMCUyMGJhc2VfZnJhbWV3b3JrX3ZlcnNpb24lM0QlMjJweXRvcmNoMi42LjAlMjIlMkMlMjAlMjAlMjAlMjMlMjBQeVRvcmNoJTIwdmVyc2lvbiUwQSUyMCUyMCUyMCUyMHB5X3ZlcnNpb24lM0QlMjJweTMxMiUyMiUyQyUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMFB5dGhvbiUyMHZlcnNpb24lMEElMjAlMjAlMjAlMjBpbWFnZV9zY29wZSUzRCUyMmluZmVyZW5jZSUyMiUyQyUwQSUyMCUyMCUyMCUyMGluc3RhbmNlX3R5cGUlM0RpbnN0YW5jZV90eXBlJTJDJTBBKSUwQSUwQW1vZGVsX2J1aWxkZXIlMjAlM0QlMjBNb2RlbEJ1aWxkZXIoJTBBJTIwJTIwJTIwJTIwaW1hZ2VfdXJpJTNEaW5mZXJlbmNlX2ltYWdlJTJDJTBBJTIwJTIwJTIwJTIwczNfbW9kZWxfZGF0YV91cmwlM0Rtb2RlbF9kYXRhJTJDJTBBJTIwJTIwJTIwJTIwcm9sZV9hcm4lM0Ryb2xlJTJDJTBBJTIwJTIwJTIwJTIwc2FnZW1ha2VyX3Nlc3Npb24lM0RzZXNzJTJDJTBBJTIwJTIwJTIwJTIwaW5zdGFuY2VfdHlwZSUzRGluc3RhbmNlX3R5cGUlMkMlMEEpJTBBbW9kZWxfYnVpbGRlci5idWlsZCgpJTBBJTBBcHJlZGljdG9yJTIwJTNEJTIwbW9kZWxfYnVpbGRlci5kZXBsb3koaW5pdGlhbF9pbnN0YW5jZV9jb3VudCUzRDElMkMlMjBpbnN0YW5jZV90eXBlJTNEaW5zdGFuY2VfdHlwZSk=",highlighted:`<span class="hljs-keyword">from</span> sagemaker.serve <span class="hljs-keyword">import</span> ModelBuilder | |
| <span class="hljs-keyword">from</span> sagemaker.core <span class="hljs-keyword">import</span> image_uris | |
| instance_type = <span class="hljs-string">"ml.g4dn.xlarge"</span> | |
| <span class="hljs-comment"># S3 URI of the fine-tuned model artifacts produced by the training job</span> | |
| model_data = huggingface_estimator._latest_training_job.model_artifacts.s3_model_artifacts | |
| <span class="hljs-comment"># Retrieve the Hugging Face PyTorch inference DLC image URI</span> | |
| inference_image = image_uris.retrieve( | |
| framework=<span class="hljs-string">"huggingface"</span>, | |
| region=sess.boto_region_name, | |
| version=<span class="hljs-string">"4.51.3"</span>, <span class="hljs-comment"># Transformers version</span> | |
| base_framework_version=<span class="hljs-string">"pytorch2.6.0"</span>, <span class="hljs-comment"># PyTorch version</span> | |
| py_version=<span class="hljs-string">"py312"</span>, <span class="hljs-comment"># Python version</span> | |
| image_scope=<span class="hljs-string">"inference"</span>, | |
| instance_type=instance_type, | |
| ) | |
| model_builder = ModelBuilder( | |
| image_uri=inference_image, | |
| s3_model_data_url=model_data, | |
| role_arn=role, | |
| sagemaker_session=sess, | |
| instance_type=instance_type, | |
| ) | |
| model_builder.build() | |
| predictor = model_builder.deploy(initial_instance_count=<span class="hljs-number">1</span>, instance_type=instance_type)`,lang:"python",wrap:!1}}),L=new J({props:{code:"aW1wb3J0JTIwanNvbiUwQSUwQXNlbnRpbWVudF9pbnB1dCUyMCUzRCUyMCU3QiUyMmlucHV0cyUyMiUzQSUyMCUyMkl0JTIwZmVlbHMlMjBsaWtlJTIwYSUyMGN1cnRhaW4lMjBjbG9zaW5nLi4udGhlcmUlMjB3YXMlMjBhbiUyMGVsZWdhbmNlJTIwaW4lMjB0aGUlMjB3YXklMjB0aGV5JTIwbW92ZWQlMjB0b3dhcmQlMjBjb25jbHVzaW9uLiUyME5vJTIwZmFuJTIwaXMlMjBnb2luZyUyMHRvJTIwd2F0Y2glMjBhbmQlMjBmZWVsJTIwc2hvcnQtY2hhbmdlZC4lMjIlN0QlMEElMEFyZXMlMjAlM0QlMjBwcmVkaWN0b3IuaW52b2tlKGJvZHklM0Rqc29uLmR1bXBzKHNlbnRpbWVudF9pbnB1dCklMkMlMjBjb250ZW50X3R5cGUlM0QlMjJhcHBsaWNhdGlvbiUyRmpzb24lMjIpJTBBcHJpbnQoanNvbi5sb2FkcyhyZXMuYm9keS5yZWFkKCkpKQ==",highlighted:`<span class="hljs-keyword">import</span> json | |
| sentiment_input = {<span class="hljs-string">"inputs"</span>: <span class="hljs-string">"It feels like a curtain closing...there was an elegance in the way they moved toward conclusion. No fan is going to watch and feel short-changed."</span>} | |
| res = predictor.invoke(body=json.dumps(sentiment_input), content_type=<span class="hljs-string">"application/json"</span>) | |
| <span class="hljs-built_in">print</span>(json.loads(res.body.read()))`,lang:"python",wrap:!1}}),P=new J({props:{code:"cHJlZGljdG9yLmRlbGV0ZSgp",highlighted:"predictor.delete()",lang:"python",wrap:!1}}),K=new le({props:{title:"What’s next?",local:"whats-next",headingTag:"h2"}}),ee=new Tl({props:{source:"https://github.com/huggingface/hub-docs/blob/main/docs/sagemaker/source/tutorials/sagemaker-sdk/sagemaker-sdk-quickstart.md"}}),{c(){u=M("meta"),ae=a(),te=M("p"),ne=a(),o(w.$$.fragment),Me=a(),o(U.$$.fragment),ie=a(),b=M("p"),b.textContent=Qe,oe=a(),j=M("iframe"),pe=a(),g=M("p"),g.innerHTML=xe,re=a(),o(I.$$.fragment),ye=a(),f=M("p"),f.innerHTML=Le,ce=a(),o(Z.$$.fragment),me=a(),T=M("blockquote"),T.innerHTML=De,de=a(),C=M("p"),C.innerHTML=Pe,je=a(),o(k.$$.fragment),Je=a(),B=M("p"),B.innerHTML=Ke,ue=a(),W=M("p"),W.innerHTML=Oe,he=a(),A=M("p"),A.innerHTML=el,Te=a(),o(X.$$.fragment),we=a(),o(_.$$.fragment),Ue=a(),R=M("p"),R.innerHTML=ll,be=a(),o(V.$$.fragment),ge=a(),o(G.$$.fragment),Ie=a(),Y=M("p"),Y.innerHTML=tl,fe=a(),o($.$$.fragment),Ze=a(),o(z.$$.fragment),Ce=a(),F=M("p"),F.innerHTML=sl,ke=a(),S=M("ul"),S.innerHTML=al,Be=a(),o(N.$$.fragment),We=a(),v=M("p"),v.textContent=nl,Ae=a(),o(H.$$.fragment),Xe=a(),o(E.$$.fragment),_e=a(),Q=M("p"),Q.innerHTML=Ml,Re=a(),o(q.$$.fragment),Ve=a(),x=M("p"),x.innerHTML=il,Ge=a(),o(L.$$.fragment),Ye=a(),D=M("p"),D.textContent=ol,$e=a(),o(P.$$.fragment),ze=a(),o(K.$$.fragment),Fe=a(),O=M("p"),O.textContent=pl,Se=a(),o(ee.$$.fragment),Ne=a(),se=M("p"),this.h()},l(e){const l=Jl("svelte-u9bgzb",document.head);u=i(l,"META",{name:!0,content:!0}),l.forEach(t),ae=n(e),te=i(e,"P",{}),He(te).forEach(t),ne=n(e),p(w.$$.fragment,e),Me=n(e),p(U.$$.fragment,e),ie=n(e),b=i(e,"P",{"data-svelte-h":!0}),d(b)!=="svelte-w5bkwl"&&(b.textContent=Qe),oe=n(e),j=i(e,"IFRAME",{width:!0,height:!0,src:!0,title:!0,frameborder:!0,allow:!0}),He(j).forEach(t),pe=n(e),g=i(e,"P",{"data-svelte-h":!0}),d(g)!=="svelte-mi6lna"&&(g.innerHTML=xe),re=n(e),p(I.$$.fragment,e),ye=n(e),f=i(e,"P",{"data-svelte-h":!0}),d(f)!=="svelte-198besl"&&(f.innerHTML=Le),ce=n(e),p(Z.$$.fragment,e),me=n(e),T=i(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),d(T)!=="svelte-3zi9fd"&&(T.innerHTML=De),de=n(e),C=i(e,"P",{"data-svelte-h":!0}),d(C)!=="svelte-yozy2b"&&(C.innerHTML=Pe),je=n(e),p(k.$$.fragment,e),Je=n(e),B=i(e,"P",{"data-svelte-h":!0}),d(B)!=="svelte-1sllt2f"&&(B.innerHTML=Ke),ue=n(e),W=i(e,"P",{"data-svelte-h":!0}),d(W)!=="svelte-tg9h77"&&(W.innerHTML=Oe),he=n(e),A=i(e,"P",{"data-svelte-h":!0}),d(A)!=="svelte-y9vgbx"&&(A.innerHTML=el),Te=n(e),p(X.$$.fragment,e),we=n(e),p(_.$$.fragment,e),Ue=n(e),R=i(e,"P",{"data-svelte-h":!0}),d(R)!=="svelte-b8daui"&&(R.innerHTML=ll),be=n(e),p(V.$$.fragment,e),ge=n(e),p(G.$$.fragment,e),Ie=n(e),Y=i(e,"P",{"data-svelte-h":!0}),d(Y)!=="svelte-nm384r"&&(Y.innerHTML=tl),fe=n(e),p($.$$.fragment,e),Ze=n(e),p(z.$$.fragment,e),Ce=n(e),F=i(e,"P",{"data-svelte-h":!0}),d(F)!=="svelte-1m3ezl0"&&(F.innerHTML=sl),ke=n(e),S=i(e,"UL",{"data-svelte-h":!0}),d(S)!=="svelte-17hmvd5"&&(S.innerHTML=al),Be=n(e),p(N.$$.fragment,e),We=n(e),v=i(e,"P",{"data-svelte-h":!0}),d(v)!=="svelte-1xmqdgw"&&(v.textContent=nl),Ae=n(e),p(H.$$.fragment,e),Xe=n(e),p(E.$$.fragment,e),_e=n(e),Q=i(e,"P",{"data-svelte-h":!0}),d(Q)!=="svelte-14micir"&&(Q.innerHTML=Ml),Re=n(e),p(q.$$.fragment,e),Ve=n(e),x=i(e,"P",{"data-svelte-h":!0}),d(x)!=="svelte-1dhvc8y"&&(x.innerHTML=il),Ge=n(e),p(L.$$.fragment,e),Ye=n(e),D=i(e,"P",{"data-svelte-h":!0}),d(D)!=="svelte-l180zc"&&(D.textContent=ol),$e=n(e),p(P.$$.fragment,e),ze=n(e),p(K.$$.fragment,e),Fe=n(e),O=i(e,"P",{"data-svelte-h":!0}),d(O)!=="svelte-g7jk9r"&&(O.textContent=pl),Se=n(e),p(ee.$$.fragment,e),Ne=n(e),se=i(e,"P",{}),He(se).forEach(t),this.h()},h(){h(u,"name","hf:doc:metadata"),h(u,"content",Ul),h(j,"width","560"),h(j,"height","315"),yl(j.src,qe="https://www.youtube.com/embed/pYqjCzoyWyo")||h(j,"src",qe),h(j,"title","YouTube video player"),h(j,"frameborder","0"),h(j,"allow","accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"),j.allowFullscreen="",h(T,"class","note")},m(e,l){ul(document.head,u),s(e,ae,l),s(e,te,l),s(e,ne,l),r(w,e,l),s(e,Me,l),r(U,e,l),s(e,ie,l),s(e,b,l),s(e,oe,l),s(e,j,l),s(e,pe,l),s(e,g,l),s(e,re,l),r(I,e,l),s(e,ye,l),s(e,f,l),s(e,ce,l),r(Z,e,l),s(e,me,l),s(e,T,l),s(e,de,l),s(e,C,l),s(e,je,l),r(k,e,l),s(e,Je,l),s(e,B,l),s(e,ue,l),s(e,W,l),s(e,he,l),s(e,A,l),s(e,Te,l),r(X,e,l),s(e,we,l),r(_,e,l),s(e,Ue,l),s(e,R,l),s(e,be,l),r(V,e,l),s(e,ge,l),r(G,e,l),s(e,Ie,l),s(e,Y,l),s(e,fe,l),r($,e,l),s(e,Ze,l),r(z,e,l),s(e,Ce,l),s(e,F,l),s(e,ke,l),s(e,S,l),s(e,Be,l),r(N,e,l),s(e,We,l),s(e,v,l),s(e,Ae,l),r(H,e,l),s(e,Xe,l),r(E,e,l),s(e,_e,l),s(e,Q,l),s(e,Re,l),r(q,e,l),s(e,Ve,l),s(e,x,l),s(e,Ge,l),r(L,e,l),s(e,Ye,l),s(e,D,l),s(e,$e,l),r(P,e,l),s(e,ze,l),r(K,e,l),s(e,Fe,l),s(e,O,l),s(e,Se,l),r(ee,e,l),s(e,Ne,l),s(e,se,l),ve=!0},p:cl,i(e){ve||(y(w.$$.fragment,e),y(U.$$.fragment,e),y(I.$$.fragment,e),y(Z.$$.fragment,e),y(k.$$.fragment,e),y(X.$$.fragment,e),y(_.$$.fragment,e),y(V.$$.fragment,e),y(G.$$.fragment,e),y($.$$.fragment,e),y(z.$$.fragment,e),y(N.$$.fragment,e),y(H.$$.fragment,e),y(E.$$.fragment,e),y(q.$$.fragment,e),y(L.$$.fragment,e),y(P.$$.fragment,e),y(K.$$.fragment,e),y(ee.$$.fragment,e),ve=!0)},o(e){c(w.$$.fragment,e),c(U.$$.fragment,e),c(I.$$.fragment,e),c(Z.$$.fragment,e),c(k.$$.fragment,e),c(X.$$.fragment,e),c(_.$$.fragment,e),c(V.$$.fragment,e),c(G.$$.fragment,e),c($.$$.fragment,e),c(z.$$.fragment,e),c(N.$$.fragment,e),c(H.$$.fragment,e),c(E.$$.fragment,e),c(q.$$.fragment,e),c(L.$$.fragment,e),c(P.$$.fragment,e),c(K.$$.fragment,e),c(ee.$$.fragment,e),ve=!1},d(e){e&&(t(ae),t(te),t(ne),t(Me),t(ie),t(b),t(oe),t(j),t(pe),t(g),t(re),t(ye),t(f),t(ce),t(me),t(T),t(de),t(C),t(je),t(Je),t(B),t(ue),t(W),t(he),t(A),t(Te),t(we),t(Ue),t(R),t(be),t(ge),t(Ie),t(Y),t(fe),t(Ze),t(Ce),t(F),t(ke),t(S),t(Be),t(We),t(v),t(Ae),t(Xe),t(_e),t(Q),t(Re),t(Ve),t(x),t(Ge),t(Ye),t(D),t($e),t(ze),t(Fe),t(O),t(Se),t(Ne),t(se)),t(u),m(w,e),m(U,e),m(I,e),m(Z,e),m(k,e),m(X,e),m(_,e),m(V,e),m(G,e),m($,e),m(z,e),m(N,e),m(H,e),m(E,e),m(q,e),m(L,e),m(P,e),m(K,e),m(ee,e)}}}const Ul='{"title":"Train and deploy a Hugging Face model on Amazon SageMaker with the SDK","local":"train-and-deploy-a-hugging-face-model-on-amazon-sagemaker-with-the-sdk","sections":[{"title":"Installation and setup","local":"installation-and-setup","sections":[],"depth":2},{"title":"Preprocess","local":"preprocess","sections":[],"depth":2},{"title":"Upload dataset to S3 bucket","local":"upload-dataset-to-s3-bucket","sections":[],"depth":2},{"title":"Start a training job","local":"start-a-training-job","sections":[],"depth":2},{"title":"Deploy model","local":"deploy-model","sections":[],"depth":2},{"title":"What’s next?","local":"whats-next","sections":[],"depth":2}],"depth":1}';function bl(Ee){return ml(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Cl extends dl{constructor(u){super(),jl(this,u,bl,wl,rl,{})}}export{Cl as component}; | |
Xet Storage Details
- Size:
- 30.9 kB
- Xet hash:
- ac8de301999516e8606801ec7908ef0cd8d1fd0fc390f524e6074771689143eb
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.