Эта статья была переведена Getting Started и Installation Details и CIFAR-10 Tutorial три Учебное пособие,Можетпозволятьновичок Установитьи Простойиспользоватьначальство DeepSpeed Приходить做Модельтренироваться
Эта серия да посвящена DeepSpeedиз Учебное пособие «Перевести работу», 34 учебных пособия представлены в существовании DeepSpeedизTutorials. Эти руководства не только включают в себя стандартный процесс завершения распределенноготренирования Конфигурация DeepSpeed, но также включают поддержку Некоторый DeepSpeed и функции з Некоторый, такие как низкобитный оптимизатор, Ноль и т. д. В последнее время появился спрос на использованиеDeepSpeed для проведения простых экспериментов из Модельтренироваться, поэтому я открыл эту тему и попытался выполнить большинство обучающих программ DeepSpeediz, которые будут время от времени обновляться. Эта статья начинается с получения Started и Installation Details,CIFAR-10 Tutorial Эти три урока. на основе PyTorch 2.0 версия работает CIFAR-10 Tutorial Были обнаружены некоторые сообщения об ошибках и предложены решения.
--deepspeed
логотипи Конфигурациядокумент Ускорьте их легкоиз Модель。Для более подробной информации,См. официальную документацию. PyTorch Lightning проходит Lightning Trainer обеспечивает легкий доступ к DeepSpeediz. Для более подробной информации,См. официальную документацию.docker pull deepspeed/rocm501:ds060_pytorch110
。использоватьDeepSpeedдвигатель работает Модельтренироваться。двигатель Может包装任何类型为torch.nn.module
из Модель,и имеет минимальный набор API для сохранения модели. КПП. См. Учебное пособие с подробными примерами.
Для создания DeepSpeed Engine:
model_engine, optimizer, _, _ = deepspeed.initialize(args=cmd_args,
model=model,
model_parameters=params)
deepspeed.initialize
убеждатьсясуществовать Нижний слой делает то, что необходимо, соответствующим образом.израспределенныйданныепараллельныйилисмешанная точностьтренироватьсянеобходимыйиз Все настройки。кроме упаковки Модельснаружи,DeepSpeed还Может基于传递给deepspeed.initialize
иDeepSpeedКонфигурациядокумент(https://www.deepspeed.ai/getting-started/#deepspeed-configuration)изпараметрстроитьиуправлятьтренироватьсяоптимизатор、данныенагрузкаустройствои学习率调度устройство。пожалуйста, обрати внимание,DeepSpeed автоматически выполнит планирование скорости обучения на каждом этапе тренироваться.
Если вы уже настроили распределенную среду, вам потребуется сделать следующие замены:
torch.distributed.init_process_group(...)
Заменить на:
deepspeed.init_distributed()
По умолчанию,DeepSpeed полностью протестирован из бэкэнда NCCL.,Но вы также можете переопределить настройки по умолчанию (https://deepspeed.readthedocs.io/en/latest/initialize.html#distributed-initialization). Но да,если доdeepspeed.initialize()
Вам нужно будет только установить его позжераспределенныйсреда,Нет необходимости в этой функции,Потому что DeepSpeed будет продолжать свой период создания автоматически создания распределенной среды. в любом случае,тебе нужны обаудалитьtorch.distributed.init_process_group
。
После установки движка DeepSpeed он может использовать три простых API для выполнения прямого распространения (вызываемого object)、Обратное распространение ошибки(backward
)и Обновление веса(step
)Приходитьтренироваться Модель。
for step, batch in enumerate(data_loader):
#forward() method
loss = model_engine(batch)
#runs backpropagation
model_engine.backward(loss)
#weight update
model_engine.step()
backward
Убедитесь, что существуют пары a train_batch_size
После выполнения тренироваться данные градиента существования усредняются между параллельными процессами.ds_config.json
документсередина指定)час, DeepSpeed встречасуществоватькаждый разтренироватьсяшаг(осуществлятьmodel_engine.step()
час)调用调度устройствоизstep()
метод。когда不использоватьDeepSpeedиз学习率调度устройствочас:deepspeed.initialize
, позволять DeepSpeed Управление, обновление и сохранение/восстановление.использовать DeepSpeed в save_checkpoint
и load_checkpoint
API Чтобы обработать состояние тренироваться из сохранения и загрузки, необходимо указать два параметра для однозначной идентификации контрольной точки:
ckpt_dir
: Контрольные точки будут сохранены в этом каталоге.ckpt_id
:существовать目录середина唯一标识检查点изидентификатор。существоватьподиз代码片段середина,Мы используем значение потерь в качестве идентификатора контрольной точки.#load checkpoint
_, client_sd = model_engine.load_checkpoint(args.load_dir, args.ckpt_id)
step = client_sd['step']
#advance data loader to ckpt step
dataloader_to_step(data_loader, step + 1)
for step, batch in enumerate(data_loader):
#forward() method
loss = model_engine(batch)
#runs backpropagation
model_engine.backward(loss)
#weight update
model_engine.step()
#save checkpoint
if step % args.save_interval:
client_sd['step'] = step
ckpt_id = loss.item()
model_engine.save_checkpoint(args.save_dir, ckpt_id, client_sd = client_sd)
DeepSpeed Вы можете автоматически сохранять и восстанавливать состояние модели, оптимизатора и планировщика скорости обучения, скрывая при этом эти детали, чтобы пользователям не о чем беспокоиться. Однако пользователи могут пожелать сохранить другие данные, относящиеся к конкретной Моделитренироваться из. Чтобы поддержать эти проекты, save_checkpoint Принимает словарь состояний клиента client_sd
для экономии. Эти элементы доступны в качестве возвращаемых параметров из load_checkpoint
Искать в. В приведенном выше примере значение шага (step) хранится как client_sd
часть.
ВАЖНО: Этот метод необходимо вызывать для всех процессов, а не только для рангов. 0из процесса. Это связано с тем, что каждому процессу необходимо сохранить свой вес главного узла и состояние планировщика + оптимизатора. Если бы только ранг Когда процесс 0 вызывает этот метод, он зависает и ожидает синхронизации с другими процессами.
Вы можете использовать одну конфигурацию JSON документ для включения, отключения или настройки DeepSpeed функция, файл должен быть таким args.deepspeed_config
указано. Ниже приведен пример конфигурации документа. Полный набор функций см. API Документация (https://www.deepspeed.ai/docs/config-json/) 。
{
"train_batch_size": 8,
"gradient_accumulation_steps": 1,
"optimizer": {
"type": "Adam",
"params": {
"lr": 0.00015
}
},
"fp16": {
"enabled": true
},
"zero_optimization": true
}
DeepSpeed Установитьточка входа deepspeed
начать распределенныйтренироваться. Мы используем следующие предположения для иллюстрации DeepSpeed Пример использования:
client_entry.py
датыиз Модель входного сценария.client args
да argparse
Параметр командной строки.ds_config.json
да DeepSpeed из Конфигурацияпараметр.DeepSpeed использовать与 OpenMPI и Horovod совместимый hostfile Конфигурация многоузловых вычислительных ресурсов. хост-файл это имя хоста (или SSH псевдонимы) список, который эти машины могут пройти без пароля SSH доступ, а также включает в себя slot счетчики, используемые для указания доступных GPU количество. Например:
worker-1 slots=4
worker-2 slots=4
В приведенном выше примере указаны два файла с именами worker-1 и worker-2 машины, каждая машина имеет четыре GPU 用于тренироваться。
Можетиспользовать --hostfile
Спецификация параметров командной строки хост-файл. если не указано хост-файл, затем DeepSpeed буду искать /job/hostfile
. Если не указано или не обнаружено хост-файл, затем DeepSpeed Запросить локальный компьютер GPU количество, чтобы обнаружить доступные местные slot количество.
Следующая команда находится в myhostfile
Все доступные узлы, указанные в GPU Начать PyTorch тренироваться Работа:
deepspeed --hostfile=myhostfile <client_entry.py> <client args> \
--deepspeed --deepspeed_config ds_config.json
Кроме того, Дип Спид позволяет вам Модельизраспределенныйтренироватьсяпределсуществовать Доступные узлыи GPU изна подмножестве。Эта функцияпроходить两个命令行параметр启用:--num_nodes
и --num_gpus
。Например,Вы можете ограничить распределенныйтренироваться только двумя узлами с помощью следующей команды:
deepspeed --num_nodes=2 \
<client_entry.py> <client args> \
--deepspeed --deepspeed_config ds_config.json
Вы также можете использовать --include
и --exclude
Флаг для включения и исключения определенных ресурсов. Например, чтобы удалить узел worker-2 на GPU 0 и узел worker-3 на GPU 0 и 1 Все доступные ресурсы, кроме:
deepspeed --exclude="worker-2:0@worker-3:0,1" \
<client_entry.py> <client args> \
--deepspeed --deepspeed_config ds_config.json
Точно так же вы можете просто worker-2 начальствоиспользовать GPU 0 и 1:
deepspeed --include="worker-2:0,1" \
<client_entry.py> <client args> \
--deepspeed --deepspeed_config ds_config.json
Когда существовать тренироваться на нескольких узлах,Мы считаем очень полезной поддержку распространения определяемых пользователем переменных среды. По умолчанию,DeepSpeed распространит все настройки NCCL и PYTHON Связанные переменные среды. Если вы хотите распространить другие переменные, вы можете сделать это в переменной с именем .deepspeed_env
Они указаны в файле, содержащем разделитель строк. VAR=VAL
Список записей. Дип Спид 启动устройство Воля查找тыосуществлятьизкнига地路径以及тыиз Домашний каталог(~/
)。
Чтобы проиллюстрировать это конкретным примером, некоторые кластеры требуют особых настроек, прежде чем существоватьтренироваться. NCCL переменная. Пользователи могут просто добавить эти переменные в свой домашний каталог. .deepspeed_env
файл, который выглядит следующим образом:
NCCL_IB_DISABLE=1
NCCL_SOCKET_IFNAME=eth0
Затем DeepSpeed обеспечит запуск каждого процесса, когда существует весь тренироваться из наборов этих переменных среды на каждом узле.
Как упоминалось выше, DeepSpeed Предоставляет собственную параллельную программу запуска для запуска заданий тренироваться с несколькими узлами и несколькими графическими процессорами. Если вам нравится использоватьMPI (например, mpirun) для начала работы по тренированию, мы оказываем в этом поддержку из. Нужно обратить внимание на изда, DeepSpeed все равно будетиспользовать torch распределенный NCCL бэкэнд вместо MPI задняя часть.
хотетьиспользовать mpirun + DeepSpeed или AzureML(использовать mpirun В качестве бэкэнда запуска) для запуска вашего задания итренироваться вам нужно всего лишь Установить mpi4py Python Сумка. Дип Спид Буду использовать его, чтобы обнаружить MPI среду и передать необходимое состояние (например. world size、rank и т. д.) перешло к torch распределенныйзадняя часть.
Если вы ищете модель существования, используйте параллельную, Pipeline параллельныйили ВОЗсуществовать调用 deepspeed.initialize(..)
Требуется перед использованием torch.distributed Позвоните нам и мы предоставим Вам дополнительную DeepSpeed API призван поддержать то же самое МПИ. Пожалуйста, введите свой первоначальный torch.distributed.init_process_group(..)
调用Заменить на:
deepspeed.init_distributed()
Если мы работаем только на одном узле (с несколькими графическими процессорами), DeepSpeed не обязательно должен быть таким, как описано выше. хост-файл. Если пропуск не обнаружен хост-файл, затем DeepSpeed Воля Запросить локальный компьютер GPU 数量Приходить发现доступный Количество слотов。--include
и --exclude
Параметры такие же, как и обычные, но пользователь должен указать «localhost» в качестве имени хоста.
Также обратите внимание, что изда,CUDA_VISIBLE_DEVICES
не может быть использован для DeepSpeed Чтобы контролировать, какие устройства следует использовать. Например, чтобы использовать только текущий узел из gpu1, пожалуйста, сделайте следующее:
deepspeed --include localhost:1 ...
проходить pip да Самый быстрый начатьиспользовать DeepSpeed Кстати, это приведет к установке последней версии DeepSpeed не будет связан с конкретным PyTorch или CUDA Привязка версий. Дип Спид Содержит несколько C++/CUDA Расширения, которые мы обычно называем «ops». По умолчанию все это extensions/ops Воляиспользовать torch из JIT C++ Расширение JIT (https://pytorch.org/docs/stable/cpp_extension.html) , устройство нагрузки зависит от ninja Динамическое связывание во время выполнения.
pip install deepspeed
После завершения установки вы можете использовать ds_report
или python -m deepspeed.env_report
Представление команд DeepSpeed Отчет об окружающей среде, чтобы проверить вашу установку и посмотреть, с чем работает ваша машина. ops совместимый. Мы обнаружили это во время отладки DeepSpeed Этот отчет полезен при решении проблем с установкой или совместимостью.
ds_report
ПРИМЕЧАНИЕ. Перед предварительной компиляцией любого DeepSpeed из c++/cuda ops Раньше необходимо сначала установить PyTorch。нода,еслииспользовать ops по умолчанию JIT В скомпилированном режиме нет необходимости предварительно компилировать Установить.
Иногда мы обнаруживаем, что Некоторыйили все DeepSpeed C++/CUDA ops предварительно先Установить Вместоиспользовать JIT Путь компиляции полезен. Для поддержки предварительной установки мы ввели флаги среды создания для включения/выключения определенных ops изстроить。
Вы можете ввести настройки DS_BUILD_OPS
Переменные среды: 1 Приходить指示насиз Установитьпрограмма(install.sh
или pip install
)пытаться Установитьвсе опа, например:
DS_BUILD_OPS=1 pip install deepspeed
DeepSpeed Устанавливать только с вашего совместимого компьютера. оп. Для получения более подробной информации о системе совместимости попробуйте приведенное выше описание. ds_report
инструмент.
Если вы хотите установить только конкретный оп (напр. FusedLamb),ты Можетсуществовать Установитьчасиспользовать DS_BUILD переменные среды для переключения. Например, чтобы иметь возможность Установить только с помощью FusedLamb
op из DeepSpeed,пожалуйстаиспользовать:
DS_BUILD_FUSED_LAMB=1 pip install deepspeed
доступный DS_BUILD
Опции включают в себя:
DS_BUILD_OPS
Переключить все opsDS_BUILD_CPU_ADAM
строить CPUAdam opDS_BUILD_FUSED_ADAM
строить FusedAdam op (from apex)DS_BUILD_FUSED_LAMB
строить FusedLamb opDS_BUILD_SPARSE_ATTN
строить sparse attention opDS_BUILD_TRANSFORMER
строить transformer opDS_BUILD_TRANSFORMER_INFERENCE
строить transformer-inference opDS_BUILD_STOCHASTIC_TRANSFORMER
строить stochastic transformer opDS_BUILD_UTILS
установить различные инструменты оптимизацииDS_BUILD_AIO
строить异步 (NVMe) I/O opЧтобы ускорить процесс сборки, вы можете скомпилировать параллельно следующими способами:
DS_BUILD_OPS=1 pip install deepspeed --global-option="build_ext" --global-option="-j8"
Это должно ускорить весь процесс сборки. 2-3 раз. ты можешь настроить -j
Приходить指定существоватьстроить过程серединаиспользовать多少个 CPU основной. В этом примере установлено значение 8 ядро.
Вы также можете создавать двоичные файлы колесо и существуют одного и того же типа из GPU èТа же программная среда (CUDA Инструментарий, PyTorch, Python и т.д.) Из Установить его на нескольких машинах.
DS_BUILD_OPS=1 python setup.py build_ext -j8 bdist_wheel
Это будет в dist Создать каталог PyPI Бинарное колесо, например. dist/deepspeed-0.3.13+8cd046f-cp38-cp38-linux_x86_64.whl
,Затем вы можете напрямую установить его на нескольких машинах.,существуют наши из примера:
pip install dist/deepspeed-0.3.13+8cd046f-cp38-cp38-linux_x86_64.whl
от GitHub клонировать DeepSpeed После склада вы можете передать pip существовать JIT режим Установить DeepSpeed (см. ниже). Поскольку он не компилирует никаких C++/CUDA Исходный документ. Этот процесс установки должен быть завершен быстро.
pip install .
Для из Установить по нескольким узлам находимиспользовать github Склад install.sh (https://github.com/microsoft/DeepSpeed/blob/master/install.sh) Скрипт Установить DeepSpeed Очень полезно. Это будет вlocalbuildone Python и отправьте его скопировать на ваш исходный документ (проходить --hostfile
задано или по умолчанию /job/hostfile
)середина列出извсе节点начальство。
когдаиспользовать DeepSpeed из кода при первом запуске он автоматически создаст только необходимые файлы CUDA расширения и разместить их по умолчанию существуют ~/.cache/torch_extensions/
каталог. При следующем запуске той же программы эти предварительно скомпилированные расширения будут извлечены из этого каталога.
Если вы используете несколько виртуальных сред,могут возникнуть проблемы,потому что По по умолчанию только один torch_extensions
каталог, но в разных виртуальных средах могут использоваться разные настройки (например, разные python или cuda версию), а затем загрузить другую среду для сборки CUDA Расширение не удастся. Поэтому при необходимости можно использовать TORCH_EXTENSIONS_DIR
Переменные среды переопределяют местоположение по умолчанию. Таким образом, для каждой виртуальной среды можно указать уникальный каталог и DeepSpeed Буду сипользовать его, чтобы сэкономить инагрузка CUDA Расширение.
Вы также можете изменить его в конкретном проекте, используя:
TORCH_EXTENSIONS_DIR=./torch-extensions deepspeed ...
еслитысуществоватьбегать DeepSpeed Я столкнулся со следующей ошибкой:
RuntimeError: CUDA error: no kernel image is available for execution on the device
это означает, что расширение CUDA не сработало. Попробуйте использовать Карта build.
Сборка из исходного кода DeepSpeed Когда, Дип Спид Постараюсь поддерживать различные архитектуры, но существовать JIT режиме он поддерживает только видимую из архитектуры существующую постройку.
Вы можете пройти набор TORCH_CUDA_ARCH_LIST
Переменные среды предназначены специально для ряда требуемых архитектур:
TORCH_CUDA_ARCH_LIST="6.1;7.5;8.6" pip install ...
Когда вы проектируете строительство с меньшими затратами, это также ускоряет строительство.
Это также рекомендуется для того, чтобы убедиться, что у вас правильная архитектура. По разным техническим причинам распределенныйиз PyTorch Двоичный документ не полностью поддерживает все архитектуры, пропуск совместимыго двоичного документа может привести к неполному использованию вычислительной мощности вашей карты. Для просмотра deepspeed Какие схемы включены в исходную сборку - Сохранить журнал и выполнить поиск -gencode
параметр.
Полный NVIDIA GPU Список его вычислительных возможностей можно найти здесь. (https://developer.nvidia.com/cuda-gpus) оказаться.
Если при существовании проекта вы столкнулись со следующей ошибкой:
Exception: >- DeepSpeed Op Builder: Installed CUDA version {VERSION} does not match the version torch was compiled with {VERSION}, unable to compile cuda/cpp extensions without a matching cuda version.
ты Установитьиз CUDA версию и используется для компиляции torch из Несоответствие версии КУДА. Нам нужна только основная версия (например, 11.1 и 11.8 да Можетиз)。нода,хозяиннесоответствие решение может вызвать непредвиденные ошибки поведения.
Самый простой способ исправить эту ошибку — изменить ее. CUDA Версия(использовать nvcc --version
Проверьте) или Обновлено torch Соответствующая версия уже установлена. CUDA Версия(использовать python3 -c "import torch; print(torch.version)"
исследовать).
Если вы хотите пропустить эту проверку и продолжить, если используемая версия не соответствует версии CUDA, установите следующую переменную среды:
DS_SKIP_CUDA_CHECK=1
Некоторый функциональный создатель DeepSpeed DeepSpeed имеет конкретные зависимости в дополнение к общим зависимостям.
ds_report
Вывод инструмента, чтобы узнать, отсутствует ли у вас данная функция или пакет системного уровня.Если вы еще не прочитали Руководство по началу работы, мы рекомендуем сначала прочитать Руководство по началу работы (раздел 2 выше), а затем следовать этому пошаговому руководству.
существоватькнига Учебное пособие, мы будем CIFAR-10 Добавлено в модель DeepSpeed, небольшая модель классификации изображений.
Сначала мы покажем, как Запустить оригинальный CIFAR-10 Модель. Затем мы постепенно обеспечим существование этой Модели. DeepSpeed в эксплуатации.
CIFAR-10 Учебное Исходный код модели пособия можно найти по адресу (https://github.com/pytorch/tutorials/blob/main/beginner_source/blitz/cifar10_tutorial.py). Мы отправили его в DeepSpeedExamples/training/cifar/ (https://github.com/microsoft/DeepSpeedExamples/tree/master/training/cifar) и предоставляется в виде подмодуля. Для загрузки выполните:
git clone git@github.com:microsoft/DeepSpeedExamples.git
Установить CIFAR-10 Модельиз requirements:
cd DeepSpeedExamples/training/cifar
pip install -r requirements.txt
бегать python cifar10_tutorial.py
,Он будет существовать при первой загрузке набора данных тренироваться.
Downloading https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz to ./data/cifar-10-python.tar.gz
170500096it [00:02, 61124868.24it/s]
Extracting ./data/cifar-10-python.tar.gz to ./data
Files already downloaded and verified
cat frog frog frog
[1, 2000] loss: 2.170
[1, 4000] loss: 1.879
[1, 6000] loss: 1.690
[1, 8000] loss: 1.591
[1, 10000] loss: 1.545
[1, 12000] loss: 1.467
[2, 2000] loss: 1.377
[2, 4000] loss: 1.374
[2, 6000] loss: 1.363
[2, 8000] loss: 1.322
[2, 10000] loss: 1.295
[2, 12000] loss: 1.287
Finished Training
GroundTruth: cat ship ship plane
Predicted: cat ship plane plane
Accuracy of the network on the 10000 test images: 53 %
Accuracy of plane : 69 %
Accuracy of car : 59 %
Accuracy of bird : 56 %
Accuracy of cat : 36 %
Accuracy of deer : 37 %
Accuracy of dog : 26 %
Accuracy of frog : 70 %
Accuracy of horse : 61 %
Accuracy of ship : 51 %
Accuracy of truck : 63 %
cuda:0
Мой локальный фонарь здесь В версии 2.0 скрипт запуска сообщит об ошибке. Ошибка атрибута: '_MultiProcessingDataLoaderIter' object has no attribute 'next' . Эта ошибка обычно возникает PyTorch 1.7 и более поздних версиях, поскольку в этих версиях .next() Метод устарел и заменен на
.__next__()
метод заменен. Поэтому вы можете поставить код на 2.next()
Заменить на .next()Приходить解决这个错误。
Включить Дип Спид из Первый шаг в направлении CIFAR-10 Добавление модели DeepSpeed Параметры можно использовать следующими способами: deepspeed.add_config_arguments()
функция:
import argparse
import deepspeed
def add_argument():
parser=argparse.ArgumentParser(description='CIFAR')
# Data.
# Cuda.
parser.add_argument('--with_cuda', default=False, action='store_true',
help='use CPU in case there\'s no GPU support')
parser.add_argument('--use_ema', default=False, action='store_true',
help='whether use exponential moving average')
# Train.
parser.add_argument('-b', '--batch_size', default=32, type=int,
help='mini-batch size (default: 32)')
parser.add_argument('-e', '--epochs', default=30, type=int,
help='number of total epochs (default: 30)')
parser.add_argument('--local_rank', type=int, default=-1,
help='local rank passed from distributed launcher')
# Include DeepSpeed configuration arguments.
parser = deepspeed.add_config_arguments(parser)
args=parser.parse_args()
return args
насиспользовать deepspeed.initialize
создавать model_engine
、optimizer
и trainloader
,deepspeed.initialize
из определяется следующим образом:
def initialize(args,
model,
optimizer=None,
model_params=None,
training_data=None,
lr_scheduler=None,
mpu=None,
dist_init_required=True,
collate_fn=None):
существоватьздесь,насиспользовать CIFAR-10 Модель(net
)、args
、parameters
и trainset
инициализация DeepSpeed:
parameters = filter(lambda p: p.requires_grad, net.parameters())
args=add_argument()
# Initialize DeepSpeed to use the following features
# 1) Distributed model.
# 2) Distributed data loader.
# 3) DeepSpeed optimizer.
model_engine, optimizer, trainloader, _ = deepspeed.initialize(args=args, model=net, model_parameters=parameters, training_data=trainset)
инициализация DeepSpeed После, оригинал device
и optimizer
будут удалены:
#from deepspeed.accelerator import get_accelerator
#device = torch.device(get_accelerator().device_name(0) if get_accelerator().is_available() else "cpu")
#net.to(device)
#optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)
deepspeed.initialize
Возврат из Модельда DeepSpeed Модельдвигатель,нас Воляиспользовать它Приходитьиспользовать forward
、backward
и step
API тренироваться Модель。
for i, data in enumerate(trainloader):
# Get the inputs; data is a list of [inputs, labels].
inputs = data[0].to(model_engine.device)
labels = data[1].to(model_engine.device)
outputs = model_engine(inputs)
loss = criterion(outputs, labels)
model_engine.backward(loss)
model_engine.step()
существоватьиспользовать mini-batch После обновления весов DeepSpeed Очистка градиента выполняется автоматически.
использовать DeepSpeed Далее создайте новую конфигурацию JSON документ (ds_config.json). Документ предоставляет определяемые пользователем DeepSpeed 特定параметр,Например批2⃣️размер、оптимизатор、Планировщик и другие параметры.
{
"train_batch_size": 4,
"steps_per_print": 2000,
"optimizer": {
"type": "Adam",
"params": {
"lr": 0.001,
"betas": [
0.8,
0.999
],
"eps": 1e-8,
"weight_decay": 3e-7
}
},
"scheduler": {
"type": "WarmupLR",
"params": {
"warmup_min_lr": 0,
"warmup_max_lr": 0.001,
"warmup_num_steps": 1000
}
},
"wall_clock_breakdown": false
}
хотетьиспользовать DeepSpeed Старттренироваться Применено DeepSpeed из CIFAR-10 Модель, выполните следующую команду, по умолчанию она будет использовать все обнаруженные GPU。
deepspeed cifar10_deepspeed.py --deepspeed_config ds_config.json
DeepSpeed обычно печатает для пользователей более подробную информацию, включая настройки, статистику производительности и тенденции потерь.
deepspeed.pt cifar10_deepspeed.py --deepspeed_config ds_config.json
Warning: Permanently added '[192.168.0.22]:42227' (ECDSA) to the list of known hosts.
cmd=['pdsh', '-w', 'worker-0', 'export NCCL_VERSION=2.4.2; ', 'cd /data/users/deepscale/test/ds_v2/examples/cifar;', '/usr/bin/python', '-u', '-m', 'deepspeed.pt.deepspeed_launch', '--world_info=eyJ3b3JrZXItMCI6IFswXX0=', '--node_rank=%n', '--master_addr=192.168.0.22', '--master_port=29500', 'cifar10_deepspeed.py', '--deepspeed', '--deepspeed_config', 'ds_config.json']
worker-0: Warning: Permanently added '[192.168.0.22]:42227' (ECDSA) to the list of known hosts.
worker-0: 0 NCCL_VERSION 2.4.2
worker-0: WORLD INFO DICT: {'worker-0': [0]}
worker-0: nnodes=1, num_local_procs=1, node_rank=0
worker-0: global_rank_mapping=defaultdict(<class 'list'>, {'worker-0': [0]})
worker-0: dist_world_size=1
worker-0: Setting CUDA_VISIBLE_DEVICES=0
worker-0: Files already downloaded and verified
worker-0: Files already downloaded and verified
worker-0: bird car horse ship
worker-0: DeepSpeed info: version=2.1, git-hash=fa937e7, git-branch=master
worker-0: [INFO 2020-02-06 19:53:49] Set device to local rank 0 within node.
worker-0: 1 1
worker-0: [INFO 2020-02-06 19:53:56] Using DeepSpeed Optimizer param name adam as basic optimizer
worker-0: [INFO 2020-02-06 19:53:56] DeepSpeed Basic Optimizer = FusedAdam (
worker-0: Parameter Group 0
worker-0: betas: [0.8, 0.999]
worker-0: bias_correction: True
worker-0: eps: 1e-08
worker-0: lr: 0.001
worker-0: max_grad_norm: 0.0
worker-0: weight_decay: 3e-07
worker-0: )
worker-0: [INFO 2020-02-06 19:53:56] DeepSpeed using configured LR scheduler = WarmupLR
worker-0: [INFO 2020-02-06 19:53:56] DeepSpeed LR Scheduler = <deepspeed.pt.deepspeed_lr_schedules.WarmupLR object at 0x7f64c4c09c18>
worker-0: [INFO 2020-02-06 19:53:56] rank:0 step=0, skipped=0, lr=[0.001], mom=[[0.8, 0.999]]
worker-0: DeepSpeedLight configuration:
worker-0: allgather_size ............... 500000000
worker-0: allreduce_always_fp32 ........ False
worker-0: disable_allgather ............ False
worker-0: dump_state ................... False
worker-0: dynamic_loss_scale_args ...... None
worker-0: fp16_enabled ................. False
worker-0: global_rank .................. 0
worker-0: gradient_accumulation_steps .. 1
worker-0: gradient_clipping ............ 0.0
worker-0: initial_dynamic_scale ........ 4294967296
worker-0: loss_scale ................... 0
worker-0: optimizer_name ............... adam
worker-0: optimizer_params ............. {'lr': 0.001, 'betas': [0.8, 0.999], 'eps': 1e-08, 'weight_decay': 3e-07}
worker-0: prescale_gradients ........... False
worker-0: scheduler_name ............... WarmupLR
worker-0: scheduler_params ............. {'warmup_min_lr': 0, 'warmup_max_lr': 0.001, 'warmup_num_steps': 1000}
worker-0: sparse_gradients_enabled ..... False
worker-0: steps_per_print .............. 2000
worker-0: tensorboard_enabled .......... False
worker-0: tensorboard_job_name ......... DeepSpeedJobName
worker-0: tensorboard_output_path ......
worker-0: train_batch_size ............. 4
worker-0: train_micro_batch_size_per_gpu 4
worker-0: wall_clock_breakdown ......... False
worker-0: world_size ................... 1
worker-0: zero_enabled ................. False
worker-0: json = {
worker-0: "optimizer":{
worker-0: "params":{
worker-0: "betas":[
worker-0: 0.8,
worker-0: 0.999
worker-0: ],
worker-0: "eps":1e-08,
worker-0: "lr":0.001,
worker-0: "weight_decay":3e-07
worker-0: },
worker-0: "type":"Adam"
worker-0: },
worker-0: "scheduler":{
worker-0: "params":{
worker-0: "warmup_max_lr":0.001,
worker-0: "warmup_min_lr":0,
worker-0: "warmup_num_steps":1000
worker-0: },
worker-0: "type":"WarmupLR"
worker-0: },
worker-0: "steps_per_print":2000,
worker-0: "train_batch_size":4,
worker-0: "wall_clock_breakdown":false
worker-0: }
worker-0: [INFO 2020-02-06 19:53:56] 0/50, SamplesPerSec=1292.6411179579866
worker-0: [INFO 2020-02-06 19:53:56] 0/100, SamplesPerSec=1303.6726433398537
worker-0: [INFO 2020-02-06 19:53:56] 0/150, SamplesPerSec=1304.4251022567403
......
worker-0: [2, 12000] loss: 1.247
worker-0: [INFO 2020-02-06 20:35:23] 0/24550, SamplesPerSec=1284.4954513975558
worker-0: [INFO 2020-02-06 20:35:23] 0/24600, SamplesPerSec=1284.384033658866
worker-0: [INFO 2020-02-06 20:35:23] 0/24650, SamplesPerSec=1284.4433482972925
worker-0: [INFO 2020-02-06 20:35:23] 0/24700, SamplesPerSec=1284.4664449792422
worker-0: [INFO 2020-02-06 20:35:23] 0/24750, SamplesPerSec=1284.4950124403447
worker-0: [INFO 2020-02-06 20:35:23] 0/24800, SamplesPerSec=1284.4756105952233
worker-0: [INFO 2020-02-06 20:35:24] 0/24850, SamplesPerSec=1284.5251526215386
worker-0: [INFO 2020-02-06 20:35:24] 0/24900, SamplesPerSec=1284.531217073863
worker-0: [INFO 2020-02-06 20:35:24] 0/24950, SamplesPerSec=1284.5125323220368
worker-0: [INFO 2020-02-06 20:35:24] 0/25000, SamplesPerSec=1284.5698818883018
worker-0: Finished Training
worker-0: GroundTruth: cat ship ship plane
worker-0: Predicted: cat car car plane
worker-0: Accuracy of the network on the 10000 test images: 57 %
worker-0: Accuracy of plane : 61 %
worker-0: Accuracy of car : 74 %
worker-0: Accuracy of bird : 49 %
worker-0: Accuracy of cat : 36 %
worker-0: Accuracy of deer : 44 %
worker-0: Accuracy of dog : 52 %
worker-0: Accuracy of frog : 67 %
worker-0: Accuracy of horse : 58 %
worker-0: Accuracy of ship : 70 %
worker-0: Accuracy of truck : 59 %
Дополнение: Вы можете использовать --include localhost:1 Подобно тому, как команда существует на одной карте, моделируйте ее. Кроме того, --num_gpus может указать, сколько графических процессоров использовать.
Эта статья была переведена Getting Started и Installation Details и CIFAR-10 Tutorial три Учебное пособие,Можетпозволятьновичок Установитьи Простойиспользоватьначальство DeepSpeed Приходить做Модельтренироваться。