[Перевод учебного пособия DeepSpeed] Начало работы, подробности установки и учебное пособие по CIFAR-10
[Перевод учебного пособия DeepSpeed] Начало работы, подробности установки и учебное пособие по CIFAR-10

Эта статья была переведена Getting Started и Installation Details и CIFAR-10 Tutorial три Учебное пособие,Можетпозволятьновичок Установитьи Простойиспользоватьначальство DeepSpeed Приходить做Модельтренироваться

0x0.

Эта серия да посвящена DeepSpeedиз Учебное пособие «Перевести работу», 34 учебных пособия представлены в существовании DeepSpeedизTutorials. Эти руководства не только включают в себя стандартный процесс завершения распределенноготренирования Конфигурация DeepSpeed, но также включают поддержку Некоторый DeepSpeed ​​и функции з Некоторый, такие как низкобитный оптимизатор, Ноль и т. д. В последнее время появился спрос на использованиеDeepSpeed ​​для проведения простых экспериментов из Модельтренироваться, поэтому я открыл эту тему и попытался выполнить большинство обучающих программ DeepSpeediz, которые будут время от времени обновляться. Эта статья начинается с получения Started и Installation Details,CIFAR-10 Tutorial Эти три урока. на основе PyTorch 2.0 версия работает CIFAR-10 Tutorial Были обнаружены некоторые сообщения об ошибках и предложены решения.

0x1. Getting Started

  • Соответствует исходному тексту: https://www.deepspeed.ai/getting-started.

