Buckets:
| <meta charset="utf-8" /><meta name="hf:doc:metadata" content="{"title":"Fine-Tuning LLMs with TRL CLI on SageMaker","local":"fine-tuning-llms-with-trl-cli-on-sagemaker","sections":[{"title":"Prerequisites","local":"prerequisites","sections":[],"depth":2},{"title":"⚙️ Setup","local":"-setup","sections":[],"depth":2},{"title":"⚙️ Configuration","local":"-configuration","sections":[],"depth":2},{"title":"🔧 TRL CLI with YAML Config","local":"-trl-cli-with-yaml-config","sections":[],"depth":2},{"title":"📝 Create Training Files","local":"-create-training-files","sections":[{"title":"📊 Training Logging with Trackio","local":"-training-logging-with-trackio","sections":[],"depth":3}],"depth":2},{"title":"🚀 Launch Training Job","local":"-launch-training-job","sections":[],"depth":2},{"title":"📊 Monitor Training","local":"-monitor-training","sections":[],"depth":2},{"title":"🧪 Load and Test the Model","local":"-load-and-test-the-model","sections":[],"depth":2},{"title":"🧹 Cleanup","local":"-cleanup","sections":[],"depth":2}],"depth":1}"> | |
| <link href="/docs/sagemaker/pr_2188/en/_app/immutable/assets/0.e3b0c442.css" rel="modulepreload"> | |
| <link rel="modulepreload" href="/docs/sagemaker/pr_2188/en/_app/immutable/entry/start.48a18f09.js"> | |
| <link rel="modulepreload" href="/docs/sagemaker/pr_2188/en/_app/immutable/chunks/scheduler.aec39e6a.js"> | |
| <link rel="modulepreload" href="/docs/sagemaker/pr_2188/en/_app/immutable/chunks/singletons.8e7a9ddc.js"> | |
| <link rel="modulepreload" href="/docs/sagemaker/pr_2188/en/_app/immutable/chunks/paths.a4e52f32.js"> | |
| <link rel="modulepreload" href="/docs/sagemaker/pr_2188/en/_app/immutable/entry/app.8481cdda.js"> | |
| <link rel="modulepreload" href="/docs/sagemaker/pr_2188/en/_app/immutable/chunks/preload-helper.382cad4e.js"> | |
| <link rel="modulepreload" href="/docs/sagemaker/pr_2188/en/_app/immutable/chunks/index.4ee0a2d0.js"> | |
| <link rel="modulepreload" href="/docs/sagemaker/pr_2188/en/_app/immutable/nodes/0.52c1f0fb.js"> | |
| <link rel="modulepreload" href="/docs/sagemaker/pr_2188/en/_app/immutable/chunks/each.e59479a4.js"> | |
| <link rel="modulepreload" href="/docs/sagemaker/pr_2188/en/_app/immutable/nodes/9.65431425.js"> | |
| <link rel="modulepreload" href="/docs/sagemaker/pr_2188/en/_app/immutable/chunks/Tip.e2132029.js"> | |
| <link rel="modulepreload" href="/docs/sagemaker/pr_2188/en/_app/immutable/chunks/MermaidChart.svelte_svelte_type_style_lang.3c60bfa3.js"> | |
| <link rel="modulepreload" href="/docs/sagemaker/pr_2188/en/_app/immutable/chunks/CodeBlock.543f5448.js"><!-- HEAD_svelte-u9bgzb_START --><meta name="hf:doc:metadata" content="{"title":"Fine-Tuning LLMs with TRL CLI on SageMaker","local":"fine-tuning-llms-with-trl-cli-on-sagemaker","sections":[{"title":"Prerequisites","local":"prerequisites","sections":[],"depth":2},{"title":"⚙️ Setup","local":"-setup","sections":[],"depth":2},{"title":"⚙️ Configuration","local":"-configuration","sections":[],"depth":2},{"title":"🔧 TRL CLI with YAML Config","local":"-trl-cli-with-yaml-config","sections":[],"depth":2},{"title":"📝 Create Training Files","local":"-create-training-files","sections":[{"title":"📊 Training Logging with Trackio","local":"-training-logging-with-trackio","sections":[],"depth":3}],"depth":2},{"title":"🚀 Launch Training Job","local":"-launch-training-job","sections":[],"depth":2},{"title":"📊 Monitor Training","local":"-monitor-training","sections":[],"depth":2},{"title":"🧪 Load and Test the Model","local":"-load-and-test-the-model","sections":[],"depth":2},{"title":"🧹 Cleanup","local":"-cleanup","sections":[],"depth":2}],"depth":1}"><!-- HEAD_svelte-u9bgzb_END --> <p></p> <div class="items-center shrink-0 min-w-[100px] max-sm:min-w-[50px] justify-end ml-auto flex" style="float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"><div class="inline-flex rounded-md max-sm:rounded-sm"><button class="inline-flex items-center gap-1 h-7 max-sm:h-7 px-2 max-sm:px-1.5 text-sm font-medium text-gray-800 border border-r-0 rounded-l-md max-sm:rounded-l-sm border-gray-200 bg-white hover:shadow-inner dark:border-gray-850 dark:bg-gray-950 dark:text-gray-200 dark:hover:bg-gray-800" aria-live="polite"><span class="inline-flex items-center justify-center rounded-md p-0.5 max-sm:p-0 hover:text-gray-800 dark:hover:text-gray-200"><svg class="sm:size-3.5 size-3" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg></span> <span>Copy page</span></button> <button class="inline-flex items-center justify-center w-6 max-sm:w-5 h-7 max-sm:h-7 disabled:pointer-events-none text-sm text-gray-500 hover:text-gray-700 dark:hover:text-white rounded-r-md max-sm:rounded-r-sm border border-l transition border-gray-200 bg-white hover:shadow-inner dark:border-gray-850 dark:bg-gray-950 dark:text-gray-200 dark:hover:bg-gray-800" aria-haspopup="menu" aria-expanded="false" aria-label="Open copy menu"><svg class="transition-transform text-gray-400 overflow-visible sm:size-3.5 size-3 rotate-0" width="1em" height="1em" viewBox="0 0 12 7" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1 1L6 6L11 1" stroke="currentColor"></path></svg></button></div> </div> <h1 class="relative group"><a id="fine-tuning-llms-with-trl-cli-on-sagemaker" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#fine-tuning-llms-with-trl-cli-on-sagemaker"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>Fine-Tuning LLMs with TRL CLI on SageMaker</span></h1> <p data-svelte-h="svelte-10rirhv">This notebook shows how to fine-tune language models on AWS SageMaker using the <strong><code>trl sft</code> CLI</strong> - the same command used by <a href="https://github.com/huggingface/trl-jobs" rel="nofollow">trl-jobs</a> on HuggingFace.</p> <p data-svelte-h="svelte-asbjt7"><strong>Hardware:</strong> <code>ml.g6e.12xlarge</code> (4x L40S) or <code>ml.p4de.24xlarge</code> (8x A100)</p> <p data-svelte-h="svelte-1gdx2t4"><strong>Why TRL CLI?</strong></p> <ul data-svelte-h="svelte-1xzrglb"><li>Zero Python code - just config and run</li> <li>Multi-GPU training via <code>accelerate</code></li> <li>Compatible with <a href="https://github.com/huggingface/trl-jobs/tree/main/trl_jobs/configs" rel="nofollow">trl-jobs configs</a></li></ul> <h2 class="relative group"><a id="prerequisites" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#prerequisites"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>Prerequisites</span></h2> <ul data-svelte-h="svelte-shr2a1"><li>AWS credentials configured</li> <li>SageMaker execution role with S3 access</li> <li>HuggingFace token</li></ul> <h2 class="relative group"><a id="-setup" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#-setup"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>⚙️ Setup</span></h2> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START -->>> %pip install sagemaker --upgrade --quiet<!-- HTML_TAG_END --></pre></div> <pre data-svelte-h="svelte-17iqp4r">[33mWARNING: Ignoring invalid distribution ~ackaging (/opt/pytorch/lib/python3.12/site-packages)[0m[33m | |
| [0m[33mWARNING: Ignoring invalid distribution ~ackaging (/opt/pytorch/lib/python3.12/site-packages)[0m[33m | |
| [0m[33mWARNING: Ignoring invalid distribution ~ackaging (/opt/pytorch/lib/python3.12/site-packages)[0m[33m | |
| [0m[33mWARNING: Ignoring invalid distribution ~ackaging (/opt/pytorch/lib/python3.12/site-packages)[0m[33m | |
| [0m[33mWARNING: Ignoring invalid distribution ~ackaging (/opt/pytorch/lib/python3.12/site-packages)[0m[33m | |
| [0m[33mWARNING: Ignoring invalid distribution ~ackaging (/opt/pytorch/lib/python3.12/site-packages)[0m[33m | |
| [0m | |
| [1m[[0m[34;49mnotice[0m[1;39;49m][0m[39;49m A new release of pip is available: [0m[31;49m25.1.1[0m[39;49m -> [0m[32;49m25.3[0m | |
| [1m[[0m[34;49mnotice[0m[1;39;49m][0m[39;49m To update, run: [0m[32;49mpip install --upgrade pip[0m | |
| Note: you may need to restart the kernel to use updated packages. | |
| </pre> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START --><span class="hljs-keyword">import</span> sagemaker<!-- HTML_TAG_END --></pre></div> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START -->>> <span class="hljs-comment"># Authenticate with Hugging Face</span> | |
| >> <span class="hljs-keyword">import</span> os | |
| >> <span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> login, get_token | |
| >> login() | |
| >> HF_TOKEN = get_token() | |
| >> os.environ[<span class="hljs-string">"HF_TOKEN"</span>] = HF_TOKEN | |
| >> <span class="hljs-built_in">print</span>(<span class="hljs-string">f"HF_TOKEN set: <span class="hljs-subst">{HF_TOKEN[:<span class="hljs-number">8</span>]}</span>..."</span>)<!-- HTML_TAG_END --></pre></div> <pre data-svelte-h="svelte-12puo0c">HF_TOKEN set: hf_MICph... | |
| </pre> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START -->>> <span class="hljs-keyword">import</span> json | |
| >> <span class="hljs-keyword">import</span> time | |
| >> <span class="hljs-keyword">import</span> uuid | |
| >> <span class="hljs-keyword">import</span> tempfile | |
| >> <span class="hljs-keyword">import</span> shutil | |
| >> <span class="hljs-keyword">from</span> pathlib <span class="hljs-keyword">import</span> Path | |
| >> <span class="hljs-keyword">import</span> boto3 | |
| >> <span class="hljs-keyword">import</span> sagemaker | |
| >> <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, StoppingCondition, OutputDataConfig | |
| >> <span class="hljs-keyword">from</span> sagemaker.core.helper.session_helper <span class="hljs-keyword">import</span> Session<!-- HTML_TAG_END --></pre></div> <pre data-svelte-h="svelte-1k0tiap">sagemaker.config INFO - Not applying SDK defaults from location: /etc/xdg/sagemaker/config.yaml | |
| sagemaker.config INFO - Not applying SDK defaults from location: /home/ec2-user/.config/sagemaker/config.yaml | |
| </pre> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START -->>> <span class="hljs-comment"># Initialize SageMaker session</span> | |
| >> sagemaker_session = Session() | |
| >> iam = boto3.client(<span class="hljs-string">'iam'</span>) | |
| >> role = iam.get_role(RoleName=<span class="hljs-string">'sagemaker-dlcs'</span>)[<span class="hljs-string">'Role'</span>][<span class="hljs-string">'Arn'</span>] | |
| >> region = sagemaker_session.boto_region_name | |
| >> account_id = boto3.client(<span class="hljs-string">"sts"</span>).get_caller_identity()[<span class="hljs-string">"Account"</span>] | |
| >> <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Region: <span class="hljs-subst">{region}</span>"</span>) | |
| >> <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Account: <span class="hljs-subst">{account_id}</span>"</span>) | |
| >> <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Role: <span class="hljs-subst">{role}</span>"</span>)<!-- HTML_TAG_END --></pre></div> <pre data-svelte-h="svelte-blti5a">Region: us-east-1 | |
| Account: 754289655784 | |
| Role: arn:aws:iam::754289655784:role/sagemaker-dlcs | |
| </pre> <h2 class="relative group"><a id="-configuration" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#-configuration"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>⚙️ Configuration</span></h2> <p data-svelte-h="svelte-uk8vqv">We use <strong>YAML config files</strong> exactly like <a href="https://github.com/huggingface/trl-jobs/blob/main/trl_jobs/configs/Qwen3-4B-a100-large.yaml" rel="nofollow">trl-jobs</a>.</p> <p data-svelte-h="svelte-r7hp5o"><strong>Hardware:</strong> 4x L40S GPUs on <code>ml.g6e.12xlarge</code> (192GB total VRAM)</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START -->>> <span class="hljs-comment"># =============================================================================</span> | |
| >> <span class="hljs-comment"># MODEL & INSTANCE CONFIGURATION</span> | |
| >> <span class="hljs-comment"># =============================================================================</span> | |
| >> <span class="hljs-comment"># Based on trl-jobs optimal configs:</span> | |
| >> <span class="hljs-comment"># https://github.com/huggingface/trl-jobs/blob/main/trl_jobs/configs/</span> | |
| >> MODEL_NAME = <span class="hljs-string">"Qwen/Qwen3-4B-Instruct-2507"</span> <span class="hljs-comment"># trl-jobs optimal config</span> | |
| >> DATASET_NAME = <span class="hljs-string">"OpenMed/Medical-Reasoning-SFT-GPT-OSS-120B"</span> | |
| >> <span class="hljs-comment"># Instance: ml.g6e.12xlarge = 4x L40S GPUs (48GB each = 192GB total)</span> | |
| >> <span class="hljs-comment"># Note: g6e.16xlarge only has 1 GPU, g6e.12xlarge/g6e.24xlarge have 4 GPUs</span> | |
| >> INSTANCE_TYPE = <span class="hljs-string">"ml.p4de.24xlarge"</span> | |
| >> NUM_GPUS = <span class="hljs-number">8</span> | |
| >> <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Model: <span class="hljs-subst">{MODEL_NAME}</span>"</span>) | |
| >> <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Dataset: <span class="hljs-subst">{DATASET_NAME}</span>"</span>) | |
| >> <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Instance: <span class="hljs-subst">{INSTANCE_TYPE}</span> (<span class="hljs-subst">{NUM_GPUS}</span>x L40S GPUs)"</span>)<!-- HTML_TAG_END --></pre></div> <pre data-svelte-h="svelte-8uq4u2">Model: Qwen/Qwen3-4B-Instruct-2507 | |
| Dataset: OpenMed/Medical-Reasoning-SFT-GPT-OSS-120B | |
| Instance: ml.p4de.24xlarge (8x L40S GPUs) | |
| </pre> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START -->>> <span class="hljs-comment"># Generate unique output model name for hub_model_id and run_name</span> | |
| >> timestamp = time.strftime(<span class="hljs-string">"%Y%m%d%H%M%S"</span>, time.gmtime()) | |
| >> OUTPUT_MODEL_NAME = <span class="hljs-string">f"Qwen3-4B-Base-SFT-<span class="hljs-subst">{timestamp}</span>"</span> | |
| >> <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Output model name: <span class="hljs-subst">{OUTPUT_MODEL_NAME}</span>"</span>) | |
| >> <span class="hljs-built_in">print</span>(<span class="hljs-string">"(Copy this to hub_model_id and run_name in the YAML config cell)"</span>)<!-- HTML_TAG_END --></pre></div> <pre data-svelte-h="svelte-v6xiiq">Output model name: Qwen3-4B-Base-SFT-20260120162518 | |
| (Copy this to hub_model_id and run_name in the YAML config cell) | |
| </pre> <h2 class="relative group"><a id="-trl-cli-with-yaml-config" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#-trl-cli-with-yaml-config"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>🔧 TRL CLI with YAML Config</span></h2> <p data-svelte-h="svelte-vgee4u">TRL CLI has <strong>native accelerate support</strong> - just put <code>num_processes</code> in the YAML config:</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START -->trl sft --config sft_config.yaml<!-- HTML_TAG_END --></pre></div> <p data-svelte-h="svelte-1bu7p6r">No need for <code>accelerate launch</code> wrapper! See <a href="https://huggingface.co/docs/trl/en/clis#scaling-up-with-accelerate" rel="nofollow">TRL CLI docs</a>.</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START -->>> <span class="hljs-comment"># Preview the command that will be executed</span> | |
| >> <span class="hljs-built_in">print</span>(<span class="hljs-string">"Command:"</span>) | |
| >> <span class="hljs-built_in">print</span>(<span class="hljs-string">" trl sft --config sft_config.yaml"</span>) | |
| >> <span class="hljs-built_in">print</span>() | |
| >> <span class="hljs-built_in">print</span>(<span class="hljs-string">"Config: scripts/sft_config.yaml"</span>) | |
| >> <span class="hljs-built_in">print</span>(<span class="hljs-string">"Model: Qwen/Qwen3-4B-Base"</span>) | |
| >> <span class="hljs-built_in">print</span>(<span class="hljs-string">"Dataset: trl-lib/Capybara"</span>) | |
| >> <span class="hljs-built_in">print</span>(<span class="hljs-string">"GPUs: 4 (via num_processes in YAML)"</span>)<!-- HTML_TAG_END --></pre></div> <pre data-svelte-h="svelte-1f2b3x9">Command: | |
| trl sft --config sft_config.yaml | |
| Config: scripts/sft_config.yaml | |
| Model: Qwen/Qwen3-4B-Base | |
| Dataset: trl-lib/Capybara | |
| GPUs: 4 (via num_processes in YAML) | |
| </pre> <h2 class="relative group"><a id="-create-training-files" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#-create-training-files"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>📝 Create Training Files</span></h2> <p data-svelte-h="svelte-u05ibi">We create:</p> <ol data-svelte-h="svelte-1x0qyyz"><li><strong><code>sft_config.yaml</code></strong> - TRL SFT config (same format as trl-jobs)</li> <li><strong><code>run_sft.py</code></strong> - Entry script that calls <code>trl sft --config</code></li> <li><strong><code>requirements.txt</code></strong> - Python dependencies</li></ol> <h3 class="relative group"><a id="-training-logging-with-trackio" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#-training-logging-with-trackio"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>📊 Training Logging with Trackio</span></h3> <p data-svelte-h="svelte-heatfk">This notebook uses <a href="https://huggingface.co/docs/trl/en/trackio_integration" rel="nofollow">Trackio</a> for real-time training metrics visualization. Trackio is TRL’s native integration for logging training runs to a Hugging Face Space.</p> <p data-svelte-h="svelte-fx8nq4"><strong>To use Trackio:</strong></p> <ol data-svelte-h="svelte-1d3wvnx"><li>Set <code>report_to: trackio</code> in your config</li> <li>Configure <code>TRACKIO_SPACE_ID</code> (your HF Space) and <code>TRACKIO_PROJECT</code> (project name) as environment variables</li></ol> <p data-svelte-h="svelte-gec9i3"><strong>To disable:</strong> Change <code>report_to: trackio</code> to <code>report_to: none</code> in the config and remove the <code>TRACKIO_*</code> environment variables.</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START -->>> <span class="hljs-comment"># Create scripts directory</span> | |
| >> <span class="hljs-keyword">import</span> shutil | |
| >> source_dir = Path(<span class="hljs-string">"scripts"</span>) | |
| >> <span class="hljs-keyword">if</span> source_dir.exists(): | |
| <span class="hljs-meta">... </span> shutil.rmtree(source_dir) | |
| >> source_dir.mkdir(exist_ok=<span class="hljs-literal">True</span>) | |
| >> <span class="hljs-built_in">print</span>(<span class="hljs-string">f"✓ Created <span class="hljs-subst">{source_dir}</span>/"</span>)<!-- HTML_TAG_END --></pre></div> <pre data-svelte-h="svelte-15dm47y">✓ Created scripts/ | |
| </pre> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START -->>> %%writefile scripts/run_sft.py | |
| >> <span class="hljs-comment">#!/usr/bin/env python3</span> | |
| >> <span class="hljs-string">"""Entry script for TRL SFT training on SageMaker. | |
| <span class="hljs-meta">... </span>Runs: trl sft --config sft_config.yaml | |
| <span class="hljs-meta">... </span>TRL CLI natively supports accelerate - num_processes is in the YAML config. | |
| <span class="hljs-meta">... </span>See: https://huggingface.co/docs/trl/en/clis#scaling-up-with-accelerate | |
| <span class="hljs-meta">... </span>"""</span> | |
| >> <span class="hljs-keyword">import</span> os | |
| >> <span class="hljs-keyword">import</span> sys | |
| >> <span class="hljs-keyword">import</span> subprocess | |
| >> <span class="hljs-keyword">from</span> pathlib <span class="hljs-keyword">import</span> Path | |
| >> <span class="hljs-keyword">def</span> <span class="hljs-title function_">main</span>(): | |
| <span class="hljs-meta">... </span> <span class="hljs-built_in">print</span>(<span class="hljs-string">"="</span> * <span class="hljs-number">60</span>) | |
| <span class="hljs-meta">... </span> <span class="hljs-built_in">print</span>(<span class="hljs-string">"TRL SFT Training on SageMaker"</span>) | |
| <span class="hljs-meta">... </span> <span class="hljs-built_in">print</span>(<span class="hljs-string">"="</span> * <span class="hljs-number">60</span>) | |
| <span class="hljs-meta">... </span> <span class="hljs-comment"># Environment info</span> | |
| <span class="hljs-meta">... </span> hf_token = os.environ.get(<span class="hljs-string">"HF_TOKEN"</span>, <span class="hljs-string">""</span>) | |
| <span class="hljs-meta">... </span> <span class="hljs-built_in">print</span>(<span class="hljs-string">f"HF_TOKEN: <span class="hljs-subst">{hf_token[:<span class="hljs-number">8</span>]}</span>..."</span> <span class="hljs-keyword">if</span> hf_token <span class="hljs-keyword">else</span> <span class="hljs-string">"HF_TOKEN: NOT SET"</span>) | |
| <span class="hljs-meta">... </span> <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Working directory: <span class="hljs-subst">{os.getcwd()}</span>"</span>) | |
| <span class="hljs-meta">... </span> <span class="hljs-comment"># Find config file</span> | |
| <span class="hljs-meta">... </span> config_path = Path(<span class="hljs-string">"/opt/ml/input/data/code/sft_config.yaml"</span>) | |
| <span class="hljs-meta">... </span> <span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> config_path.exists(): | |
| <span class="hljs-meta">... </span> config_path = Path(<span class="hljs-string">"sft_config.yaml"</span>) | |
| <span class="hljs-meta">... </span> <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Config file: <span class="hljs-subst">{config_path}</span>"</span>) | |
| <span class="hljs-meta">... </span> <span class="hljs-built_in">print</span>() | |
| <span class="hljs-meta">... </span> <span class="hljs-comment"># Print config contents</span> | |
| <span class="hljs-meta">... </span> <span class="hljs-built_in">print</span>(<span class="hljs-string">"Configuration:"</span>) | |
| <span class="hljs-meta">... </span> <span class="hljs-built_in">print</span>(<span class="hljs-string">"-"</span> * <span class="hljs-number">40</span>) | |
| <span class="hljs-meta">... </span> <span class="hljs-built_in">print</span>(config_path.read_text()) | |
| <span class="hljs-meta">... </span> <span class="hljs-built_in">print</span>(<span class="hljs-string">"-"</span> * <span class="hljs-number">40</span>) | |
| <span class="hljs-meta">... </span> <span class="hljs-built_in">print</span>() | |
| <span class="hljs-meta">... </span> <span class="hljs-comment"># TRL CLI has native accelerate support - just pass the config</span> | |
| <span class="hljs-meta">... </span> <span class="hljs-comment"># num_processes, mixed_precision, etc. are read from the YAML</span> | |
| <span class="hljs-meta">... </span> cmd = [<span class="hljs-string">"trl"</span>, <span class="hljs-string">"sft"</span>, <span class="hljs-string">"--config"</span>, <span class="hljs-built_in">str</span>(config_path)] | |
| <span class="hljs-meta">... </span> <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Running: <span class="hljs-subst">{<span class="hljs-string">' '</span>.join(cmd)}</span>"</span>) | |
| <span class="hljs-meta">... </span> <span class="hljs-built_in">print</span>(<span class="hljs-string">"="</span> * <span class="hljs-number">60</span>) | |
| <span class="hljs-meta">... </span> <span class="hljs-comment"># Execute</span> | |
| <span class="hljs-meta">... </span> result = subprocess.run(cmd, check=<span class="hljs-literal">False</span>) | |
| <span class="hljs-meta">... </span> sys.exit(result.returncode) | |
| >> <span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">"__main__"</span>: | |
| <span class="hljs-meta">... </span> main()<!-- HTML_TAG_END --></pre></div> <pre data-svelte-h="svelte-hfy09j">Overwriting scripts/run_sft.py | |
| </pre> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START -->>> %%writefile scripts/requirements.txt | |
| >> trl>=<span class="hljs-number">0.12</span><span class="hljs-number">.0</span> | |
| >> transformers>=<span class="hljs-number">4.45</span><span class="hljs-number">.0</span> | |
| >> datasets>=<span class="hljs-number">3.0</span><span class="hljs-number">.0</span> | |
| >> peft>=<span class="hljs-number">0.13</span><span class="hljs-number">.0</span> | |
| >> accelerate>=<span class="hljs-number">1.0</span><span class="hljs-number">.0</span> | |
| >> huggingface_hub>=<span class="hljs-number">0.26</span><span class="hljs-number">.0</span> | |
| >> liger-kernel>=<span class="hljs-number">0.4</span><span class="hljs-number">.0</span> | |
| >> flash-attn>=<span class="hljs-number">2.0</span><span class="hljs-number">.0</span> | |
| >> trackio | |
| >> hf_transfer<!-- HTML_TAG_END --></pre></div> <pre data-svelte-h="svelte-1jtnupv">Overwriting scripts/requirements.txt | |
| </pre> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START -->>> %%writefile scripts/sft_config.yaml | |
| >> <span class="hljs-comment"># TRL SFT Config - Based on trl-jobs</span> | |
| >> <span class="hljs-comment"># https://github.com/huggingface/trl-jobs/blob/main/trl_jobs/configs/Qwen3-4B-a100-large.yaml</span> | |
| >> <span class="hljs-comment"># Adapted for 4x L40S GPUs (ml.g6e.12xlarge)</span> | |
| >> <span class="hljs-comment"># Accelerate arguments</span> | |
| >> num_processes: <span class="hljs-number">8</span> | |
| >> num_machines: <span class="hljs-number">1</span> | |
| >> mixed_precision: <span class="hljs-string">"no"</span> | |
| >> dynamo_backend: <span class="hljs-string">"no"</span> | |
| >> <span class="hljs-comment"># Model arguments</span> | |
| >> model_name_or_path: Qwen/Qwen3-4B-Instruct-<span class="hljs-number">2507</span> | |
| >> model_revision: main | |
| >> torch_dtype: bfloat16 | |
| >> attn_implementation: kernels-community/flash-attn2 | |
| >> use_peft: true | |
| >> <span class="hljs-comment"># Data arguments</span> | |
| >> dataset_name: OpenMed/Medical-Reasoning-SFT-GPT-OSS-120B | |
| >> dataset_num_proc: <span class="hljs-number">96</span> | |
| >> <span class="hljs-comment"># Training arguments</span> | |
| >> bf16: true | |
| >> do_eval: false | |
| >> eval_strategy: <span class="hljs-string">"no"</span> | |
| >> gradient_accumulation_steps: <span class="hljs-number">8</span> | |
| >> gradient_checkpointing: true | |
| >> gradient_checkpointing_kwargs: | |
| <span class="hljs-meta">... </span> use_reentrant: false | |
| >> learning_rate: <span class="hljs-number">2.0e-04</span> | |
| >> log_level: info | |
| >> logging_strategy: steps | |
| >> logging_steps: <span class="hljs-number">10</span> | |
| >> lr_scheduler_type: cosine_with_min_lr | |
| >> lr_scheduler_kwargs: | |
| <span class="hljs-meta">... </span> min_lr_rate: <span class="hljs-number">0.1</span> | |
| >> max_grad_norm: <span class="hljs-number">0.2</span> | |
| >> max_length: <span class="hljs-number">24576</span> | |
| >> num_train_epochs: <span class="hljs-number">1</span> | |
| >> output_dir: /opt/ml/model | |
| >> overwrite_output_dir: true | |
| >> packing: true | |
| >> pad_to_multiple_of: <span class="hljs-number">4096</span> | |
| >> per_device_eval_batch_size: <span class="hljs-number">1</span> | |
| >> per_device_train_batch_size: <span class="hljs-number">1</span> | |
| >> seed: <span class="hljs-number">42</span> | |
| >> use_liger_kernel: true | |
| >> warmup_ratio: <span class="hljs-number">0.03</span> | |
| >> <span class="hljs-comment"># Checkpointing</span> | |
| >> save_steps: <span class="hljs-number">100</span> | |
| >> save_strategy: steps | |
| >> save_total_limit: <span class="hljs-number">2</span> | |
| >> <span class="hljs-comment"># Hub & Logging</span> | |
| >> push_to_hub: true | |
| >> hub_strategy: every_save | |
| >> hub_model_id: Qwen3-4B-Instruct-OpenMed <span class="hljs-comment"># <-- UPDATE with OUTPUT_MODEL_NAME from Cell 10</span> | |
| >> run_name: Qwen3-4B-Instruct-OpenMed-SFT <span class="hljs-comment"># <-- UPDATE with OUTPUT_MODEL_NAME from Cell 10</span> | |
| >> report_to: trackio<!-- HTML_TAG_END --></pre></div> <pre data-svelte-h="svelte-1yslspo">Overwriting scripts/sft_config.yaml | |
| </pre> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START -->>> <span class="hljs-comment"># Verify all files created</span> | |
| >> <span class="hljs-built_in">print</span>(<span class="hljs-string">"Contents of scripts/:"</span>) | |
| >> <span class="hljs-keyword">for</span> f <span class="hljs-keyword">in</span> <span class="hljs-built_in">sorted</span>(source_dir.iterdir()): | |
| <span class="hljs-meta">... </span> <span class="hljs-built_in">print</span>(<span class="hljs-string">f" ✓ <span class="hljs-subst">{f.name}</span>"</span>)<!-- HTML_TAG_END --></pre></div> <pre data-svelte-h="svelte-18v1uj6">Contents of scripts/: | |
| ✓ requirements.txt | |
| ✓ run_sft.py | |
| ✓ sft_config.yaml | |
| </pre> <h2 class="relative group"><a id="-launch-training-job" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#-launch-training-job"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>🚀 Launch Training Job</span></h2> <p data-svelte-h="svelte-4ynnjy">We use the SageMaker <code>ModelTrainer</code> with <code>SourceCode</code> to launch the training job.</p> <p data-svelte-h="svelte-1rg2oxc">The TRL CLI arguments are embedded directly in the entry script to avoid SageMaker/accelerate argument parsing conflicts.</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START -->>> <span class="hljs-comment"># Job configuration</span> | |
| >> PROJECT_NAME = <span class="hljs-string">"trl-sft-yaml"</span> | |
| >> BUCKET_NAME = sagemaker_session.default_bucket() | |
| >> S3_OUTPUT_URI = <span class="hljs-string">f"s3://<span class="hljs-subst">{BUCKET_NAME}</span>/<span class="hljs-subst">{PROJECT_NAME}</span>"</span> | |
| >> unique_id = uuid.uuid4().<span class="hljs-built_in">hex</span>[:<span class="hljs-number">8</span>] | |
| >> base_job_name = <span class="hljs-string">f"<span class="hljs-subst">{PROJECT_NAME}</span>-<span class="hljs-subst">{unique_id}</span>"</span> | |
| >> <span class="hljs-comment"># Training image - PyTorch DLC with GPU support</span> | |
| >> TRAINING_IMAGE = <span class="hljs-string">f"763104351884.dkr.ecr.us-east-1.amazonaws.com/huggingface-pytorch-training:2.8.0-transformers4.56.2-gpu-py312-cu129-ubuntu22.04-v1.2"</span> | |
| >> <span class="hljs-comment"># Create ModelTrainer with SourceCode</span> | |
| >> trainer = ModelTrainer( | |
| <span class="hljs-meta">... </span> sagemaker_session=sagemaker_session, | |
| <span class="hljs-meta">... </span> role=role, | |
| <span class="hljs-meta">... </span> training_mode=<span class="hljs-string">"SAGEMAKER_TRAINING_JOB"</span>, | |
| <span class="hljs-meta">... </span> source_code=SourceCode( | |
| <span class="hljs-meta">... </span> source_dir=<span class="hljs-built_in">str</span>(source_dir), | |
| <span class="hljs-meta">... </span> entry_script=<span class="hljs-string">"run_sft.py"</span>, | |
| <span class="hljs-meta">... </span> requirements=<span class="hljs-string">"requirements.txt"</span>, | |
| <span class="hljs-meta">... </span> ), | |
| <span class="hljs-meta">... </span> compute=Compute( | |
| <span class="hljs-meta">... </span> instance_type=INSTANCE_TYPE, | |
| <span class="hljs-meta">... </span> instance_count=<span class="hljs-number">1</span>, | |
| <span class="hljs-meta">... </span> volume_size_in_gb=<span class="hljs-number">200</span>, <span class="hljs-comment"># Larger for 4B model + checkpoints</span> | |
| <span class="hljs-meta">... </span> ), | |
| <span class="hljs-meta">... </span> stopping_condition=StoppingCondition( | |
| <span class="hljs-meta">... </span> max_runtime_in_seconds=<span class="hljs-number">6</span> * <span class="hljs-number">60</span> * <span class="hljs-number">60</span>, <span class="hljs-comment"># 6 hours</span> | |
| <span class="hljs-meta">... </span> ), | |
| <span class="hljs-meta">... </span> output_data_config=OutputDataConfig( | |
| <span class="hljs-meta">... </span> s3_output_path=<span class="hljs-string">f"<span class="hljs-subst">{S3_OUTPUT_URI}</span>/output/"</span>, | |
| <span class="hljs-meta">... </span> ), | |
| <span class="hljs-meta">... </span> base_job_name=base_job_name, | |
| <span class="hljs-meta">... </span> environment={ | |
| <span class="hljs-meta">... </span> <span class="hljs-string">"HF_TOKEN"</span>: HF_TOKEN, | |
| <span class="hljs-meta">... </span> <span class="hljs-string">"TRANSFORMERS_VERBOSITY"</span>: <span class="hljs-string">"info"</span>, | |
| <span class="hljs-meta">... </span> <span class="hljs-string">"NCCL_DEBUG"</span>: <span class="hljs-string">"WARN"</span>, <span class="hljs-comment"># For multi-GPU debugging</span> | |
| <span class="hljs-meta">... </span> <span class="hljs-comment"># Trackio logging - https://huggingface.co/docs/trl/en/trackio_integration</span> | |
| <span class="hljs-meta">... </span> <span class="hljs-string">"TRACKIO_SPACE_ID"</span>: <span class="hljs-string">"florentgbelidji/trackio"</span>, | |
| <span class="hljs-meta">... </span> <span class="hljs-string">"TRACKIO_PROJECT"</span>: <span class="hljs-string">"trl-sft"</span>, | |
| <span class="hljs-meta">... </span> <span class="hljs-string">"HF_HUB_ENABLE_HF_TRANSFER"</span>: <span class="hljs-string">"1"</span>, | |
| <span class="hljs-meta">... </span> }, | |
| <span class="hljs-meta">... </span> training_image=TRAINING_IMAGE, | |
| <span class="hljs-meta">... </span>) | |
| >> <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Job name: <span class="hljs-subst">{base_job_name}</span>"</span>) | |
| >> <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Instance: <span class="hljs-subst">{INSTANCE_TYPE}</span> (<span class="hljs-subst">{NUM_GPUS}</span>x L40S GPUs)"</span>) | |
| >> <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Output: <span class="hljs-subst">{S3_OUTPUT_URI}</span>"</span>) | |
| >> <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Image: <span class="hljs-subst">{TRAINING_IMAGE.split(<span class="hljs-string">'/'</span>)[-<span class="hljs-number">1</span>]}</span>"</span>) | |
| >> <span class="hljs-built_in">print</span>(<span class="hljs-string">f"\nReady to launch!"</span>)<!-- HTML_TAG_END --></pre></div> <pre data-svelte-h="svelte-1dmol27">Job name: trl-sft-yaml-97d3b6c5 | |
| Instance: ml.p4de.24xlarge (8x L40S GPUs) | |
| Output: s3://sagemaker-us-east-1-754289655784/trl-sft-yaml | |
| Image: huggingface-pytorch-training:2.8.0-transformers4.56.2-gpu-py312-cu129-ubuntu22.04-v1.2 | |
| Ready to launch! | |
| </pre> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START -->>> <span class="hljs-comment"># Launch the training job</span> | |
| >> <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Launching training job: <span class="hljs-subst">{base_job_name}</span>"</span>) | |
| >> <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Model: <span class="hljs-subst">{MODEL_NAME}</span>"</span>) | |
| >> <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Dataset: <span class="hljs-subst">{DATASET_NAME}</span>"</span>) | |
| >> <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Instance: <span class="hljs-subst">{INSTANCE_TYPE}</span> (<span class="hljs-subst">{NUM_GPUS}</span>x L40S)"</span>) | |
| >> <span class="hljs-built_in">print</span>(<span class="hljs-string">f"\nUsing: trl sft --config sft_config.yaml"</span>) | |
| >> <span class="hljs-built_in">print</span>() | |
| >> <span class="hljs-comment"># Set wait=True to stream logs, wait=False to run in background</span> | |
| >> trainer.train(wait=<span class="hljs-literal">True</span>)<!-- HTML_TAG_END --></pre></div> <pre data-svelte-h="svelte-1ow53zd">Launching training job: trl-sft-yaml-97d3b6c5 | |
| Model: Qwen/Qwen3-4B-Instruct-2507 | |
| Dataset: OpenMed/Medical-Reasoning-SFT-GPT-OSS-120B | |
| Instance: ml.p4de.24xlarge (8x L40S) | |
| Using: trl sft --config sft_config.yaml | |
| </pre> <h2 class="relative group"><a id="-monitor-training" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#-monitor-training"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>📊 Monitor Training</span></h2> <p data-svelte-h="svelte-12wqj5">If you launched with <code>wait=False</code>, you can monitor the job here.</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START -->>> <span class="hljs-comment"># Get the job name</span> | |
| >> training_job_name = trainer.latest_training_job.name <span class="hljs-keyword">if</span> <span class="hljs-built_in">hasattr</span>(trainer, <span class="hljs-string">'latest_training_job'</span>) <span class="hljs-keyword">else</span> base_job_name | |
| >> <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Job name: <span class="hljs-subst">{training_job_name}</span>"</span>) | |
| >> <span class="hljs-comment"># View in console</span> | |
| >> console_url = <span class="hljs-string">f"https://<span class="hljs-subst">{region}</span>.console.aws.amazon.com/sagemaker/home?region=<span class="hljs-subst">{region}</span>#/jobs/<span class="hljs-subst">{training_job_name}</span>"</span> | |
| >> <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Console: <span class="hljs-subst">{console_url}</span>"</span>)<!-- HTML_TAG_END --></pre></div> <pre data-svelte-h="svelte-lmlvhp">Job name: trl-sft-yaml-dfe9c258 | |
| Console: https://us-east-1.console.aws.amazon.com/sagemaker/home?region=us-east-1#/jobs/trl-sft-yaml-dfe9c258 | |
| </pre> <h2 class="relative group"><a id="-load-and-test-the-model" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#-load-and-test-the-model"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>🧪 Load and Test the Model</span></h2> <p data-svelte-h="svelte-69dbxo">After training completes, the model is pushed to the Hugging Face Hub.</p> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START --><span class="hljs-comment"># Load the fine-tuned model from Hub</span> | |
| <span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> pipeline | |
| <span class="hljs-comment"># Your HF username</span> | |
| HF_USERNAME = <span class="hljs-string">"florentgbelidji"</span> <span class="hljs-comment"># Change this!</span> | |
| finetuned_model_id = <span class="hljs-string">f"<span class="hljs-subst">{HF_USERNAME}</span>/<span class="hljs-subst">{OUTPUT_MODEL_NAME}</span>"</span> | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Model will be available at: <span class="hljs-subst">{finetuned_model_id}</span>"</span>) | |
| <span class="hljs-comment"># Uncomment after training completes</span> | |
| <span class="hljs-comment"># pipe = pipeline(</span> | |
| <span class="hljs-comment"># "text-generation",</span> | |
| <span class="hljs-comment"># model=finetuned_model_id,</span> | |
| <span class="hljs-comment"># torch_dtype="auto",</span> | |
| <span class="hljs-comment"># device_map="auto",</span> | |
| <span class="hljs-comment"># )</span> | |
| <span class="hljs-comment"># messages = [{"role": "user", "content": "What is the capital of France?"}]</span> | |
| <span class="hljs-comment"># output = pipe(messages, max_new_tokens=100)</span> | |
| <span class="hljs-comment"># print(output[0]["generated_text"][-1]["content"])</span><!-- HTML_TAG_END --></pre></div> <h2 class="relative group"><a id="-cleanup" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#-cleanup"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>🧹 Cleanup</span></h2> <div class="code-block relative "><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START -->shutil.rmtree(source_dir, ignore_errors=<span class="hljs-literal">True</span>) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">"Cleaned up temporary files."</span>)<!-- HTML_TAG_END --></pre></div> <hr> <blockquote class="tip"><p data-svelte-h="svelte-12riiza">📍 Find the complete example on GitHub <a href="https://github.com/huggingface/hub-docs/tree/main/notebooks/sagemaker-sdk/fine-tune-trl-cli/sagemaker-notebook.ipynb" rel="nofollow">here</a>!</p></blockquote> <a class="!text-gray-400 !no-underline text-sm flex items-center not-prose mt-4" href="https://github.com/huggingface/hub-docs/blob/main/docs/sagemaker/source/examples/sagemaker-sdk-fine-tune-trl-cli.mdx" target="_blank"><svg class="mr-1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M31,16l-7,7l-1.41-1.41L28.17,16l-5.58-5.59L24,9l7,7z"></path><path d="M1,16l7-7l1.41,1.41L3.83,16l5.58,5.59L8,23l-7-7z"></path><path d="M12.419,25.484L17.639,6.552l1.932,0.518L14.351,26.002z"></path></svg> <span data-svelte-h="svelte-zjs2n5"><span class="underline">Update</span> on GitHub</span></a> <p></p> | |
| <script> | |
| { | |
| __sveltekit_16a821l = { | |
| assets: "/docs/sagemaker/pr_2188/en", | |
| base: "/docs/sagemaker/pr_2188/en", | |
| env: {} | |
| }; | |
| const element = document.currentScript.parentElement; | |
| const data = [null,null]; | |
| Promise.all([ | |
| import("/docs/sagemaker/pr_2188/en/_app/immutable/entry/start.48a18f09.js"), | |
| import("/docs/sagemaker/pr_2188/en/_app/immutable/entry/app.8481cdda.js") | |
| ]).then(([kit, app]) => { | |
| kit.start(app, element, { | |
| node_ids: [0, 9], | |
| data, | |
| form: null, | |
| error: null | |
| }); | |
| }); | |
| } | |
| </script> | |
Xet Storage Details
- Size:
- 75.4 kB
- Xet hash:
- 3e37c9e457911baa87b49a7b165f73a67a4543d379c95cce30407e6e24299aa2
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.