Від навчання нових моделей до впровадження їх у виробництво, Amazon SageMaker пропонує найповніший набір інструментів для стартапів і підприємств для використання можливостей машинного навчання (ML) і глибокого навчання.
Завдяки своїй бібліотеці з відкритим кодом Transformers і платформі ML Hugging Face робить навчання з передачі та новітні моделі ML доступними для глобальної спільноти AI, скорочуючи час, необхідний науковцям з даних та інженерам з ML у компаніях по всьому світу, щоб скористатися всіма новими науковими можливостями. просування.
Застосування трансформаторів до нових завдань або доменів НЛП вимагає тонкого налаштування великих мовних моделей, методики, що використовує накопичені знання попередньо навчених моделей, щоб адаптувати їх до нового завдання або конкретного типу документів у додатковому, ефективному навчальному процесі.
Точне налаштування моделі для створення точних прогнозів для розглянутої бізнес-проблеми вимагає навчання великих моделей трансформаторів, наприклад, BERT, BART, RoBERTa, T5, які можуть бути складними для масштабованого виконання.
Hugging Face тісно співпрацює з SageMaker для доставки готові до використання контейнери глибокого навчання (DLC), які роблять навчання та розгортання останніх моделей Transformers легшим і швидшим, ніж будь-коли. Оскільки такі функції, як SageMaker Data Parallel (SMDP), SageMaker Model Parallel (SMMP), S3 pipe mode, інтегровані в контейнер, їх використання значно скорочує час для компаній на створення рішень ML на основі Transformers, таких як відповіді на запитання, генерація текст і зображення, оптимізуючи результати пошуку та покращуючи автоматизацію підтримки клієнтів, розмовні інтерфейси, семантичний пошук, аналіз документів та багато інших програм.
У цій публікації ми зосереджуємось на глибокій інтеграції розподілених бібліотек SageMaker з Hugging Face, що дає змогу науковцям з даних прискорювати навчання та тонке налаштування моделей Transformers від днів до годин, і все це в SageMaker.
Огляд розподіленого навчання
Практики ML і науковці з даних стикаються з двома проблемами масштабування під час навчання моделей: масштабування розміру моделі (кількість параметрів і шарів) і масштабування навчальних даних. Масштабування розміру моделі або навчальних даних може призвести до кращої точності, але в глибокому навчанні можуть бути випадки, коли обсяг пам’яті на прискорювачі (ЦП або графічний процесор) обмежує комбінацію розміру навчальних даних і розміру модель. Наприклад, під час навчання великої мовної моделі розмір пакету часто обмежується невеликою кількістю вибірок, що може призвести до менш точної моделі.
Розподілене навчання може розділити робоче навантаження для навчання моделі між кількома процесорами, що називається робочі. Ці працівники працюють паралельно, щоб прискорити навчання моделі.
На основі того, що ми хочемо масштабувати (модель чи дані), існує два підходи до розподіленого навчання: паралельні дані і паралельні моделі.
Паралель даних є найпоширенішим підходом до розподіленого навчання. Паралелізм даних тягне за собою створення копії архітектури моделі та ваг на різних прискорювачах. Тоді замість того, щоб передавати весь навчальний набір до одного прискорювача, ми можемо розділити навчальний набір між різними прискорювачами і швидше пройти навчальний набір. Хоча це додає прискорювачів необхідність передавати інформацію про градієнт назад на сервер параметрів, цей час більш ніж компенсується збільшенням швидкості ітерації над часткою всього набору даних на прискорювач. Через це паралелізм даних може значно скоротити час навчання. Наприклад, навчання однієї моделі без розпаралелювання займає 4 години. Використання розподіленого навчання може скоротити це до 24 хвилин. Розподілене навчання SageMaker також реалізує передові методи в оновленнях градієнтів.
Паралельний підхід моделі використовується з великими моделями, занадто великими, щоб поміститися на одному прискорювачі (GPU). Цей підхід реалізує стратегію паралелізації, коли архітектура моделі ділиться на сегменти та розміщується на різних прискорювачах. Конфігурація кожного з цих сегментів залежить від архітектури нейронної мережі і зазвичай включає кілька шарів. Зв’язок між прискорювачами відбувається щоразу, коли навчальні дані переходять від одного з шардів до наступного.
Підсумовуючи, ви повинні використовувати розподілений паралелізм навчальних даних для виконання трудомістких завдань через великі набори даних або коли ви хочете прискорити свої навчальні експерименти. Ви повинні використовувати паралельність моделі, коли ваша модель не може поміститися на одному прискорювачі.
Передумови
Щоб виконати розподілене навчання моделей Hugging Face Transformers у SageMaker, потрібно виконати наступні умови:
Запровадити розподілене навчання
Бібліотека Hugging Face Transformers надає API Trainer, оптимізований для навчання або тонкого налаштування моделей, які надає бібліотека. Ви також можете використовувати його на власних моделях, якщо вони працюють так само, як моделі трансформаторів; побачити тренер для більш детальної інформації. Цей API використовується в нашому приклади скриптів, які показують, як попередньо обробляти дані для різних завдань НЛП, які ви можете використовувати як моделі для написання сценарію, що вирішує вашу власну проблему. Обіцянка Trainer API полягає в тому, що цей скрипт працює з коробки на будь-якій розподіленій установці, включаючи SageMaker.
API Trainer приймає все необхідне для навчання. Це включає ваші набори даних, вашу модель (або функцію, яка повертає вашу модель), а compute_metrics
функція, яка повертає показники, які ви хочете відстежувати з масивів прогнозів і міток, вашого оптимізатора і планувальника швидкості навчання (надаються хороші значення за замовчуванням), а також усі гіперпараметри, які ви можете налаштувати для свого навчання, згруповані в клас даних, що називається TrainingArguments
. З усім цим він надає три методи — тренувати, оцінювати та прогнозувати — щоб навчити вашу модель, отримати результати метрики для будь-якого набору даних або отримати прогнози для будь-якого набору даних. Щоб дізнатися більше про об’єкт Trainer, див Точне налаштування моделі за допомогою Trainer API і відео API тренера, який проведе вас через простий приклад.
За лаштунками Trainer API починається з аналізу середовища, в якому ви запускаєте свій сценарій під час створення TrainingArguments
. Наприклад, якщо ви запустили навчання за допомогою SageMaker, воно дивиться на SM_FRAMEWORK_PARAMS
змінної в середовищі, щоб визначити, чи ввімкнено паралелізм даних SageMaker або паралельність моделі. Потім він отримує відповідні змінні (наприклад, ранг процесу або розмір світу) із середовища перед виконанням необхідних кроків ініціалізації (наприклад, smdistributed.dataparallel.torch.distributed.init_process_group()
).
Тренажер містить весь цикл навчання, тому він може налаштувати необхідні кроки, щоб переконатися в цьому smdistributed.dataparallel
backend використовується, коли це необхідно, без необхідності змінювати рядок коду у вашому сценарії. Він все ще може працювати (хоча набагато повільніше) на вашій локальній машині для налагодження. Він обробляє розділення вашого набору даних таким чином, що кожен процес автоматично бачить різні зразки з перестановкою в кожну епоху, синхронізуючи ваші градієнти перед кроком оптимізації, змішане тренування точності, якщо ви його активували, накопичення градієнта, якщо ви не можете вмістити велику партію на ваші графічні процесори та багато інших оптимізацій.
Якщо ви активували паралелізм моделі, це гарантує, що процеси, які мають бачити ті самі дані (якщо їх dp_rank
однаково) отримують однакові партії, а процеси з різними dp_rank
не бачу тих самих зразків, знову ж таки з перестановкою в кожну епоху. Він гарантує, що словники стану моделі або оптимізаторів належним чином синхронізовані під час встановлення контрольних точок, і знову обробляє всі оптимізації, такі як змішана точність і накопичення градієнта.
Використовуючи методи оцінки та прогнозування, Trainer виконує розподілене оцінювання, щоб скористатися перевагами всіх ваших графічних процесорів. Він належним чином обробляє поділ ваших даних для кожного процесу (процес того самого dp_rank
якщо паралелізм моделі активовано) і переконається, що передбачення правильно зібрані в тому ж порядку, що й набір даних, який ви використовуєте, перш ніж вони будуть надіслані до compute_metrics
функцію або просто повернуто. Використання Trainer API не є обов’язковим. Користувачі все ще можуть використовувати Keras або PyTorch в Hugging Face. Проте Trainer API може забезпечити корисний рівень абстракції.
Навчайте модель за допомогою інструментів оцінки обличчя SageMaker Hugging Face
Estimator — це інтерфейс високого рівня для навчання SageMaker, який обробляє наскрізні завдання навчання та розгортання SageMaker. Навчання вашого сценарію викликається, коли ви викликаєте fit
на HuggingFace
Оцінювач. У інструменті оцінки ви визначаєте, який сценарій тонкого налаштування використовувати як entry_point
, Яка instance_type
для використання та які гіперпараметри передаються. Щоб отримати додаткові відомості про HuggingFace
параметри див Обіймає Face Estimator.
Розподілене навчання: Паралель даних
У цьому прикладі ми використовуємо нові DLC Hugging Face та SageMaker SDK для навчання розподіленої моделі Seq2Seq-трансформатора задачі запитання та відповіді за допомогою бібліотек Transformers та наборів даних. The bert-large-ucased-whole-word-masking модель точно налаштована на загін набір даних.
У наведених нижче прикладах коду показано кроки створення a HuggingFace
оцінювач для розподіленого навчання з паралелізмом даних.
- Виберіть сценарій Transformers Hugging Face:
Коли ви створюєте файл HuggingFace
Estimator, ви можете вказати навчальний сценарій, який зберігається в репозиторії GitHub, як точку входу для Estimator, тому вам не потрібно завантажувати сценарії локально. Ви можете використовувати git_config
щоб запустити приклади сценаріїв Hugging Face Transformers і праву «гілку», якщо ваша transformers_version
необхідно налаштувати. Наприклад, якщо ви використовуєте transformers_version
4.6.1, ви повинні використовувати 'branch':'v4.6.1
».
- Налаштуйте навчальні гіперпараметри, які передаються в навчальне завдання:
Як гіперпараметр ми можемо визначити будь-який Seq2SeqTrainingArguments і ті, що визначені в сценарії навчання.
- Визначте параметри розподілу в
HuggingFace
Оцінювач:
Ви можете використовувати Бібліотека паралелізму даних SageMaker з коробки для розподіленого навчання. Ми додали функціональність паралелізму даних безпосередньо в трейнер. Щоб увімкнути паралелізм даних, ви можете просто додати один параметр до свого HuggingFace
Оцінювач, щоб дозволити вашому коду на основі Trainer використовувати його автоматично.
- Створити
HuggingFace
Оцінювач, що включає параметри, визначені на попередніх кроках, і починає навчання:
Команда Репозиторій Hugging Face Transformers містить кілька прикладів і скриптів для точного налаштування моделей для завдань від моделювання мови до класифікації лексем. У нашому випадку ми використовуємо run_qa.py
від examples/pytorch/question-answering
приклади
smdistributed.dataparallel
підтримує навчання моделі на SageMaker з лише наступні типи екземплярів. Для найкращої продуктивності ми рекомендуємо використовувати тип екземпляра, який підтримує Адаптер з еластичної тканини (EFA):
- ml.p3.16xlarge
- ml.p3dn.24xlarge (рекомендовано)
- ml.p4d.24xlarge (рекомендовано)
Щоб отримати найкращу продуктивність і максимальну віддачу SMDataParallel
, ви повинні використовувати принаймні два екземпляри, але ви також можете використовувати один для перевірки цього прикладу.
Наступні приклад блокнота надає докладнішу покрокову інструкцію.
Розподілене навчання: Паралель моделі
Для розподіленого навчання з паралельністю моделі ми використовуємо бібліотеку Hugging Face Transformers і наборів даних разом із SageMaker SDK для класифікації послідовності на Загальна оцінка розуміння мови (GLUE) тест на багатовузловому кластері з кількома графічними процесорами за допомогою Бібліотека паралелізму моделі SageMaker.
Як і у випадку з паралелізмом даних, ми спочатку встановлюємо конфігурацію git, навчальні гіперпараметри та параметри розподілу в HuggingFace
Оцінювач:
Бібліотека паралельності моделі внутрішньо використовує MPI, тому для використання паралельності моделі MPI має бути увімкнено за допомогою параметра розподілу. “processes_per_host
” в попередньому коді вказує кількість процесів, які MPI має запустити на кожному хості. Ми пропонуємо їх для розробки та тестування. Під час виробництва ви можете зв’язатися зі службою підтримки AWS, якщо запитуєте велику ємність графічного процесора. Додаткову інформацію див Виконайте завдання паралельного навчання розподіленої моделі SageMaker.
Наступні приклад блокнота містить повний код сценаріїв.
Точкові екземпляри
Завдяки розширенням фреймворку Hugging Face для SageMaker Python SDK ми також можемо скористатися перевагами повністю керованого Обчислювальна хмара Amazon Elastic (Amazon EC2) Точкові екземпляри і заощадити до 90% наших витрат на навчання.
Якщо ваша навчальна робота не завершиться швидко, ми рекомендуємо вам використовувати контрольний пункт з керованим точковим тренуванням, тому вам потрібно визначити checkpoint_s3_uri
.
Щоб використовувати спотові екземпляри з HuggingFace
Оцінювач, ми повинні встановити use_spot_instances
для параметра True і визначте свій max_wait
та max_run
час. Додаткову інформацію про життєвий цикл керованого спотового навчання див Керований точковий тренінг в Amazon SageMaker.
Нижче наведено фрагмент коду для налаштування оцінювача точкового навчання:
Наступні ноутбук містить повний код сценаріїв.
Висновок
У цій публікації ми обговорили розподілене навчання трансформерів Hugging Face Transformers за допомогою SageMaker. Спочатку ми розглянули варіанти використання паралельності даних проти паралельності моделі. Паралелізм даних, як правило, є більш прийнятним, але не обов’язково обмежується тим, коли навчання є вузьким місцем за рахунок обчислень, тоді як ви можете використовувати паралельність моделі, коли модель не може поміститися в пам’ять, надану на одному прискорювачі. Потім ми показали, як тренуватися обома методами.
У випадку використання паралелізму даних, який ми обговорювали, навчання моделі на одному екземплярі p3.2xlarge (з одним графічним процесором) займає 4 години і коштує приблизно 15 доларів США на момент написання цієї статті. Завдяки паралелізму даних ми можемо навчити ту саму модель за 24 хвилини за 28 доларів. Хоча вартість зросла вдвічі, це зменшило час навчання в 10 разів. Для ситуації, коли вам потрібно навчити багато моделей протягом короткого періоду часу, паралелізм даних може дозволити це зробити при відносно низькому збільшенні вартості. Що стосується випадку використання паралельності моделей, він додає можливість тренувати моделі, які раніше взагалі не могли бути навчені через апаратні обмеження. Обидві функції забезпечують нові робочі процеси для практиків ML, і вони легко доступні через HuggingFace
Оцінювач як частина SageMaker Python SDK. Розгортання цих моделей на розміщених кінцевих точках виконується за такою ж процедурою, як і для інших Оцінювачів.
Ця інтеграція включає інші функції, які є частиною екосистеми SageMaker. Наприклад, ви можете використовувати спотові екземпляри, додавши простий прапорець до оцінювача для додаткової оптимізації витрат. Як наступний крок, ви можете знайти та запустити файл навчальна демонстрація та приклад блокнота.
Про авторів
Архіс Йоглекар є архітектором партнерських рішень AI/ML у команді Emerging Technologies. Його цікавлять продуктивне, масштабоване глибоке навчання та наукові обчислення з використанням будівельних блоків AWS. Його минулий досвід варіюється від досліджень комп’ютерної фізики до розробки платформ машинного навчання в наукових колах, національних лабораторіях і стартапах. Свій час поза комп’ютером проводить за футболом, з друзями та родиною.
Джеймс І є старшим архітектором партнерських рішень AI/ML у команді Emerging Technologies в Amazon Web Services. Він захоплений роботою з корпоративними клієнтами та партнерами для розробки, розгортання та масштабування додатків AI/ML, щоб отримати їх бізнес-цінності. Поза роботою він любить грати у футбол, подорожувати та проводити час із сім’єю.
Філіп Шмід є інженером з машинного навчання та технічним керівником Hugging Face, де він керує співпраці з командою Amazon SageMaker. Він захоплений демократизацією, оптимізацією та виробництвом передових моделей НЛП та покращенням простоти використання для глибокого навчання.
Сильвен Гугер є інженером-дослідником Hugging Face і одним із головних розпорядників бібліотеки Transformers. Він любить програмне забезпечення з відкритим кодом і допомагає спільноті використовувати його.
Джефф Буд'є створює продукти в Hugging Face, творці Transformers, провідної бібліотеки ML з відкритим вихідним кодом. Раніше Джефф був співзасновником Stupeflix, придбаної GoPro, де він обіймав посаду директора з управління продуктами, маркетингу продуктів, розвитку бізнесу та корпоративного розвитку.
- '
- 100
- 7
- 9
- МЕНЮ
- прискорювати
- прискорювач
- прискорювачі
- через
- Додатковий
- Перевага
- AI
- ВСІ
- хоча
- Amazon
- Amazon EC2
- Amazon SageMaker
- Amazon Web Services
- серед
- API
- застосування
- архітектура
- навколо
- Автоматизація
- AWS
- еталонний тест
- КРАЩЕ
- Box
- Створюємо
- бізнес
- call
- потужність
- випадків
- проблеми
- зміна
- класифікація
- Співзасновник
- код
- співробітництво
- поєднання
- загальний
- Комунікація
- співтовариство
- Компанії
- обчислення
- обчислення
- конфігурація
- Контейнер
- містить
- Розмовні інтерфейси
- витрати
- може
- створення
- творець
- підтримка клієнтів
- Клієнти
- дані
- глибоке навчання
- розгортання
- дизайн
- розробка
- різний
- Директор
- розподілений
- документація
- домени
- під час
- екосистема
- з'являються
- інженер
- Інженери
- підприємство
- корпоративні клієнти
- Навколишнє середовище
- приклад
- Досліди
- тканину
- Face
- сім'я
- швидше
- риси
- Перший
- відповідати
- Сфокусувати
- Для стартапів
- Рамки
- функція
- Git
- GitHub
- Глобальний
- добре
- GPU
- Графічні процесори
- апаратні засоби
- має
- допомога
- Як
- How To
- HTTPS
- IAM
- поліпшення
- У тому числі
- Augmenter
- інформація
- інтеграція
- IT
- робота
- керас
- знання
- етикетки
- Labs
- мова
- великий
- останній
- запуск
- запуск
- вести
- провідний
- УЧИТЬСЯ
- вивчення
- бібліотека
- обмеженою
- Лінія
- місцевий
- локально
- навчання за допомогою машини
- управління
- Маркетинг
- Метрика
- змішаний
- ML
- модель
- моделювання
- Моделі
- більше
- найбільш
- National
- необхідний
- мережу
- Нейронний
- нейронної мережі
- nlp
- Пропозиції
- зсув
- відкрити
- з відкритим вихідним кодом
- порядок
- Інше
- партнер
- партнери
- продуктивність
- Фізика
- труба
- платформа
- влада
- Точність
- Прогнози
- Проблема
- процес
- процеси
- Product
- Управління продуктом
- Production
- Продукти
- забезпечувати
- забезпечує
- Python
- піторх
- питання
- діапазон
- зменшити
- дослідження
- результати
- Умови повернення
- прогін
- біг
- мудрець
- шкала
- Масштабування
- Вчені
- Sdk
- Пошук
- бачить
- Послуги
- комплект
- установка
- заточування
- Короткий
- простий
- Розмір
- невеликий
- So
- Футбол
- Софтвер
- Рішення
- швидкість
- Витрати
- розкол
- Spot
- поширення
- старт
- Стартапи
- стан
- Стратегія
- підтримка
- Опори
- технології
- методи
- Технології
- Тестування
- світ
- через
- час
- разом
- знак
- інструменти
- факел
- трек
- Навчання
- Updates
- URI
- користувачі
- Відео
- Web
- веб-сервіси
- Що
- в
- без
- Work
- робочі
- робочий
- працює
- світ
- лист