Установить

  • УстановитьDeepSpeed ​​очень просто,Просто выполните следующую команду: pip install deepspeed. Для более подробной информации,Пожалуйста, обратитесь к официальной документации (https://www.deepspeed.ai/tutorials/advanced-install/).,Это да, я переведу документ позже.
  • Чтобы начать работу с DeepSpeed ​​в AzureML, см. примеры AzureML на GitHub. Ссылка здесь 404.
  • DeepSpeed ​​и HuggingFace TransformersиPyTorch Lightning имеет прямую интеграцию. Обнимать Лицо TransformersПользователь сейчассуществовать Можетпроходить Простойиз--deepspeedлоготипи Конфигурациядокумент Ускорьте их легкоиз Модель。Для более подробной информации,См. официальную документацию. PyTorch Lightning проходит Lightning Trainer обеспечивает легкий доступ к DeepSpeediz. Для более подробной информации,См. официальную документацию.
  • DeepSpeed ​​доступен на AMD, используя наше зеркало из ROCm (https://hub.docker.com/r/deepspeed/rocm501/tags)использовать,Напримерdocker pull deepspeed/rocm501:ds060_pytorch110

Написание модели DeepSpeed

использоватьDeepSpeedдвигатель работает Модельтренироваться。двигатель Может包装任何类型为torch.nn.moduleиз Модель,и имеет минимальный набор API для сохранения модели. КПП. См. Учебное пособие с подробными примерами.

Для создания DeepSpeed ​​Engine:

Язык кода:javascript
копировать
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 ​​автоматически выполнит планирование скорости обучения на каждом этапе тренироваться.

Если вы уже настроили распределенную среду, вам потребуется сделать следующие замены:

Язык кода:javascript
копировать
torch.distributed.init_process_group(...)

Заменить на:

Язык кода:javascript
копировать
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)Приходитьтренироваться Модель。

Язык кода:javascript
копировать
for step, batch in enumerate(data_loader):
    #forward() method
    loss = model_engine(batch)

    #runs backpropagation
    model_engine.backward(loss)

    #weight update
    model_engine.step()
  • Gradient Averaging: существоватьраспределенныйданныепараллельныйтренироватьсясередина,backward Убедитесь, что существуют пары a train_batch_size После выполнения тренироваться данные градиента существования усредняются между параллельными процессами.
  • Loss Scaling: существоватьFP16/смешанная точностьтренироватьсясередина,Движок DeepSpeed ​​автоматически обрабатывает потери при масштабировании.,Чтобы избежать потери точности градиента.
  • Learning Rate Scheduler: когдаиспользовать DeepSpeed из学习率调度устройство(существоватьds_config.jsonдокументсередина指定)час, DeepSpeed встречасуществоватькаждый разтренироватьсяшаг(осуществлятьmodel_engine.step()час)调用调度устройствоизstep()метод。когда不использоватьDeepSpeedиз学习率调度устройствочас:
    • Если расписание предполагает выполнение каждого шага тренироваться, После этого пользователи смогут продолжить инициализацию. DeepSpeed engine при передаче планировщика в deepspeed.initialize, позволять DeepSpeed Управление, обновление и сохранение/восстановление.
    • Если расписание должно выполняться в любой другой интервал (например, период тренироваться),Тогда пользователь существующейинициализации не должен передавать расписание DeepSpeed, им надо управлять явно.

Модель КПП

использовать DeepSpeed в save_checkpoint и load_checkpoint API Чтобы обработать состояние тренироваться из сохранения и загрузки, необходимо указать два параметра для однозначной идентификации контрольной точки:

  • ckpt_dir: Контрольные точки будут сохранены в этом каталоге.
  • ckpt_id:существовать目录середина唯一标识检查点изидентификатор。существоватьподиз代码片段середина,Мы используем значение потерь в качестве идентификатора контрольной точки.
Язык кода:javascript
копировать
#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 вызывает этот метод, он зависает и ожидает синхронизации с другими процессами.

Конфигурация DeepSpeed

Вы можете использовать одну конфигурацию JSON документ для включения, отключения или настройки DeepSpeed функция, файл должен быть таким args.deepspeed_config указано. Ниже приведен пример конфигурации документа. Полный набор функций см. API Документация (https://www.deepspeed.ai/docs/config-json/) 。

Язык кода:javascript
копировать
{
  "train_batch_size": 8,
  "gradient_accumulation_steps": 1,
  "optimizer": {
    "type": "Adam",
    "params": {
      "lr": 0.00015
    }
  },
  "fp16": {
    "enabled": true
  },
  "zero_optimization": true
}

нагрузка DeepSpeed тренироваться

DeepSpeed Установитьточка входа deepspeed начать распределенныйтренироваться. Мы используем следующие предположения для иллюстрации DeepSpeed Пример использования:

  1. у вас есть DeepSpeed ​​интегрирован в вашу из Модель.
  2. client_entry.py датыиз Модель входного сценария.
  3. client args да argparse Параметр командной строки.
  4. ds_config.json да DeepSpeed из Конфигурацияпараметр.

Распределение ресурсов

DeepSpeed использовать与 OpenMPI и Horovod совместимый hostfile Конфигурация многоузловых вычислительных ресурсов. хост-файл это имя хоста (или SSH псевдонимы) список, который эти машины могут пройти без пароля SSH доступ, а также включает в себя slot счетчики, используемые для указания доступных GPU количество. Например:

Язык кода:javascript
копировать
worker-1 slots=4
worker-2 slots=4

В приведенном выше примере указаны два файла с именами worker-1 и worker-2 машины, каждая машина имеет четыре GPU 用于тренироваться。

Можетиспользовать --hostfile Спецификация параметров командной строки хост-файл. если не указано хост-файл, затем DeepSpeed буду искать /job/hostfile . Если не указано или не обнаружено хост-файл, затем DeepSpeed Запросить локальный компьютер GPU количество, чтобы обнаружить доступные местные slot количество.

Следующая команда находится в myhostfile Все доступные узлы, указанные в GPU Начать PyTorch тренироваться Работа:

Язык кода:javascript
копировать
deepspeed --hostfile=myhostfile <client_entry.py> <client args> \
  --deepspeed --deepspeed_config ds_config.json

Кроме того, Дип Спид позволяет вам Модельизраспределенныйтренироватьсяпределсуществовать Доступные узлыи GPU изна подмножестве。Эта функцияпроходить两个命令行параметр启用:--num_nodes и --num_gpus。Например,Вы можете ограничить распределенныйтренироваться только двумя узлами с помощью следующей команды:

Язык кода:javascript
копировать
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 Все доступные ресурсы, кроме:

Язык кода:javascript
копировать
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:

Язык кода:javascript
копировать
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 файл, который выглядит следующим образом:

Язык кода:javascript
копировать
NCCL_IB_DISABLE=1
NCCL_SOCKET_IFNAME=eth0

Затем DeepSpeed ​​обеспечит запуск каждого процесса, когда существует весь тренироваться из наборов этих переменных среды на каждом узле.

Совместимость MPI и AzureML

Как упоминалось выше, 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(..) 调用Заменить на:

Язык кода:javascript
копировать
deepspeed.init_distributed()

Конфигурация ресурса (один узел)

Если мы работаем только на одном узле (с несколькими графическими процессорами), DeepSpeed ​​не обязательно должен быть таким, как описано выше. хост-файл. Если пропуск не обнаружен хост-файл, затем DeepSpeed Воля Запросить локальный компьютер GPU 数量Приходить发现доступный Количество слотов。--include и --exclude Параметры такие же, как и обычные, но пользователь должен указать «localhost» в качестве имени хоста.

Также обратите внимание, что изда,CUDA_VISIBLE_DEVICES не может быть использован для DeepSpeed Чтобы контролировать, какие устройства следует использовать. Например, чтобы использовать только текущий узел из gpu1, пожалуйста, сделайте следующее:

Язык кода:javascript
копировать
deepspeed --include localhost:1 ...

0x2. Installation Details

  • Соответствует исходному тексту: https://www.deepspeed.ai/tutorials/advanced-install/

Установитьдеталь

проходить pip да Самый быстрый начатьиспользовать DeepSpeed Кстати, это приведет к установке последней версии DeepSpeed ​​не будет связан с конкретным PyTorch или CUDA Привязка версий. Дип Спид Содержит несколько C++/CUDA Расширения, которые мы обычно называем «ops». По умолчанию все это extensions/ops Воляиспользовать torch из JIT C++ Расширение JIT (https://pytorch.org/docs/stable/cpp_extension.html) , устройство нагрузки зависит от ninja Динамическое связывание во время выполнения.

Язык кода:javascript
копировать
pip install deepspeed

После завершения установки вы можете использовать ds_report или python -m deepspeed.env_report Представление команд DeepSpeed Отчет об окружающей среде, чтобы проверить вашу установку и посмотреть, с чем работает ваша машина. ops совместимый. Мы обнаружили это во время отладки DeepSpeed Этот отчет полезен при решении проблем с установкой или совместимостью.

Язык кода:javascript
копировать
ds_report

предварительно УстановитьDeepSpeedизOps

ПРИМЕЧАНИЕ. Перед предварительной компиляцией любого DeepSpeed из c++/cuda ops Раньше необходимо сначала установить PyTorch。нода,еслииспользовать ops по умолчанию JIT В скомпилированном режиме нет необходимости предварительно компилировать Установить.

Иногда мы обнаруживаем, что Некоторыйили все DeepSpeed C++/CUDA ops предварительно先Установить Вместоиспользовать JIT Путь компиляции полезен. Для поддержки предварительной установки мы ввели флаги среды создания для включения/выключения определенных ops изстроить。

Вы можете ввести настройки DS_BUILD_OPS Переменные среды: 1 Приходить指示насиз Установитьпрограмма(install.sh или pip install)пытаться Установитьвсе опа, например:

Язык кода:javascript
копировать
DS_BUILD_OPS=1 pip install deepspeed

DeepSpeed Устанавливать только с вашего совместимого компьютера. оп. Для получения более подробной информации о системе совместимости попробуйте приведенное выше описание. ds_report инструмент.

Если вы хотите установить только конкретный оп (напр. FusedLamb),ты Можетсуществовать Установитьчасиспользовать DS_BUILD переменные среды для переключения. Например, чтобы иметь возможность Установить только с помощью FusedLamb op из DeepSpeed,пожалуйстаиспользовать:

Язык кода:javascript
копировать
DS_BUILD_FUSED_LAMB=1 pip install deepspeed

доступный DS_BUILD Опции включают в себя:

  • DS_BUILD_OPS Переключить все ops
  • DS_BUILD_CPU_ADAM строить CPUAdam op
  • DS_BUILD_FUSED_ADAM строить FusedAdam op (from apex)
  • DS_BUILD_FUSED_LAMB строить FusedLamb op
  • DS_BUILD_SPARSE_ATTN строить sparse attention op
  • DS_BUILD_TRANSFORMER строить transformer op
  • DS_BUILD_TRANSFORMER_INFERENCE строить transformer-inference op
  • DS_BUILD_STOCHASTIC_TRANSFORMER строить stochastic transformer op
  • DS_BUILD_UTILS установить различные инструменты оптимизации
  • DS_BUILD_AIO строить异步 (NVMe) I/O op

Чтобы ускорить процесс сборки, вы можете скомпилировать параллельно следующими способами:

Язык кода:javascript
копировать
DS_BUILD_OPS=1 pip install deepspeed --global-option="build_ext" --global-option="-j8"

Это должно ускорить весь процесс сборки. 2-3 раз. ты можешь настроить -j Приходить指定существоватьстроить过程серединаиспользовать多少个 CPU основной. В этом примере установлено значение 8 ядро.

Вы также можете создавать двоичные файлы колесо и существуют одного и того же типа из GPU èТа же программная среда (CUDA Инструментарий, PyTorch, Python и т.д.) Из Установить его на нескольких машинах.

Язык кода:javascript
копировать
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,Затем вы можете напрямую установить его на нескольких машинах.,существуют наши из примера:

Язык кода:javascript
копировать
pip install dist/deepspeed-0.3.13+8cd046f-cp38-cp38-linux_x86_64.whl

源码Установить DeepSpeed

от GitHub клонировать DeepSpeed После склада вы можете передать pip существовать JIT режим Установить DeepSpeed ​​(см. ниже). Поскольку он не компилирует никаких C++/CUDA Исходный документ. Этот процесс установки должен быть завершен быстро.

Язык кода:javascript
копировать
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 Расширение.

Вы также можете изменить его в конкретном проекте, используя:

Язык кода:javascript
копировать
 TORCH_EXTENSIONS_DIR=./torch-extensions deepspeed ...

Выберите правильную архитектуру для построения

еслитысуществоватьбегать DeepSpeed Я столкнулся со следующей ошибкой:

Язык кода:javascript
копировать
RuntimeError: CUDA error: no kernel image is available for execution on the device

это означает, что расширение CUDA не сработало. Попробуйте использовать Карта build.

Сборка из исходного кода DeepSpeed Когда, Дип Спид Постараюсь поддерживать различные архитектуры, но существовать JIT режиме он поддерживает только видимую из архитектуры существующую постройку.

Вы можете пройти набор TORCH_CUDA_ARCH_LIST Переменные среды предназначены специально для ряда требуемых архитектур:

Язык кода:javascript
копировать
TORCH_CUDA_ARCH_LIST="6.1;7.5;8.6" pip install ...

Когда вы проектируете строительство с меньшими затратами, это также ускоряет строительство.

Это также рекомендуется для того, чтобы убедиться, что у вас правильная архитектура. По разным техническим причинам распределенныйиз PyTorch Двоичный документ не полностью поддерживает все архитектуры, пропуск совместимыго двоичного документа может привести к неполному использованию вычислительной мощности вашей карты. Для просмотра deepspeed Какие схемы включены в исходную сборку - Сохранить журнал и выполнить поиск -gencode параметр.

Полный NVIDIA GPU Список его вычислительных возможностей можно найти здесь. (https://developer.nvidia.com/cuda-gpus) оказаться.

Несоответствие версии CUDA

Если при существовании проекта вы столкнулись со следующей ошибкой:

Язык кода:javascript
копировать
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, установите следующую переменную среды:

Язык кода:javascript
копировать
DS_SKIP_CUDA_CHECK=1

Зависимости для конкретной функциональности

Некоторый функциональный создатель DeepSpeed ​​DeepSpeed ​​имеет конкретные зависимости в дополнение к общим зависимостям.

  • О каждой функции/операции из Python Зависимости пакетов, см. нас requirements Каталог (https://github.com/microsoft/DeepSpeed/tree/master/requirements).
  • Мы изо всех сил стараемся свести к минимуму зависимости на уровне системы, но некоторые Создайте специальные пакеты системного уровня. Пожалуйста, проверьте нас ds_report Вывод инструмента, чтобы узнать, отсутствует ли у вас данная функция или пакет системного уровня.

0x3. CIFAR-10 Tutorial

Если вы еще не прочитали Руководство по началу работы, мы рекомендуем сначала прочитать Руководство по началу работы (раздел 2 выше), а затем следовать этому пошаговому руководству.

существоватькнига Учебное пособие, мы будем CIFAR-10 Добавлено в модель DeepSpeed, небольшая модель классификации изображений.

Сначала мы покажем, как Запустить оригинальный CIFAR-10 Модель. Затем мы постепенно обеспечим существование этой Модели. DeepSpeed в эксплуатации.

Запустите оригинальный CIFAR-10

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) и предоставляется в виде подмодуля. Для загрузки выполните:

Язык кода:javascript
копировать
git clone git@github.com:microsoft/DeepSpeedExamples.git

Установить CIFAR-10 Модельиз requirements:

Язык кода:javascript
копировать
cd DeepSpeedExamples/training/cifar
pip install -r requirements.txt

бегать python cifar10_tutorial.py,Он будет существовать при первой загрузке набора данных тренироваться.

Язык кода:javascript
копировать
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() функция:

Язык кода:javascript
копировать
 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_engineoptimizer и trainloader,deepspeed.initialize из определяется следующим образом:

Язык кода:javascript
копировать
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)、argsparameters и trainset инициализация DeepSpeed:

Язык кода:javascript
копировать
 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 будут удалены:

Язык кода:javascript
копировать
#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)

тренироватьсяAPI

deepspeed.initialize Возврат из Модельда DeepSpeed Модельдвигатель,нас Воляиспользовать它Приходитьиспользовать forwardbackward и step API тренироваться Модель。

Язык кода:javascript
копировать
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⃣️размер、оптимизатор、Планировщик и другие параметры.

Язык кода:javascript
копировать
{
   "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
 }

Запуск модели CIFAR-10 с включенным DeepSpeed

хотетьиспользовать DeepSpeed Старттренироваться Применено DeepSpeed из CIFAR-10 Модель, выполните следующую команду, по умолчанию она будет использовать все обнаруженные GPU。

Язык кода:javascript
копировать
deepspeed cifar10_deepspeed.py --deepspeed_config ds_config.json

DeepSpeed ​​обычно печатает для пользователей более подробную информацию, включая настройки, статистику производительности и тенденции потерь.

Язык кода:javascript
копировать
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 может указать, сколько графических процессоров использовать.

0x4.

Эта статья была переведена Getting Started и Installation Details и CIFAR-10 Tutorial три Учебное пособие,Можетпозволятьновичок Установитьи Простойиспользоватьначальство DeepSpeed Приходить做Модельтренироваться。

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода