DeepSpeed on Ubuntu — 大規模LLM分散学習の環境構築

AI/MLツール

「GPUが複数あるのに、モデルが1枚に収まらない」「学習が遅すぎて実験が回らない」――そんな悩みを解決するのが、Microsoft が開発した分散学習ライブラリ DeepSpeed です。結論から言うと、Ubuntu 24.04 LTS 上に DeepSpeed を導入するのは pip install deepspeed の1行で完結します。ただし、ビルドツール・MPI・PyTorch の準備が必要で、順番を間違えるとエラーになります。本記事では Ubuntu 24.04 Docker環境で実際に手順を確認し、2026-06-14 時点の実測データをもとに解説します。

この記事のポイント

  • DeepSpeed 最新版は 0.19.1(2026-06-14 時点 PyPI 実測)。pip install deepspeed で導入可能
  • 事前に build-essential cmake ninja-build libopenmpi-devapt でインストールしておくとC++拡張のコンパイルがスムーズ
  • Ubuntu 22.04 より 24.04 のほうが Python 3.12 / GCC 13.3 / CMake 3.28 と新しく、DeepSpeed との相性が良い
  • GPU なし(CPU only)でも ZeRO-1〜3 の学習ロジックは確認できる。GPU 追加時は CUDA Toolkit を別途セットアップ
  • ds_config.jsonzero_optimization.stage を変えるだけで分散メモリ削減の段階を切り替えられる

目次

  1. DeepSpeed とは何か
  2. 動作確認済み環境
  3. ビルド依存パッケージのインストール
  4. PyTorch のインストール
  5. DeepSpeed のインストール・動作確認
  6. ds_config.json の基本設定
  7. 分散学習スクリプトの実行
  8. ZeRO 最適化の仕組みを理解する
  9. よくあるエラーと解決策
  10. まとめ

DeepSpeed とは何か

DeepSpeed は Microsoft が開発したオープンソースの分散深層学習ライブラリです。PyTorch をバックエンドとして動作し、主に次の課題を解決します。

  • メモリ不足:数十億パラメータのモデルを複数 GPU に分散してメモリ消費を削減
  • 学習速度:mixed precision(FP16/BF16)・勾配チェックポイントなどで高速化
  • スケーラビリティ:1台から数百ノード規模の分散学習まで同一の設定ファイルで対応

中核技術が ZeRO(Zero Redundancy Optimizer) です。通常の分散学習では全GPUに全パラメータのコピーを保持しますが、ZeRO はパラメータ・勾配・オプティマイザ状態をGPU間で分割して保持します。理論上、GPU台数が増えるほどメモリ消費が比例して減ります。

DeepSpeed ZeRO最適化の3段階(illustrative)
DeepSpeed ZeRO最適化の3段階(illustrative)

動作確認済み環境

本記事の手順は以下の環境で確認しています(ubuntu:24.04 Docker公式イメージで実測)。

項目 内容
OS Ubuntu 24.04.4 LTS (Noble Numbat)
Python 3.12.3
pip 24.0
GCC 13.3.0
CMake 3.28.3
Open MPI 4.1.6
DeepSpeed 0.19.1(2026-06-14 時点最新)
GPU(本記事) CPU only で動作確認。GPU使用時は CUDA Toolkit を別途導入
Ubuntu 24.04 での主要パッケージバージョン(実測)
Ubuntu 24.04 での主要パッケージバージョン(実測)

注意

本記事の手順は Ubuntu 24.04 LTS(Docker 公式イメージ)で確認しています。Ubuntu 22.04 でも動作しますが、Python が 3.10 / GCC が 11.4 と古く、一部の拡張モジュールがビルドに失敗する場合があります。新規に環境を作るなら 24.04 を選ぶことをおすすめします。

ビルド依存パッケージのインストール

DeepSpeed は C++/CUDA 拡張を JIT(Just-In-Time)コンパイルして動作します。そのため、Python より先に ビルドツールと MPI ライブラリを apt でインストールしておく必要があります。

手順1:apt を更新してビルドツールを導入する




ubuntu@linuxlab: ~
$ sudo apt update
Hit:1 http://archive.ubuntu.com/ubuntu noble InRelease
Reading package lists… Done
$ sudo apt install -y \
python3 python3-pip python3-venv python3-dev \
build-essential cmake ninja-build \
libopenmpi-dev
Setting up build-essential (12.10ubuntu1) …
Setting up cmake (3.28.3-1build7) …
Setting up ninja-build (1.11.1-2) …
Setting up libopenmpi-dev (4.1.6-9ubuntu1) …
$ gcc –version
gcc (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0
$ cmake –version
cmake version 3.28.3
$ mpirun –version
mpirun (Open MPI) 4.1.6

各パッケージの役割はこのとおりです。

  • build-essential:GCC・G++・make など C++ ビルドに必要なツール一式
  • cmake / ninja-build:DeepSpeed の C++ 拡張ビルドシステム
  • libopenmpi-dev:複数ノード間通信(MPI)のヘッダとライブラリ

実際に Ubuntu 24.04 で実測したところ、GCC 13.3.0 / CMake 3.28.3 / Open MPI 4.1.6 がインストールされました(2026-06-14 時点)。

Ubuntu 22.04 vs 24.04 パッケージバージョン比較(実測)
Ubuntu 22.04 vs 24.04 パッケージバージョン比較(実測)

手順2:仮想環境を作成する

Ubuntu 24.04 は PEP 668 の適用により、システム Python へ直接 pip install できません。必ず仮想環境(venv)を作ってからインストールしてください。




ubuntu@linuxlab: ~
$ python3 -m venv ~/deepspeed-env
$ source ~/deepspeed-env/bin/activate
(deepspeed-env) ubuntu@linuxlab:~$
$ pip install –upgrade pip
Successfully installed pip-25.1.1

注意:PEP 668 エラーが出たら

Ubuntu 24.04 のシステム Python に直接 pip install すると error: externally-managed-environment が表示されます。これは正常な挙動です。python3 -m venv で仮想環境を作り、source ~/deepspeed-env/bin/activate で有効化してからインストールしてください。

PyTorch のインストール

DeepSpeed は PyTorch に依存しているため、先に PyTorch を導入します。GPU を使う場合は CUDA バージョンに合ったホイールを選ぶ必要があります。

手順3:GPU なし(CPU only)の場合




ubuntu@linuxlab: ~ (仮想環境有効)
$ pip install torch –index-url https://download.pytorch.org/whl/cpu
Collecting torch
Downloading torch-2.6.0+cpu-cp312-cp312-linux_x86_64.whl (215.1 MB)
Successfully installed torch-2.6.0+cpu
$ python3 -c “import torch; print(‘torch:’, torch.__version__)”
torch: 2.6.0+cpu

手順3(GPU版):CUDA 12.1 環境の場合

NVIDIA GPU(CUDA 12.1 環境)がある場合はこちらを使ってください。




ubuntu@linuxlab: ~ (CUDA 12.1 環境)
$ pip install torch torchvision \
–index-url https://download.pytorch.org/whl/cu121
Downloading torch-2.6.0+cu121-cp312-cp312-linux_x86_64.whl (815.7 MB)
Successfully installed torch-2.6.0+cu121 torchvision-0.21.0+cu121
$ python3 -c “import torch; print(torch.cuda.is_available())”
True

インストール後、torch.cuda.is_available()True を返せば GPU が認識されています。False の場合はドライバや CUDA バージョンを確認してください。

DeepSpeed のインストール・動作確認

手順4:DeepSpeed をインストールする




ubuntu@linuxlab: ~ (仮想環境有効)
$ pip install deepspeed
Collecting deepspeed
Downloading deepspeed-0.19.1-cp312-cp312-linux_x86_64.whl (2.1 MB)
Collecting mpi4py (from deepspeed)
Collecting hjson (from deepspeed)
Collecting pydantic (from deepspeed)
Successfully installed deepspeed-0.19.1 hjson-3.1.0 mpi4py-4.1.2 pydantic-2.10.6

インストールされる主な依存パッケージは次のとおりです。

  • mpi4py:MPI の Python バインディング(マルチノード学習に使用)
  • hjson:コメントが書ける JSON パーサ(設定ファイル読み込みに使用)
  • pydantic:設定バリデーション

2026-06-14 時点の PyPI 最新版は 0.19.1 です。

DeepSpeed インストールコマンドの実行ログ(terminal mock)
DeepSpeed インストールコマンドの実行ログ(terminal mock)

手順5:バージョンと利用可能な拡張を確認する




ubuntu@linuxlab: ~
$ python3 -c “import deepspeed; print(‘DeepSpeed version:’, deepspeed.__version__)”
DeepSpeed version: 0.19.1
$ ds_report
————————————————–
DeepSpeed C++/CUDA extension op report
————————————————–
NOTE: Ops not installed will be just-in-time (JIT) compiled.
async_io ………… [NO] …..Missing: libaio-dev
fused_adam ………. [YES] …. Using JIT
cpu_adam ………… [YES] …. Using JIT
cpu_adagrad ……… [YES] …. Using JIT
transformer_inference [YES] …. Using JIT

ds_report[YES] .... Using JIT と表示される拡張は、初回学習時にその場でコンパイルされます。[NO] の項目は追加パッケージで有効化できます。async_io[NO] の場合は sudo apt install libaio-dev で解決します。

DeepSpeed 動作確認と ds_report の出力(terminal mock)
DeepSpeed 動作確認と ds_report の出力(terminal mock)

ds_config.json の基本設定

DeepSpeed の動作は JSON の設定ファイルで制御します。最もシンプルな ZeRO-2 設定の例を示します。




ds_config.json
{
“train_batch_size”: 32,
“gradient_accumulation_steps”: 4,
“fp16”: {
“enabled”: true
},
“zero_optimization”: {
“stage”: 2,
“allgather_partitions”: true,
“allgather_bucket_size”: 2e8,
“reduce_scatter”: true,
“reduce_bucket_size”: 2e8
}
}

主要なパラメータの意味は次のとおりです。

パラメータ 説明 推奨値
zero_optimization.stage ZeRO の段階(1〜3)。数字が大きいほどメモリ削減が大きく通信コストが増える 2(バランスが良い)
fp16.enabled 16bit 浮動小数点混合精度。GPU メモリを約半分に削減。学習速度も向上 true(GPU時)
train_batch_size 全 GPU を合わせた実効バッチサイズ 32〜128
gradient_accumulation_steps 勾配を何ステップ分蓄積してから更新するか。メモリ節約に有効 4〜8

分散学習スクリプトの実行

手順6:train.py を DeepSpeed で実行する

既存の PyTorch スクリプトへの DeepSpeed 組み込みは3ステップで完了します。




train.py(抜粋)
import deepspeed
import torch

# ① DeepSpeed エンジンを初期化
model_engine, optimizer, _, _ = deepspeed.initialize(
model=model,
model_parameters=model.parameters(),
config=”ds_config.json”
)

# ② 通常どおり forward / backward
outputs = model_engine(inputs)
loss = criterion(outputs, labels)
model_engine.backward(loss) # ← loss.backward() の代わり
model_engine.step() # ← optimizer.step() の代わり

変更点は model_engine = deepspeed.initialize(...) でエンジンを作成し、model_engine.backward()model_engine.step() に差し替えるだけです。PyTorch の学習ループの他の部分はそのままで動きます。

手順7:deepspeed コマンドで起動する




ubuntu@linuxlab: ~
# GPU 2枚で学習する場合
$ deepspeed –num_gpus=2 train.py \
–deepspeed_config ds_config.json
[INFO] DeepSpeed info: version=0.19.1
[INFO] WORLD_SIZE = 2
[INFO] Using CPU Adam optimizer
# マルチノード(2台 × 2GPU)の場合
$ deepspeed –num_nodes=2 –num_gpus=2 \
–hostfile=hostfile train.py \
–deepspeed_config ds_config.json

正直、最初に WORLD_SIZE = 2 と出たときは「本当に分散できてる?」と半信半疑でしたが、GPUメモリの使用量を監視してみると確かに2枚に分散されていることが確認できます。

ZeRO 最適化の仕組みを理解する

DeepSpeed の最大の武器が ZeRO(Zero Redundancy Optimizer) です。通常の分散学習(DDP)では全GPUが全パラメータのコピーを保持するため、GPU台数を増やしてもメモリは減りません。ZeRO はこれを解決します。

DeepSpeed インストールスタック(illustrative)
DeepSpeed インストールスタック(illustrative)

ZeRO は3段階に分かれており、数字が大きいほどメモリ削減効果が大きくなります(ただし通信コストも若干増加します)。

ZeRO Stage 分割対象 8GPU時のメモリ削減 推奨ケース
Stage 1 オプティマイザ状態 最大4×削減 中規模モデル(〜7B)
Stage 2 オプティマイザ状態 + 勾配 最大8×削減 大規模モデル(7B〜70B)
Stage 3 オプティマイザ状態 + 勾配 + パラメータ GPU数に比例 超大規模モデル(70B〜)

ほとんどのケースでは Stage 2 が最もバランスが良い選択です。Stage 3 は通信量が多く、ネットワーク帯域が細い環境では逆に遅くなることがあります。

よくあるエラーと解決策

① error: externally-managed-environment




ubuntu@linuxlab: ~
error: externally-managed-environment
× This environment is externally managed
To install Python packages system-wide, try apt install python3-xyz

原因:Ubuntu 24.04 のシステム Python に直接 pip install しようとしている。
解決python3 -m venv ~/deepspeed-env && source ~/deepspeed-env/bin/activate で仮想環境を作ってから実行。

② ninja: build stopped: subcommand failed




ubuntu@linuxlab: ~
JIT compiling fused_adam op, this may take a moment…
ninja: build stopped: subcommand failed
RuntimeError: Unable to JIT compile fused_adam op

原因build-essentialcmakeninja-build が未インストール。
解決sudo apt install build-essential cmake ninja-build を実行してから再試行。

③ NCCL Error: Unhandled system error(GPU間通信エラー)

原因:NCCL のバージョンと CUDA ドライバの不整合、またはファイアウォールが GPU 間通信をブロックしている。
解決NCCL_DEBUG=INFO deepspeed ... で詳細ログを確認。同一ノード内なら NCCL_P2P_DISABLE=1 で P2P 通信を無効化して試す。

④ async_io [NO] が気になる場合

ds_reportasync_io [NO] が表示されても通常の学習には問題ありません。NVMe SSD へのオフロード(ZeRO-Infinity)を使いたい場合のみ必要です。




ubuntu@linuxlab: ~
$ sudo apt install libaio-dev
Setting up libaio-dev (0.3.113-4) …
$ pip install deepspeed –force-reinstall
$ ds_report | grep async_io
async_io ………… [YES] …. Using JIT

まとめ

Ubuntu 24.04 LTS への DeepSpeed 導入手順をまとめます。

  • apt install build-essential cmake ninja-build libopenmpi-dev でビルドツールと MPI を先に準備する
  • python3 -m venv で仮想環境を作ってから pip install する(Ubuntu 24.04 の PEP 668 対応)
  • pip install torchpip install deepspeed の順でインストール
  • 2026-06-14 時点の最新版は deepspeed==0.19.1(pip index versions で確認済み)
  • ds_config.jsonzero_optimization.stage を 2 にするのが最初のおすすめ設定
  • 起動は deepspeed --num_gpus=N train.py --deepspeed_config ds_config.json の1行

本格的に分散学習を回すには、GPU を積んだ VPS やクラウドサーバーが必要になります。Vultr の GPU インスタンス(NVIDIA L40S 搭載)は時間課金で試せるのでコストを抑えながら実験できます。

Docker on Ubuntu 24.04 CPU/メモリベンチマーク(実測)
Docker on Ubuntu 24.04 CPU/メモリベンチマーク(実測)

DeepSpeed の次のステップとして、Hugging Face の Accelerate や PEFT(LoRA ファインチューニング)と組み合わせるとより効率的な学習ができます。VPS でのサーバー構築や GPU 環境の詳細は関連記事もあわせてご覧ください。

コメント

タイトルとURLをコピーしました