Buckets:

rtrm's picture
download
raw
49.1 kB
import{s as us,o as Ts,n as hs}from"../chunks/scheduler.37c15a92.js";import{S as fs,i as Cs,g as y,s as a,r as p,A as Zs,h as o,f as s,c as n,j as js,u as M,x as d,k as bs,y as Is,a as t,v as i,d as c,t as r,w as m,m as Bs,n as $s}from"../chunks/index.2bf4358c.js";import{T as ws}from"../chunks/Tip.363c041f.js";import{Y as Us}from"../chunks/Youtube.1e50a667.js";import{C as J}from"../chunks/CodeBlock.4e987730.js";import{C as Gs}from"../chunks/CourseFloatingBanner.9ff4c771.js";import{H as kl,E as ks}from"../chunks/getInferenceSnippets.ebf8be91.js";function Xs(Bl){let j,b="✏️ <strong>Попробуйте!</strong> Измените обучающий цикл так, чтобы дообучить модель на датасете SST-2.";return{c(){j=y("p"),j.innerHTML=b},l(w){j=o(w,"P",{"data-svelte-h":!0}),d(j)!=="svelte-d7z733"&&(j.innerHTML=b)},m(w,$l){t(w,j,$l)},p:hs,d(w){w&&s(j)}}}function Ws(Bl){let j;return{c(){j=Bs('⚠️ Чтобы воспользоваться ускорением, предлагаемым облачными TPU, мы рекомендуем дополнять данные до фиксированной длины с помощью аргументов `padding="max_length"` и `max_length` токенизатора.')},l(b){j=$s(b,'⚠️ Чтобы воспользоваться ускорением, предлагаемым облачными TPU, мы рекомендуем дополнять данные до фиксированной длины с помощью аргументов `padding="max_length"` и `max_length` токенизатора.')},m(b,w){t(b,j,w)},d(b){b&&s(j)}}}function Rs(Bl){let j,b,w,$l,T,Xl,h,Wl,f,Rl,C,Ne="Теперь мы посмотрим, как достичь результатов из предыдущей главы без использования класса <code>Trainer</code>. В этой главе мы предполагаем, что вы выполнили этапы препроцессинга раздела 2. Ниже короткая выжимка того, что вам понадобится:",gl,Z,_l,I,vl,B,ze="Перед реализацией цикла обучения необходимо задать несколько объектов. Первый: загрузчики данных (далее - dataloaders), которые мы будем использовать для итерирования по батчам данных. Перед этим нам необходимо применить несколько операций постпроцессинга к нашему <code>tokenized_datasets</code>. Это нужно сделать: в прошлый раз за нас это автоматически делал <code>Trainer</code>. Необходимо сделать следующее:",Yl,$,Ee="<li>Удалить колонки, соответствующие значениям, которые модель не принимает на вход (например, <code>sentence1</code> и <code>sentence2</code>).</li> <li>Переименовать колонку <code>label</code> в <code>labels</code> (потому что модель ожидает аргумент, названный <code>labels</code>).</li> <li>Задать тип данных в датасете pytorch tensors вместо списков.</li>",Vl,G,Fe="Наш <code>tokenized_datasets</code> предоставляет возможность использовать встроенные методы для каждого из приведенных выше шагов:",Al,k,Nl,X,Qe="Мы можем проверить, что в результате у нас присутствуют только те поля, которые ожидает наша модель:",zl,W,El,R,He="Теперь, когда датасет готов, мы может задать dataloader:",Fl,g,Ql,_,xe="Для того, чтобы убедиться в отсутствии ошибок в сделанном нами препроцессинге, мы можем проверить один батч данных:",Hl,v,xl,Y,Sl,V,Se="Обратите внимание, что фактические размеры, вероятно, будут немного отличаться для в вашем случае, так как мы установили <code>shuffle=True</code> для обучающего загрузчика данных, также мы дополняем (padding) до максимальной длины внутри батча.",ql,A,qe="Теперь мы полностью завершили этап препроцессинга (приятный, но неуловимый момент для любого специалиста по машинному обучению), перейдем к модели. Мы инициализируем ее точно так, как делали в предыдущем примере:",Kl,N,Ll,z,Ke="Чтобы убедиться, что обучение пойдет гладко, вы подадим на вход модели один батч:",Dl,E,Pl,F,Ol,Q,Le="Все модели 🤗 трансформеров возвращают значение функции потерь, если в данных были <code>labels</code>, а также логиты (в результате получается тензор 8 х 2).",le,H,De='Мы почти готовы к написанию обучающего цикла! Мы пропустили только две вещи: оптимизатор и планировщик скорости обучения (learning rate scheduler). Ввиду того, что мы пытаемся повторить вручную то, что делал за нас <code>Trainer</code>, мы будем использовать такие же значения по умолчанию. Оптимизатор, используемый в <code>Trainer</code> - <code>AdamW</code>, который является почти полной копией Adam, за исключением трюка с сокращением весов (далее - weight decay) (см. <a href="https://arxiv.org/abs/1711.05101" rel="nofollow">“Decoupled Weight Decay Regularization”</a> за авторством Ilya Loshchilov и Frank Hutter).',ee,x,se,S,Pe="Наконец, планировщик скорости обучения по умолчанию - просто линейное уменьшение весов с максимального значения (5e-5) до 0. Чтобы корректно задать его, нам нужно знать число шагов в обучении, которое задается как произведение числа эпох и числа батчей (длины нашего загрузчика данных). Число эпох по умолчанию в <code>Trainer</code> равно 3, так же мы зададим его и сейчас:",te,q,ae,K,ne,L,pe,D,Oe="Последний момент: мы хотим использовать GPU в случае, если у нас будет такая возможность (на CPU процесс может занять несколько часов вместо пары минут). Чтобы добиться этого, мы определим переменную <code>device</code> и «прикрепим» к видеокарте нашу модель и данные:",Me,P,ie,O,ce,ll,ls="Теперь мы готовы к обучению модели! Чтобы иметь представление о том, сколько времени это может занять, мы добавим прогресс-бар, который будет иллюстрировать, сколько шагов обучения уже выполнено. Это можно сделать с использованием бибилиотеки tqdm:",re,el,me,sl,es="Вы можете заметить, что процесс обучения выглядит очень похожим на то, как он выглядел в наших первых примерах. Мы не указывали модели, чтобы она нам что-то возвращала в процессе обучения. Для этого мы добавим цикл валидации.",ye,tl,oe,al,ss="Ранее мы использовали метрику, которую нам предоставляла библиотека 🤗 Evaluate. Мы уже знаем, что есть метод <code>metric.compute()</code>, однако метрики могут накапливать значения в процессе итерирования по батчу, для этого есть метод <code>add_batch()</code>. После того, как мы пройдемся по всем батчам, мы сможем вычислить финальный результат с помощью <code>metric.compute()</code>. Вот пример того, как это можно сделать в цикле валидации:",de,nl,Je,pl,je,Ml,ts="Повторим: результаты, которые получите вы, могут немного отличаться из-за наличия случайностей при инициализации параметров слоя модели и из-за случайного перемешивания датасета, однако их порядок должен совпадать.",be,U,we,il,Ue,cl,ue,rl,as='Обучающий цикл, заданный выше, отлично работает на одном GPU или CPU. Однако использование библиотеки <a href="https://github.com/huggingface/accelerate" rel="nofollow">🤗 Accelerate</a> позволяет с небольшими изменениями сделать эту процедуру распределенной на несколько GPU или TPU. Начииная с момента создания обучающих и валидационных загрузчиков данных, наш «ручной» обучающий цикл выглядит так:',Te,ml,he,yl,ns="А вот изменения, которые нужно внести, чтобы ускорить процесс:",fe,ol,Ce,dl,ps=`Первая строка – это строка импорта библиотеки. Вторая строка инициализирует объект <code>Accelerator</code>, который проанализирует окружение и определит необходимые настройки. 🤗 Accelerate автоматически использует доступное оборудование, поэтому вы можете удалить строки, которые «прикрепляют»
модель и данные к видеокарте (или, если вам так удобнее, можете изменить их на <code>accelerator.device</code> вместо просто <code>device</code>).`,Ze,Jl,Ms="Далее главная часть работы выполняется в строке, которая отправляет данные, модель и оптимизатор на <code>accelerator.prepare()</code>. Этот метод «обернет» ваши объекты в контейнер и убедится, что распределенное обучение выполняется корректно. Оставшиеся изменения – удаление строки, которая отправляет батч на <code>device</code> (повторим: если вы хотите оставить эту строку, замените <code>device</code> на <code>accelerator.device</code>) и замените <code>loss.backward()</code> на <code>accelerator.backward(loss)</code>.",Ie,u,Be,jl,is="Если вы хотите скопировать и запустить этот код, это полная версия с использованием 🤗 Accelerate:",$e,bl,Ge,wl,cs="Добавление этого в скрипт <code>train.py</code> сделает процесс обучения универсальным для любой распределенной системы. Попробуйте запустить его на вашей распределенной системе:",ke,Ul,Xe,ul,rs="эта строка предложит вам ответить на несколько вопросов и сохранит ваши ответы в конфигурационный файл, который будет использоваться при вызове команды:",We,Tl,Re,hl,ms="запускающей распределенное обучение.",ge,fl,ys="Если вы хотите попробовать запустить этот код в Jupyter Notebook (например, протестировать его с TPU на Google Colab), просто вставьте код в <code>training_function()</code> и запустите последнюю ячейку:",_e,Cl,ve,Zl,os='Вы можете найти больше примеров в репозитории <a href="https://github.com/huggingface/accelerate/tree/main/examples" rel="nofollow">🤗 Accelerate repo</a>.',Ye,Il,Ve,Gl,Ae;return T=new kl({props:{title:"Полное обучение",local:"полное-обучение",headingTag:"h1"}}),h=new Gs({props:{chapter:3,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/ru/chapter3/section4.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/ru/chapter3/section4.ipynb"}]}}),f=new Us({props:{id:"Dh9CL8fyG80"}}),Z=new J({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTBBZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMkMlMjBEYXRhQ29sbGF0b3JXaXRoUGFkZGluZyUwQSUwQXJhd19kYXRhc2V0cyUyMCUzRCUyMGxvYWRfZGF0YXNldCglMjJnbHVlJTIyJTJDJTIwJTIybXJwYyUyMiklMEFjaGVja3BvaW50JTIwJTNEJTIwJTIyYmVydC1iYXNlLXVuY2FzZWQlMjIlMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZChjaGVja3BvaW50KSUwQSUwQSUwQWRlZiUyMHRva2VuaXplX2Z1bmN0aW9uKGV4YW1wbGUpJTNBJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwdG9rZW5pemVyKGV4YW1wbGUlNUIlMjJzZW50ZW5jZTElMjIlNUQlMkMlMjBleGFtcGxlJTVCJTIyc2VudGVuY2UyJTIyJTVEJTJDJTIwdHJ1bmNhdGlvbiUzRFRydWUpJTBBJTBBJTBBdG9rZW5pemVkX2RhdGFzZXRzJTIwJTNEJTIwcmF3X2RhdGFzZXRzLm1hcCh0b2tlbml6ZV9mdW5jdGlvbiUyQyUyMGJhdGNoZWQlM0RUcnVlKSUwQWRhdGFfY29sbGF0b3IlMjAlM0QlMjBEYXRhQ29sbGF0b3JXaXRoUGFkZGluZyh0b2tlbml6ZXIlM0R0b2tlbml6ZXIp",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, DataCollatorWithPadding
raw_datasets = load_dataset(<span class="hljs-string">&quot;glue&quot;</span>, <span class="hljs-string">&quot;mrpc&quot;</span>)
checkpoint = <span class="hljs-string">&quot;bert-base-uncased&quot;</span>
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
<span class="hljs-keyword">def</span> <span class="hljs-title function_">tokenize_function</span>(<span class="hljs-params">example</span>):
<span class="hljs-keyword">return</span> tokenizer(example[<span class="hljs-string">&quot;sentence1&quot;</span>], example[<span class="hljs-string">&quot;sentence2&quot;</span>], truncation=<span class="hljs-literal">True</span>)
tokenized_datasets = raw_datasets.<span class="hljs-built_in">map</span>(tokenize_function, batched=<span class="hljs-literal">True</span>)
data_collator = DataCollatorWithPadding(tokenizer=tokenizer)`,wrap:!1}}),I=new kl({props:{title:"Подготовка к обучению",local:"подготовка-к-обучению",headingTag:"h3"}}),k=new J({props:{code:"dG9rZW5pemVkX2RhdGFzZXRzJTIwJTNEJTIwdG9rZW5pemVkX2RhdGFzZXRzLnJlbW92ZV9jb2x1bW5zKCU1QiUyMnNlbnRlbmNlMSUyMiUyQyUyMCUyMnNlbnRlbmNlMiUyMiUyQyUyMCUyMmlkeCUyMiU1RCklMEF0b2tlbml6ZWRfZGF0YXNldHMlMjAlM0QlMjB0b2tlbml6ZWRfZGF0YXNldHMucmVuYW1lX2NvbHVtbiglMjJsYWJlbCUyMiUyQyUyMCUyMmxhYmVscyUyMiklMEF0b2tlbml6ZWRfZGF0YXNldHMuc2V0X2Zvcm1hdCglMjJ0b3JjaCUyMiklMEF0b2tlbml6ZWRfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RC5jb2x1bW5fbmFtZXM=",highlighted:`tokenized_datasets = tokenized_datasets.remove_columns([<span class="hljs-string">&quot;sentence1&quot;</span>, <span class="hljs-string">&quot;sentence2&quot;</span>, <span class="hljs-string">&quot;idx&quot;</span>])
tokenized_datasets = tokenized_datasets.rename_column(<span class="hljs-string">&quot;label&quot;</span>, <span class="hljs-string">&quot;labels&quot;</span>)
tokenized_datasets.set_format(<span class="hljs-string">&quot;torch&quot;</span>)
tokenized_datasets[<span class="hljs-string">&quot;train&quot;</span>].column_names`,wrap:!1}}),W=new J({props:{code:"JTVCJTIyYXR0ZW50aW9uX21hc2slMjIlMkMlMjAlMjJpbnB1dF9pZHMlMjIlMkMlMjAlMjJsYWJlbHMlMjIlMkMlMjAlMjJ0b2tlbl90eXBlX2lkcyUyMiU1RA==",highlighted:'[<span class="hljs-string">&quot;attention_mask&quot;</span>, <span class="hljs-string">&quot;input_ids&quot;</span>, <span class="hljs-string">&quot;labels&quot;</span>, <span class="hljs-string">&quot;token_type_ids&quot;</span>]',wrap:!1}}),g=new J({props:{code:"ZnJvbSUyMHRvcmNoLnV0aWxzLmRhdGElMjBpbXBvcnQlMjBEYXRhTG9hZGVyJTBBJTBBdHJhaW5fZGF0YWxvYWRlciUyMCUzRCUyMERhdGFMb2FkZXIoJTBBJTIwJTIwJTIwJTIwdG9rZW5pemVkX2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQlMkMlMjBzaHVmZmxlJTNEVHJ1ZSUyQyUyMGJhdGNoX3NpemUlM0Q4JTJDJTIwY29sbGF0ZV9mbiUzRGRhdGFfY29sbGF0b3IlMEEpJTBBZXZhbF9kYXRhbG9hZGVyJTIwJTNEJTIwRGF0YUxvYWRlciglMEElMjAlMjAlMjAlMjB0b2tlbml6ZWRfZGF0YXNldHMlNUIlMjJ2YWxpZGF0aW9uJTIyJTVEJTJDJTIwYmF0Y2hfc2l6ZSUzRDglMkMlMjBjb2xsYXRlX2ZuJTNEZGF0YV9jb2xsYXRvciUwQSk=",highlighted:`<span class="hljs-keyword">from</span> torch.utils.data <span class="hljs-keyword">import</span> DataLoader
train_dataloader = DataLoader(
tokenized_datasets[<span class="hljs-string">&quot;train&quot;</span>], shuffle=<span class="hljs-literal">True</span>, batch_size=<span class="hljs-number">8</span>, collate_fn=data_collator
)
eval_dataloader = DataLoader(
tokenized_datasets[<span class="hljs-string">&quot;validation&quot;</span>], batch_size=<span class="hljs-number">8</span>, collate_fn=data_collator
)`,wrap:!1}}),v=new J({props:{code:"Zm9yJTIwYmF0Y2glMjBpbiUyMHRyYWluX2RhdGFsb2FkZXIlM0ElMEElMjAlMjAlMjAlMjBicmVhayUwQSU3QmslM0ElMjB2LnNoYXBlJTIwZm9yJTIwayUyQyUyMHYlMjBpbiUyMGJhdGNoLml0ZW1zKCklN0Q=",highlighted:`<span class="hljs-keyword">for</span> batch <span class="hljs-keyword">in</span> train_dataloader:
<span class="hljs-keyword">break</span>
{k: v.shape <span class="hljs-keyword">for</span> k, v <span class="hljs-keyword">in</span> batch.items()}`,wrap:!1}}),Y=new J({props:{code:"JTdCJ2F0dGVudGlvbl9tYXNrJyUzQSUyMHRvcmNoLlNpemUoJTVCOCUyQyUyMDY1JTVEKSUyQyUwQSUyMCdpbnB1dF9pZHMnJTNBJTIwdG9yY2guU2l6ZSglNUI4JTJDJTIwNjUlNUQpJTJDJTBBJTIwJ2xhYmVscyclM0ElMjB0b3JjaC5TaXplKCU1QjglNUQpJTJDJTBBJTIwJ3Rva2VuX3R5cGVfaWRzJyUzQSUyMHRvcmNoLlNpemUoJTVCOCUyQyUyMDY1JTVEKSU3RA==",highlighted:`{<span class="hljs-string">&#x27;attention_mask&#x27;</span>: torch.Size([<span class="hljs-number">8</span>, <span class="hljs-number">65</span>]),
<span class="hljs-string">&#x27;input_ids&#x27;</span>: torch.Size([<span class="hljs-number">8</span>, <span class="hljs-number">65</span>]),
<span class="hljs-string">&#x27;labels&#x27;</span>: torch.Size([<span class="hljs-number">8</span>]),
<span class="hljs-string">&#x27;token_type_ids&#x27;</span>: torch.Size([<span class="hljs-number">8</span>, <span class="hljs-number">65</span>])}`,wrap:!1}}),N=new J({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24lMEElMEFtb2RlbCUyMCUzRCUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24uZnJvbV9wcmV0cmFpbmVkKGNoZWNrcG9pbnQlMkMlMjBudW1fbGFiZWxzJTNEMik=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModelForSequenceClassification
model = AutoModelForSequenceClassification.from_pretrained(checkpoint, num_labels=<span class="hljs-number">2</span>)`,wrap:!1}}),E=new J({props:{code:"b3V0cHV0cyUyMCUzRCUyMG1vZGVsKCoqYmF0Y2gpJTBBcHJpbnQob3V0cHV0cy5sb3NzJTJDJTIwb3V0cHV0cy5sb2dpdHMuc2hhcGUp",highlighted:`outputs = model(**batch)
<span class="hljs-built_in">print</span>(outputs.loss, outputs.logits.shape)`,wrap:!1}}),F=new J({props:{code:"dGVuc29yKDAuNTQ0MSUyQyUyMGdyYWRfZm4lM0QlM0NObGxMb3NzQmFja3dhcmQlM0UpJTIwdG9yY2guU2l6ZSglNUI4JTJDJTIwMiU1RCk=",highlighted:'tensor(<span class="hljs-number">0.5441</span>, grad_fn=&lt;NllLossBackward&gt;) torch.Size([<span class="hljs-number">8</span>, <span class="hljs-number">2</span>])',wrap:!1}}),x=new J({props:{code:"ZnJvbSUyMHRvcmNoLm9wdGltJTIwaW1wb3J0JTIwQWRhbVclMEElMEFvcHRpbWl6ZXIlMjAlM0QlMjBBZGFtVyhtb2RlbC5wYXJhbWV0ZXJzKCklMkMlMjBsciUzRDVlLTUp",highlighted:`<span class="hljs-keyword">from</span> torch.optim <span class="hljs-keyword">import</span> AdamW
optimizer = AdamW(model.parameters(), lr=<span class="hljs-number">5e-5</span>)`,wrap:!1}}),q=new J({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMGdldF9zY2hlZHVsZXIlMEElMEFudW1fZXBvY2hzJTIwJTNEJTIwMyUwQW51bV90cmFpbmluZ19zdGVwcyUyMCUzRCUyMG51bV9lcG9jaHMlMjAqJTIwbGVuKHRyYWluX2RhdGFsb2FkZXIpJTBBbHJfc2NoZWR1bGVyJTIwJTNEJTIwZ2V0X3NjaGVkdWxlciglMEElMjAlMjAlMjAlMjAlMjJsaW5lYXIlMjIlMkMlMEElMjAlMjAlMjAlMjBvcHRpbWl6ZXIlM0RvcHRpbWl6ZXIlMkMlMEElMjAlMjAlMjAlMjBudW1fd2FybXVwX3N0ZXBzJTNEMCUyQyUwQSUyMCUyMCUyMCUyMG51bV90cmFpbmluZ19zdGVwcyUzRG51bV90cmFpbmluZ19zdGVwcyUyQyUwQSklMEFwcmludChudW1fdHJhaW5pbmdfc3RlcHMp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> get_scheduler
num_epochs = <span class="hljs-number">3</span>
num_training_steps = num_epochs * <span class="hljs-built_in">len</span>(train_dataloader)
lr_scheduler = get_scheduler(
<span class="hljs-string">&quot;linear&quot;</span>,
optimizer=optimizer,
num_warmup_steps=<span class="hljs-number">0</span>,
num_training_steps=num_training_steps,
)
<span class="hljs-built_in">print</span>(num_training_steps)`,wrap:!1}}),K=new J({props:{code:"MTM3Nw==",highlighted:'<span class="hljs-number">1377</span>',wrap:!1}}),L=new kl({props:{title:"Обучающий цикл",local:"обучающий-цикл",headingTag:"h3"}}),P=new J({props:{code:"aW1wb3J0JTIwdG9yY2glMEElMEFkZXZpY2UlMjAlM0QlMjB0b3JjaC5kZXZpY2UoJTIyY3VkYSUyMiklMjBpZiUyMHRvcmNoLmN1ZGEuaXNfYXZhaWxhYmxlKCklMjBlbHNlJTIwdG9yY2guZGV2aWNlKCUyMmNwdSUyMiklMEFtb2RlbC50byhkZXZpY2UpJTBBZGV2aWNl",highlighted:`<span class="hljs-keyword">import</span> torch
device = torch.device(<span class="hljs-string">&quot;cuda&quot;</span>) <span class="hljs-keyword">if</span> torch.cuda.is_available() <span class="hljs-keyword">else</span> torch.device(<span class="hljs-string">&quot;cpu&quot;</span>)
model.to(device)
device`,wrap:!1}}),O=new J({props:{code:"ZGV2aWNlKHR5cGUlM0QnY3VkYScp",highlighted:'device(<span class="hljs-built_in">type</span>=<span class="hljs-string">&#x27;cuda&#x27;</span>)',wrap:!1}}),el=new J({props:{code:"ZnJvbSUyMHRxZG0uYXV0byUyMGltcG9ydCUyMHRxZG0lMEElMEFwcm9ncmVzc19iYXIlMjAlM0QlMjB0cWRtKHJhbmdlKG51bV90cmFpbmluZ19zdGVwcykpJTBBJTBBbW9kZWwudHJhaW4oKSUwQWZvciUyMGVwb2NoJTIwaW4lMjByYW5nZShudW1fZXBvY2hzKSUzQSUwQSUyMCUyMCUyMCUyMGZvciUyMGJhdGNoJTIwaW4lMjB0cmFpbl9kYXRhbG9hZGVyJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYmF0Y2glMjAlM0QlMjAlN0JrJTNBJTIwdi50byhkZXZpY2UpJTIwZm9yJTIwayUyQyUyMHYlMjBpbiUyMGJhdGNoLml0ZW1zKCklN0QlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvdXRwdXRzJTIwJTNEJTIwbW9kZWwoKipiYXRjaCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsb3NzJTIwJTNEJTIwb3V0cHV0cy5sb3NzJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbG9zcy5iYWNrd2FyZCgpJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwb3B0aW1pemVyLnN0ZXAoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxyX3NjaGVkdWxlci5zdGVwKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvcHRpbWl6ZXIuemVyb19ncmFkKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcm9ncmVzc19iYXIudXBkYXRlKDEp",highlighted:`<span class="hljs-keyword">from</span> tqdm.auto <span class="hljs-keyword">import</span> tqdm
progress_bar = tqdm(<span class="hljs-built_in">range</span>(num_training_steps))
model.train()
<span class="hljs-keyword">for</span> epoch <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(num_epochs):
<span class="hljs-keyword">for</span> batch <span class="hljs-keyword">in</span> train_dataloader:
batch = {k: v.to(device) <span class="hljs-keyword">for</span> k, v <span class="hljs-keyword">in</span> batch.items()}
outputs = model(**batch)
loss = outputs.loss
loss.backward()
optimizer.step()
lr_scheduler.step()
optimizer.zero_grad()
progress_bar.update(<span class="hljs-number">1</span>)`,wrap:!1}}),tl=new kl({props:{title:"Валидационный цикл",local:"валидационный-цикл",headingTag:"h3"}}),nl=new J({props:{code:"aW1wb3J0JTIwZXZhbHVhdGUlMEElMEFtZXRyaWMlMjAlM0QlMjBldmFsdWF0ZS5sb2FkKCUyMmdsdWUlMjIlMkMlMjAlMjJtcnBjJTIyKSUwQW1vZGVsLmV2YWwoKSUwQWZvciUyMGJhdGNoJTIwaW4lMjBldmFsX2RhdGFsb2FkZXIlM0ElMEElMjAlMjAlMjAlMjBiYXRjaCUyMCUzRCUyMCU3QmslM0ElMjB2LnRvKGRldmljZSklMjBmb3IlMjBrJTJDJTIwdiUyMGluJTIwYmF0Y2guaXRlbXMoKSU3RCUwQSUyMCUyMCUyMCUyMHdpdGglMjB0b3JjaC5ub19ncmFkKCklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvdXRwdXRzJTIwJTNEJTIwbW9kZWwoKipiYXRjaCklMEElMEElMjAlMjAlMjAlMjBsb2dpdHMlMjAlM0QlMjBvdXRwdXRzLmxvZ2l0cyUwQSUyMCUyMCUyMCUyMHByZWRpY3Rpb25zJTIwJTNEJTIwdG9yY2guYXJnbWF4KGxvZ2l0cyUyQyUyMGRpbSUzRC0xKSUwQSUyMCUyMCUyMCUyMG1ldHJpYy5hZGRfYmF0Y2gocHJlZGljdGlvbnMlM0RwcmVkaWN0aW9ucyUyQyUyMHJlZmVyZW5jZXMlM0RiYXRjaCU1QiUyMmxhYmVscyUyMiU1RCklMEElMEFtZXRyaWMuY29tcHV0ZSgp",highlighted:`<span class="hljs-keyword">import</span> evaluate
metric = evaluate.load(<span class="hljs-string">&quot;glue&quot;</span>, <span class="hljs-string">&quot;mrpc&quot;</span>)
model.<span class="hljs-built_in">eval</span>()
<span class="hljs-keyword">for</span> batch <span class="hljs-keyword">in</span> eval_dataloader:
batch = {k: v.to(device) <span class="hljs-keyword">for</span> k, v <span class="hljs-keyword">in</span> batch.items()}
<span class="hljs-keyword">with</span> torch.no_grad():
outputs = model(**batch)
logits = outputs.logits
predictions = torch.argmax(logits, dim=-<span class="hljs-number">1</span>)
metric.add_batch(predictions=predictions, references=batch[<span class="hljs-string">&quot;labels&quot;</span>])
metric.compute()`,wrap:!1}}),pl=new J({props:{code:"JTdCJ2FjY3VyYWN5JyUzQSUyMDAuODQzMTM3MjU0OTAxOTYwOCUyQyUyMCdmMSclM0ElMjAwLjg5MDc4NDk4MjkzNTE1MzUlN0Q=",highlighted:'{<span class="hljs-string">&#x27;accuracy&#x27;</span>: <span class="hljs-number">0.8431372549019608</span>, <span class="hljs-string">&#x27;f1&#x27;</span>: <span class="hljs-number">0.8907849829351535</span>}',wrap:!1}}),U=new ws({props:{$$slots:{default:[Xs]},$$scope:{ctx:Bl}}}),il=new kl({props:{title:"Ускорение обучающего цикла с помощью 🤗 Accelerate",local:"ускорение-обучающего-цикла-с-помощью--accelerate",headingTag:"h3"}}),cl=new Us({props:{id:"s7dy8QRgjJ0"}}),ml=new J({props:{code:"ZnJvbSUyMHRvcmNoLm9wdGltJTIwaW1wb3J0JTIwQWRhbVclMEFmcm9tJTIwdHJhbnNmb3JtZXJzJTIwaW1wb3J0JTIwQXV0b01vZGVsRm9yU2VxdWVuY2VDbGFzc2lmaWNhdGlvbiUyQyUyMGdldF9zY2hlZHVsZXIlMEElMEFtb2RlbCUyMCUzRCUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24uZnJvbV9wcmV0cmFpbmVkKGNoZWNrcG9pbnQlMkMlMjBudW1fbGFiZWxzJTNEMiklMEFvcHRpbWl6ZXIlMjAlM0QlMjBBZGFtVyhtb2RlbC5wYXJhbWV0ZXJzKCklMkMlMjBsciUzRDNlLTUpJTBBJTBBZGV2aWNlJTIwJTNEJTIwdG9yY2guZGV2aWNlKCUyMmN1ZGElMjIpJTIwaWYlMjB0b3JjaC5jdWRhLmlzX2F2YWlsYWJsZSgpJTIwZWxzZSUyMHRvcmNoLmRldmljZSglMjJjcHUlMjIpJTBBbW9kZWwudG8oZGV2aWNlKSUwQSUwQW51bV9lcG9jaHMlMjAlM0QlMjAzJTBBbnVtX3RyYWluaW5nX3N0ZXBzJTIwJTNEJTIwbnVtX2Vwb2NocyUyMColMjBsZW4odHJhaW5fZGF0YWxvYWRlciklMEFscl9zY2hlZHVsZXIlMjAlM0QlMjBnZXRfc2NoZWR1bGVyKCUwQSUyMCUyMCUyMCUyMCUyMmxpbmVhciUyMiUyQyUwQSUyMCUyMCUyMCUyMG9wdGltaXplciUzRG9wdGltaXplciUyQyUwQSUyMCUyMCUyMCUyMG51bV93YXJtdXBfc3RlcHMlM0QwJTJDJTBBJTIwJTIwJTIwJTIwbnVtX3RyYWluaW5nX3N0ZXBzJTNEbnVtX3RyYWluaW5nX3N0ZXBzJTJDJTBBKSUwQSUwQXByb2dyZXNzX2JhciUyMCUzRCUyMHRxZG0ocmFuZ2UobnVtX3RyYWluaW5nX3N0ZXBzKSklMEElMEFtb2RlbC50cmFpbigpJTBBZm9yJTIwZXBvY2glMjBpbiUyMHJhbmdlKG51bV9lcG9jaHMpJTNBJTBBJTIwJTIwJTIwJTIwZm9yJTIwYmF0Y2glMjBpbiUyMHRyYWluX2RhdGFsb2FkZXIlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBiYXRjaCUyMCUzRCUyMCU3QmslM0ElMjB2LnRvKGRldmljZSklMjBmb3IlMjBrJTJDJTIwdiUyMGluJTIwYmF0Y2guaXRlbXMoKSU3RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG91dHB1dHMlMjAlM0QlMjBtb2RlbCgqKmJhdGNoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxvc3MlMjAlM0QlMjBvdXRwdXRzLmxvc3MlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsb3NzLmJhY2t3YXJkKCklMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvcHRpbWl6ZXIuc3RlcCgpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbHJfc2NoZWR1bGVyLnN0ZXAoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG9wdGltaXplci56ZXJvX2dyYWQoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByb2dyZXNzX2Jhci51cGRhdGUoMSk=",highlighted:`<span class="hljs-keyword">from</span> torch.optim <span class="hljs-keyword">import</span> AdamW
<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModelForSequenceClassification, get_scheduler
model = AutoModelForSequenceClassification.from_pretrained(checkpoint, num_labels=<span class="hljs-number">2</span>)
optimizer = AdamW(model.parameters(), lr=<span class="hljs-number">3e-5</span>)
device = torch.device(<span class="hljs-string">&quot;cuda&quot;</span>) <span class="hljs-keyword">if</span> torch.cuda.is_available() <span class="hljs-keyword">else</span> torch.device(<span class="hljs-string">&quot;cpu&quot;</span>)
model.to(device)
num_epochs = <span class="hljs-number">3</span>
num_training_steps = num_epochs * <span class="hljs-built_in">len</span>(train_dataloader)
lr_scheduler = get_scheduler(
<span class="hljs-string">&quot;linear&quot;</span>,
optimizer=optimizer,
num_warmup_steps=<span class="hljs-number">0</span>,
num_training_steps=num_training_steps,
)
progress_bar = tqdm(<span class="hljs-built_in">range</span>(num_training_steps))
model.train()
<span class="hljs-keyword">for</span> epoch <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(num_epochs):
<span class="hljs-keyword">for</span> batch <span class="hljs-keyword">in</span> train_dataloader:
batch = {k: v.to(device) <span class="hljs-keyword">for</span> k, v <span class="hljs-keyword">in</span> batch.items()}
outputs = model(**batch)
loss = outputs.loss
loss.backward()
optimizer.step()
lr_scheduler.step()
optimizer.zero_grad()
progress_bar.update(<span class="hljs-number">1</span>)`,wrap:!1}}),ol=new J({props:{code:"JTJCJTIwZnJvbSUyMGFjY2VsZXJhdGUlMjBpbXBvcnQlMjBBY2NlbGVyYXRvciUwQSUyMCUyMGZyb20lMjB0b3JjaC5vcHRpbSUyMGltcG9ydCUyMEFkYW1XJTBBJTIwJTIwZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24lMkMlMjBnZXRfc2NoZWR1bGVyJTBBJTBBJTJCJTIwYWNjZWxlcmF0b3IlMjAlM0QlMjBBY2NlbGVyYXRvcigpJTBBJTBBJTIwJTIwbW9kZWwlMjAlM0QlMjBBdXRvTW9kZWxGb3JTZXF1ZW5jZUNsYXNzaWZpY2F0aW9uLmZyb21fcHJldHJhaW5lZChjaGVja3BvaW50JTJDJTIwbnVtX2xhYmVscyUzRDIpJTBBJTIwJTIwb3B0aW1pemVyJTIwJTNEJTIwQWRhbVcobW9kZWwucGFyYW1ldGVycygpJTJDJTIwbHIlM0QzZS01KSUwQSUwQS0lMjBkZXZpY2UlMjAlM0QlMjB0b3JjaC5kZXZpY2UoJTIyY3VkYSUyMiklMjBpZiUyMHRvcmNoLmN1ZGEuaXNfYXZhaWxhYmxlKCklMjBlbHNlJTIwdG9yY2guZGV2aWNlKCUyMmNwdSUyMiklMEEtJTIwbW9kZWwudG8oZGV2aWNlKSUwQSUwQSUyQiUyMHRyYWluX2RhdGFsb2FkZXIlMkMlMjBldmFsX2RhdGFsb2FkZXIlMkMlMjBtb2RlbCUyQyUyMG9wdGltaXplciUyMCUzRCUyMGFjY2VsZXJhdG9yLnByZXBhcmUoJTBBJTJCJTIwJTIwJTIwJTIwJTIwdHJhaW5fZGF0YWxvYWRlciUyQyUyMGV2YWxfZGF0YWxvYWRlciUyQyUyMG1vZGVsJTJDJTIwb3B0aW1pemVyJTBBJTJCJTIwKSUwQSUwQSUyMCUyMG51bV9lcG9jaHMlMjAlM0QlMjAzJTBBJTIwJTIwbnVtX3RyYWluaW5nX3N0ZXBzJTIwJTNEJTIwbnVtX2Vwb2NocyUyMColMjBsZW4odHJhaW5fZGF0YWxvYWRlciklMEElMjAlMjBscl9zY2hlZHVsZXIlMjAlM0QlMjBnZXRfc2NoZWR1bGVyKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMmxpbmVhciUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMG9wdGltaXplciUzRG9wdGltaXplciUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMG51bV93YXJtdXBfc3RlcHMlM0QwJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwbnVtX3RyYWluaW5nX3N0ZXBzJTNEbnVtX3RyYWluaW5nX3N0ZXBzJTBBJTIwJTIwKSUwQSUwQSUyMCUyMHByb2dyZXNzX2JhciUyMCUzRCUyMHRxZG0ocmFuZ2UobnVtX3RyYWluaW5nX3N0ZXBzKSklMEElMEElMjAlMjBtb2RlbC50cmFpbigpJTBBJTIwJTIwZm9yJTIwZXBvY2glMjBpbiUyMHJhbmdlKG51bV9lcG9jaHMpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwZm9yJTIwYmF0Y2glMjBpbiUyMHRyYWluX2RhdGFsb2FkZXIlM0ElMEEtJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYmF0Y2glMjAlM0QlMjAlN0JrJTNBJTIwdi50byhkZXZpY2UpJTIwZm9yJTIwayUyQyUyMHYlMjBpbiUyMGJhdGNoLml0ZW1zKCklN0QlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvdXRwdXRzJTIwJTNEJTIwbW9kZWwoKipiYXRjaCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsb3NzJTIwJTNEJTIwb3V0cHV0cy5sb3NzJTBBLSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxvc3MuYmFja3dhcmQoKSUwQSUyQiUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGFjY2VsZXJhdG9yLmJhY2t3YXJkKGxvc3MpJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwb3B0aW1pemVyLnN0ZXAoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxyX3NjaGVkdWxlci5zdGVwKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvcHRpbWl6ZXIuemVyb19ncmFkKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcm9ncmVzc19iYXIudXBkYXRlKDEp",highlighted:`<span class="hljs-addition">+ from accelerate import Accelerator</span>
from torch.optim import AdamW
from transformers import AutoModelForSequenceClassification, get_scheduler
<span class="hljs-addition">+ accelerator = Accelerator()</span>
model = AutoModelForSequenceClassification.from_pretrained(checkpoint, num_labels=2)
optimizer = AdamW(model.parameters(), lr=3e-5)
<span class="hljs-deletion">- device = torch.device(&quot;cuda&quot;) if torch.cuda.is_available() else torch.device(&quot;cpu&quot;)</span>
<span class="hljs-deletion">- model.to(device)</span>
<span class="hljs-addition">+ train_dataloader, eval_dataloader, model, optimizer = accelerator.prepare(</span>
<span class="hljs-addition">+ train_dataloader, eval_dataloader, model, optimizer</span>
<span class="hljs-addition">+ )</span>
num_epochs = 3
num_training_steps = num_epochs * len(train_dataloader)
lr_scheduler = get_scheduler(
&quot;linear&quot;,
optimizer=optimizer,
num_warmup_steps=0,
num_training_steps=num_training_steps
)
progress_bar = tqdm(range(num_training_steps))
model.train()
for epoch in range(num_epochs):
for batch in train_dataloader:
<span class="hljs-deletion">- batch = {k: v.to(device) for k, v in batch.items()}</span>
outputs = model(**batch)
loss = outputs.loss
<span class="hljs-deletion">- loss.backward()</span>
<span class="hljs-addition">+ accelerator.backward(loss)</span>
optimizer.step()
lr_scheduler.step()
optimizer.zero_grad()
progress_bar.update(1)`,wrap:!1}}),u=new ws({props:{$$slots:{default:[Ws]},$$scope:{ctx:Bl}}}),bl=new J({props:{code:"ZnJvbSUyMGFjY2VsZXJhdGUlMjBpbXBvcnQlMjBBY2NlbGVyYXRvciUwQWZyb20lMjB0b3JjaC5vcHRpbSUyMGltcG9ydCUyMEFkYW1XJTBBZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24lMkMlMjBnZXRfc2NoZWR1bGVyJTBBJTBBYWNjZWxlcmF0b3IlMjAlM0QlMjBBY2NlbGVyYXRvcigpJTBBJTBBbW9kZWwlMjAlM0QlMjBBdXRvTW9kZWxGb3JTZXF1ZW5jZUNsYXNzaWZpY2F0aW9uLmZyb21fcHJldHJhaW5lZChjaGVja3BvaW50JTJDJTIwbnVtX2xhYmVscyUzRDIpJTBBb3B0aW1pemVyJTIwJTNEJTIwQWRhbVcobW9kZWwucGFyYW1ldGVycygpJTJDJTIwbHIlM0QzZS01KSUwQSUwQXRyYWluX2RsJTJDJTIwZXZhbF9kbCUyQyUyMG1vZGVsJTJDJTIwb3B0aW1pemVyJTIwJTNEJTIwYWNjZWxlcmF0b3IucHJlcGFyZSglMEElMjAlMjAlMjAlMjB0cmFpbl9kYXRhbG9hZGVyJTJDJTIwZXZhbF9kYXRhbG9hZGVyJTJDJTIwbW9kZWwlMkMlMjBvcHRpbWl6ZXIlMEEpJTBBJTBBbnVtX2Vwb2NocyUyMCUzRCUyMDMlMEFudW1fdHJhaW5pbmdfc3RlcHMlMjAlM0QlMjBudW1fZXBvY2hzJTIwKiUyMGxlbih0cmFpbl9kbCklMEFscl9zY2hlZHVsZXIlMjAlM0QlMjBnZXRfc2NoZWR1bGVyKCUwQSUyMCUyMCUyMCUyMCUyMmxpbmVhciUyMiUyQyUwQSUyMCUyMCUyMCUyMG9wdGltaXplciUzRG9wdGltaXplciUyQyUwQSUyMCUyMCUyMCUyMG51bV93YXJtdXBfc3RlcHMlM0QwJTJDJTBBJTIwJTIwJTIwJTIwbnVtX3RyYWluaW5nX3N0ZXBzJTNEbnVtX3RyYWluaW5nX3N0ZXBzJTJDJTBBKSUwQSUwQXByb2dyZXNzX2JhciUyMCUzRCUyMHRxZG0ocmFuZ2UobnVtX3RyYWluaW5nX3N0ZXBzKSklMEElMEFtb2RlbC50cmFpbigpJTBBZm9yJTIwZXBvY2glMjBpbiUyMHJhbmdlKG51bV9lcG9jaHMpJTNBJTBBJTIwJTIwJTIwJTIwZm9yJTIwYmF0Y2glMjBpbiUyMHRyYWluX2RsJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwb3V0cHV0cyUyMCUzRCUyMG1vZGVsKCoqYmF0Y2gpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbG9zcyUyMCUzRCUyMG91dHB1dHMubG9zcyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGFjY2VsZXJhdG9yLmJhY2t3YXJkKGxvc3MpJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwb3B0aW1pemVyLnN0ZXAoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxyX3NjaGVkdWxlci5zdGVwKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvcHRpbWl6ZXIuemVyb19ncmFkKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcm9ncmVzc19iYXIudXBkYXRlKDEp",highlighted:`<span class="hljs-keyword">from</span> accelerate <span class="hljs-keyword">import</span> Accelerator
<span class="hljs-keyword">from</span> torch.optim <span class="hljs-keyword">import</span> AdamW
<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModelForSequenceClassification, get_scheduler
accelerator = Accelerator()
model = AutoModelForSequenceClassification.from_pretrained(checkpoint, num_labels=<span class="hljs-number">2</span>)
optimizer = AdamW(model.parameters(), lr=<span class="hljs-number">3e-5</span>)
train_dl, eval_dl, model, optimizer = accelerator.prepare(
train_dataloader, eval_dataloader, model, optimizer
)
num_epochs = <span class="hljs-number">3</span>
num_training_steps = num_epochs * <span class="hljs-built_in">len</span>(train_dl)
lr_scheduler = get_scheduler(
<span class="hljs-string">&quot;linear&quot;</span>,
optimizer=optimizer,
num_warmup_steps=<span class="hljs-number">0</span>,
num_training_steps=num_training_steps,
)
progress_bar = tqdm(<span class="hljs-built_in">range</span>(num_training_steps))
model.train()
<span class="hljs-keyword">for</span> epoch <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(num_epochs):
<span class="hljs-keyword">for</span> batch <span class="hljs-keyword">in</span> train_dl:
outputs = model(**batch)
loss = outputs.loss
accelerator.backward(loss)
optimizer.step()
lr_scheduler.step()
optimizer.zero_grad()
progress_bar.update(<span class="hljs-number">1</span>)`,wrap:!1}}),Ul=new J({props:{code:"YWNjZWxlcmF0ZSUyMGNvbmZpZw==",highlighted:"accelerate config",wrap:!1}}),Tl=new J({props:{code:"YWNjZWxlcmF0ZSUyMGxhdW5jaCUyMHRyYWluLnB5",highlighted:'accelerate <span class="hljs-built_in">launch</span> train.py',wrap:!1}}),Cl=new J({props:{code:"ZnJvbSUyMGFjY2VsZXJhdGUlMjBpbXBvcnQlMjBub3RlYm9va19sYXVuY2hlciUwQSUwQW5vdGVib29rX2xhdW5jaGVyKHRyYWluaW5nX2Z1bmN0aW9uKQ==",highlighted:`<span class="hljs-keyword">from</span> accelerate <span class="hljs-keyword">import</span> notebook_launcher
notebook_launcher(training_function)`,wrap:!1}}),Il=new ks({props:{source:"https://github.com/huggingface/course/blob/main/chapters/ru/chapter3/4.mdx"}}),{c(){j=y("meta"),b=a(),w=y("p"),$l=a(),p(T.$$.fragment),Xl=a(),p(h.$$.fragment),Wl=a(),p(f.$$.fragment),Rl=a(),C=y("p"),C.innerHTML=Ne,gl=a(),p(Z.$$.fragment),_l=a(),p(I.$$.fragment),vl=a(),B=y("p"),B.innerHTML=ze,Yl=a(),$=y("ul"),$.innerHTML=Ee,Vl=a(),G=y("p"),G.innerHTML=Fe,Al=a(),p(k.$$.fragment),Nl=a(),X=y("p"),X.textContent=Qe,zl=a(),p(W.$$.fragment),El=a(),R=y("p"),R.textContent=He,Fl=a(),p(g.$$.fragment),Ql=a(),_=y("p"),_.textContent=xe,Hl=a(),p(v.$$.fragment),xl=a(),p(Y.$$.fragment),Sl=a(),V=y("p"),V.innerHTML=Se,ql=a(),A=y("p"),A.textContent=qe,Kl=a(),p(N.$$.fragment),Ll=a(),z=y("p"),z.textContent=Ke,Dl=a(),p(E.$$.fragment),Pl=a(),p(F.$$.fragment),Ol=a(),Q=y("p"),Q.innerHTML=Le,le=a(),H=y("p"),H.innerHTML=De,ee=a(),p(x.$$.fragment),se=a(),S=y("p"),S.innerHTML=Pe,te=a(),p(q.$$.fragment),ae=a(),p(K.$$.fragment),ne=a(),p(L.$$.fragment),pe=a(),D=y("p"),D.innerHTML=Oe,Me=a(),p(P.$$.fragment),ie=a(),p(O.$$.fragment),ce=a(),ll=y("p"),ll.textContent=ls,re=a(),p(el.$$.fragment),me=a(),sl=y("p"),sl.textContent=es,ye=a(),p(tl.$$.fragment),oe=a(),al=y("p"),al.innerHTML=ss,de=a(),p(nl.$$.fragment),Je=a(),p(pl.$$.fragment),je=a(),Ml=y("p"),Ml.textContent=ts,be=a(),p(U.$$.fragment),we=a(),p(il.$$.fragment),Ue=a(),p(cl.$$.fragment),ue=a(),rl=y("p"),rl.innerHTML=as,Te=a(),p(ml.$$.fragment),he=a(),yl=y("p"),yl.textContent=ns,fe=a(),p(ol.$$.fragment),Ce=a(),dl=y("p"),dl.innerHTML=ps,Ze=a(),Jl=y("p"),Jl.innerHTML=Ms,Ie=a(),p(u.$$.fragment),Be=a(),jl=y("p"),jl.textContent=is,$e=a(),p(bl.$$.fragment),Ge=a(),wl=y("p"),wl.innerHTML=cs,ke=a(),p(Ul.$$.fragment),Xe=a(),ul=y("p"),ul.textContent=rs,We=a(),p(Tl.$$.fragment),Re=a(),hl=y("p"),hl.textContent=ms,ge=a(),fl=y("p"),fl.innerHTML=ys,_e=a(),p(Cl.$$.fragment),ve=a(),Zl=y("p"),Zl.innerHTML=os,Ye=a(),p(Il.$$.fragment),Ve=a(),Gl=y("p"),this.h()},l(l){const e=Zs("svelte-u9bgzb",document.head);j=o(e,"META",{name:!0,content:!0}),e.forEach(s),b=n(l),w=o(l,"P",{}),js(w).forEach(s),$l=n(l),M(T.$$.fragment,l),Xl=n(l),M(h.$$.fragment,l),Wl=n(l),M(f.$$.fragment,l),Rl=n(l),C=o(l,"P",{"data-svelte-h":!0}),d(C)!=="svelte-1gqkgs3"&&(C.innerHTML=Ne),gl=n(l),M(Z.$$.fragment,l),_l=n(l),M(I.$$.fragment,l),vl=n(l),B=o(l,"P",{"data-svelte-h":!0}),d(B)!=="svelte-1lnwdm2"&&(B.innerHTML=ze),Yl=n(l),$=o(l,"UL",{"data-svelte-h":!0}),d($)!=="svelte-14inct8"&&($.innerHTML=Ee),Vl=n(l),G=o(l,"P",{"data-svelte-h":!0}),d(G)!=="svelte-y39maw"&&(G.innerHTML=Fe),Al=n(l),M(k.$$.fragment,l),Nl=n(l),X=o(l,"P",{"data-svelte-h":!0}),d(X)!=="svelte-hls58n"&&(X.textContent=Qe),zl=n(l),M(W.$$.fragment,l),El=n(l),R=o(l,"P",{"data-svelte-h":!0}),d(R)!=="svelte-uu69p5"&&(R.textContent=He),Fl=n(l),M(g.$$.fragment,l),Ql=n(l),_=o(l,"P",{"data-svelte-h":!0}),d(_)!=="svelte-n94e97"&&(_.textContent=xe),Hl=n(l),M(v.$$.fragment,l),xl=n(l),M(Y.$$.fragment,l),Sl=n(l),V=o(l,"P",{"data-svelte-h":!0}),d(V)!=="svelte-150flrw"&&(V.innerHTML=Se),ql=n(l),A=o(l,"P",{"data-svelte-h":!0}),d(A)!=="svelte-ifw55c"&&(A.textContent=qe),Kl=n(l),M(N.$$.fragment,l),Ll=n(l),z=o(l,"P",{"data-svelte-h":!0}),d(z)!=="svelte-qqb2jh"&&(z.textContent=Ke),Dl=n(l),M(E.$$.fragment,l),Pl=n(l),M(F.$$.fragment,l),Ol=n(l),Q=o(l,"P",{"data-svelte-h":!0}),d(Q)!=="svelte-t1wazz"&&(Q.innerHTML=Le),le=n(l),H=o(l,"P",{"data-svelte-h":!0}),d(H)!=="svelte-1e2owli"&&(H.innerHTML=De),ee=n(l),M(x.$$.fragment,l),se=n(l),S=o(l,"P",{"data-svelte-h":!0}),d(S)!=="svelte-ld980v"&&(S.innerHTML=Pe),te=n(l),M(q.$$.fragment,l),ae=n(l),M(K.$$.fragment,l),ne=n(l),M(L.$$.fragment,l),pe=n(l),D=o(l,"P",{"data-svelte-h":!0}),d(D)!=="svelte-ix7lr0"&&(D.innerHTML=Oe),Me=n(l),M(P.$$.fragment,l),ie=n(l),M(O.$$.fragment,l),ce=n(l),ll=o(l,"P",{"data-svelte-h":!0}),d(ll)!=="svelte-1tuyhjz"&&(ll.textContent=ls),re=n(l),M(el.$$.fragment,l),me=n(l),sl=o(l,"P",{"data-svelte-h":!0}),d(sl)!=="svelte-1qxv8sc"&&(sl.textContent=es),ye=n(l),M(tl.$$.fragment,l),oe=n(l),al=o(l,"P",{"data-svelte-h":!0}),d(al)!=="svelte-d4v9zb"&&(al.innerHTML=ss),de=n(l),M(nl.$$.fragment,l),Je=n(l),M(pl.$$.fragment,l),je=n(l),Ml=o(l,"P",{"data-svelte-h":!0}),d(Ml)!=="svelte-1qo2vh4"&&(Ml.textContent=ts),be=n(l),M(U.$$.fragment,l),we=n(l),M(il.$$.fragment,l),Ue=n(l),M(cl.$$.fragment,l),ue=n(l),rl=o(l,"P",{"data-svelte-h":!0}),d(rl)!=="svelte-1j8jc63"&&(rl.innerHTML=as),Te=n(l),M(ml.$$.fragment,l),he=n(l),yl=o(l,"P",{"data-svelte-h":!0}),d(yl)!=="svelte-1y3rvvh"&&(yl.textContent=ns),fe=n(l),M(ol.$$.fragment,l),Ce=n(l),dl=o(l,"P",{"data-svelte-h":!0}),d(dl)!=="svelte-1k0j8ce"&&(dl.innerHTML=ps),Ze=n(l),Jl=o(l,"P",{"data-svelte-h":!0}),d(Jl)!=="svelte-zyjzzn"&&(Jl.innerHTML=Ms),Ie=n(l),M(u.$$.fragment,l),Be=n(l),jl=o(l,"P",{"data-svelte-h":!0}),d(jl)!=="svelte-1kvq74c"&&(jl.textContent=is),$e=n(l),M(bl.$$.fragment,l),Ge=n(l),wl=o(l,"P",{"data-svelte-h":!0}),d(wl)!=="svelte-1gamoio"&&(wl.innerHTML=cs),ke=n(l),M(Ul.$$.fragment,l),Xe=n(l),ul=o(l,"P",{"data-svelte-h":!0}),d(ul)!=="svelte-180xe86"&&(ul.textContent=rs),We=n(l),M(Tl.$$.fragment,l),Re=n(l),hl=o(l,"P",{"data-svelte-h":!0}),d(hl)!=="svelte-1hjs7v4"&&(hl.textContent=ms),ge=n(l),fl=o(l,"P",{"data-svelte-h":!0}),d(fl)!=="svelte-167w75a"&&(fl.innerHTML=ys),_e=n(l),M(Cl.$$.fragment,l),ve=n(l),Zl=o(l,"P",{"data-svelte-h":!0}),d(Zl)!=="svelte-1wlody3"&&(Zl.innerHTML=os),Ye=n(l),M(Il.$$.fragment,l),Ve=n(l),Gl=o(l,"P",{}),js(Gl).forEach(s),this.h()},h(){bs(j,"name","hf:doc:metadata"),bs(j,"content",gs)},m(l,e){Is(document.head,j),t(l,b,e),t(l,w,e),t(l,$l,e),i(T,l,e),t(l,Xl,e),i(h,l,e),t(l,Wl,e),i(f,l,e),t(l,Rl,e),t(l,C,e),t(l,gl,e),i(Z,l,e),t(l,_l,e),i(I,l,e),t(l,vl,e),t(l,B,e),t(l,Yl,e),t(l,$,e),t(l,Vl,e),t(l,G,e),t(l,Al,e),i(k,l,e),t(l,Nl,e),t(l,X,e),t(l,zl,e),i(W,l,e),t(l,El,e),t(l,R,e),t(l,Fl,e),i(g,l,e),t(l,Ql,e),t(l,_,e),t(l,Hl,e),i(v,l,e),t(l,xl,e),i(Y,l,e),t(l,Sl,e),t(l,V,e),t(l,ql,e),t(l,A,e),t(l,Kl,e),i(N,l,e),t(l,Ll,e),t(l,z,e),t(l,Dl,e),i(E,l,e),t(l,Pl,e),i(F,l,e),t(l,Ol,e),t(l,Q,e),t(l,le,e),t(l,H,e),t(l,ee,e),i(x,l,e),t(l,se,e),t(l,S,e),t(l,te,e),i(q,l,e),t(l,ae,e),i(K,l,e),t(l,ne,e),i(L,l,e),t(l,pe,e),t(l,D,e),t(l,Me,e),i(P,l,e),t(l,ie,e),i(O,l,e),t(l,ce,e),t(l,ll,e),t(l,re,e),i(el,l,e),t(l,me,e),t(l,sl,e),t(l,ye,e),i(tl,l,e),t(l,oe,e),t(l,al,e),t(l,de,e),i(nl,l,e),t(l,Je,e),i(pl,l,e),t(l,je,e),t(l,Ml,e),t(l,be,e),i(U,l,e),t(l,we,e),i(il,l,e),t(l,Ue,e),i(cl,l,e),t(l,ue,e),t(l,rl,e),t(l,Te,e),i(ml,l,e),t(l,he,e),t(l,yl,e),t(l,fe,e),i(ol,l,e),t(l,Ce,e),t(l,dl,e),t(l,Ze,e),t(l,Jl,e),t(l,Ie,e),i(u,l,e),t(l,Be,e),t(l,jl,e),t(l,$e,e),i(bl,l,e),t(l,Ge,e),t(l,wl,e),t(l,ke,e),i(Ul,l,e),t(l,Xe,e),t(l,ul,e),t(l,We,e),i(Tl,l,e),t(l,Re,e),t(l,hl,e),t(l,ge,e),t(l,fl,e),t(l,_e,e),i(Cl,l,e),t(l,ve,e),t(l,Zl,e),t(l,Ye,e),i(Il,l,e),t(l,Ve,e),t(l,Gl,e),Ae=!0},p(l,[e]){const ds={};e&2&&(ds.$$scope={dirty:e,ctx:l}),U.$set(ds);const Js={};e&2&&(Js.$$scope={dirty:e,ctx:l}),u.$set(Js)},i(l){Ae||(c(T.$$.fragment,l),c(h.$$.fragment,l),c(f.$$.fragment,l),c(Z.$$.fragment,l),c(I.$$.fragment,l),c(k.$$.fragment,l),c(W.$$.fragment,l),c(g.$$.fragment,l),c(v.$$.fragment,l),c(Y.$$.fragment,l),c(N.$$.fragment,l),c(E.$$.fragment,l),c(F.$$.fragment,l),c(x.$$.fragment,l),c(q.$$.fragment,l),c(K.$$.fragment,l),c(L.$$.fragment,l),c(P.$$.fragment,l),c(O.$$.fragment,l),c(el.$$.fragment,l),c(tl.$$.fragment,l),c(nl.$$.fragment,l),c(pl.$$.fragment,l),c(U.$$.fragment,l),c(il.$$.fragment,l),c(cl.$$.fragment,l),c(ml.$$.fragment,l),c(ol.$$.fragment,l),c(u.$$.fragment,l),c(bl.$$.fragment,l),c(Ul.$$.fragment,l),c(Tl.$$.fragment,l),c(Cl.$$.fragment,l),c(Il.$$.fragment,l),Ae=!0)},o(l){r(T.$$.fragment,l),r(h.$$.fragment,l),r(f.$$.fragment,l),r(Z.$$.fragment,l),r(I.$$.fragment,l),r(k.$$.fragment,l),r(W.$$.fragment,l),r(g.$$.fragment,l),r(v.$$.fragment,l),r(Y.$$.fragment,l),r(N.$$.fragment,l),r(E.$$.fragment,l),r(F.$$.fragment,l),r(x.$$.fragment,l),r(q.$$.fragment,l),r(K.$$.fragment,l),r(L.$$.fragment,l),r(P.$$.fragment,l),r(O.$$.fragment,l),r(el.$$.fragment,l),r(tl.$$.fragment,l),r(nl.$$.fragment,l),r(pl.$$.fragment,l),r(U.$$.fragment,l),r(il.$$.fragment,l),r(cl.$$.fragment,l),r(ml.$$.fragment,l),r(ol.$$.fragment,l),r(u.$$.fragment,l),r(bl.$$.fragment,l),r(Ul.$$.fragment,l),r(Tl.$$.fragment,l),r(Cl.$$.fragment,l),r(Il.$$.fragment,l),Ae=!1},d(l){l&&(s(b),s(w),s($l),s(Xl),s(Wl),s(Rl),s(C),s(gl),s(_l),s(vl),s(B),s(Yl),s($),s(Vl),s(G),s(Al),s(Nl),s(X),s(zl),s(El),s(R),s(Fl),s(Ql),s(_),s(Hl),s(xl),s(Sl),s(V),s(ql),s(A),s(Kl),s(Ll),s(z),s(Dl),s(Pl),s(Ol),s(Q),s(le),s(H),s(ee),s(se),s(S),s(te),s(ae),s(ne),s(pe),s(D),s(Me),s(ie),s(ce),s(ll),s(re),s(me),s(sl),s(ye),s(oe),s(al),s(de),s(Je),s(je),s(Ml),s(be),s(we),s(Ue),s(ue),s(rl),s(Te),s(he),s(yl),s(fe),s(Ce),s(dl),s(Ze),s(Jl),s(Ie),s(Be),s(jl),s($e),s(Ge),s(wl),s(ke),s(Xe),s(ul),s(We),s(Re),s(hl),s(ge),s(fl),s(_e),s(ve),s(Zl),s(Ye),s(Ve),s(Gl)),s(j),m(T,l),m(h,l),m(f,l),m(Z,l),m(I,l),m(k,l),m(W,l),m(g,l),m(v,l),m(Y,l),m(N,l),m(E,l),m(F,l),m(x,l),m(q,l),m(K,l),m(L,l),m(P,l),m(O,l),m(el,l),m(tl,l),m(nl,l),m(pl,l),m(U,l),m(il,l),m(cl,l),m(ml,l),m(ol,l),m(u,l),m(bl,l),m(Ul,l),m(Tl,l),m(Cl,l),m(Il,l)}}}const gs='{"title":"Полное обучение","local":"полное-обучение","sections":[{"title":"Подготовка к обучению","local":"подготовка-к-обучению","sections":[],"depth":3},{"title":"Обучающий цикл","local":"обучающий-цикл","sections":[],"depth":3},{"title":"Валидационный цикл","local":"валидационный-цикл","sections":[],"depth":3},{"title":"Ускорение обучающего цикла с помощью 🤗 Accelerate","local":"ускорение-обучающего-цикла-с-помощью--accelerate","sections":[],"depth":3}],"depth":1}';function _s(Bl){return Ts(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Fs extends fs{constructor(j){super(),Cs(this,j,_s,Rs,us,{})}}export{Fs as component};

Xet Storage Details

Size:
49.1 kB
·
Xet hash:
d57545870627a4a8a7adeb784317b6580829d23cbcaa4b670304aee865fb63df

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.