ドキュメント

ARM64 と DGX Spark のコンテナ

ARM64 と DGX Spark のコンテナ

Dockerfile は Linux AMD64 と ARM64 向けにビルドします。どちらも既定は CPU のままで、ARM64 の CPU が NVIDIA GPU を意味するわけではありません。

ホスト 構成 検証
Linux AMD64 CPU compose.yaml CI のビルドとチェック。CPU 推論
Linux ARM64 CPU compose.yaml を ARM64 ホスト上でビルド ネイティブ ARM64 runner での CI ビルドとチェック。CPU 推論
Linux AMD64 NVIDIA compose.cuda.yaml を追加(CUDA 12.8) 基本的なクイックスタートで RTX 4070 Ti 上の CUDA 推論
DGX Spark compose.spark.yaml を追加(ARM64、CUDA 13.0)。compose.http.yaml は有無どちらでも可 CI が GPU なしで CUDA ライブラリをビルドして読み込む。Spark での推論は未報告
Apple Silicon CPU 上の Linux ARM64 コンテナ Apple Silicon を参照

ARM64 CPU

対象のホスト上でビルドします。Docker がネイティブのアーキテクチャを選びます:

docker compose run --build --rm laya

docker buildx build --platform linux/arm64 --load -t laya:arm64 . によるクロスビルドには、 ARM64 のビルダーか構成済みのエミュレーションが必要です。エミュレーションでのビルドは、ネイティブ の推論性能を示しません。

DGX Spark

Spark の Linux ホストを、対応する NVIDIA ドライバと NVIDIA Container Toolkit とともに使います。この override は ARM64、CUDA 13.0 の wheel、GPU 0 を選びます。 compose.cuda.yaml の代わりに使い、両方は使いません:

docker compose -f compose.yaml -f compose.spark.yaml run --build --rm laya

Spark で HTTP API を提供するには、compose.http.yaml を追加します。 HTTP サービス の設定がそのまま当てはまります:

docker compose -f compose.yaml -f compose.http.yaml -f compose.spark.yaml up --build laya-serve

LAYA_GPU_ID を設定すると別のデバイスを選べます。

TORCH_VERSION は CPU でも CUDA でも、すべてのビルドで PyTorch を固定します。Compose は LAYA_TORCH_VERSION を読み、直接ビルドは --build-arg TORCH_VERSION=2.14.0 --build-arg TORCH_INDEX=cu130 を取ります。どちらを変えるにも 再ビルドが必要です。実行時の環境変数では、インストール済みの wheel を置き換えられないからです。

PyTorch の ARM64 向け CUDA 13.0 ビルドは、cuSPARSELt 0.8.0(PyTorch 2.11)または 0.8.1 (PyTorch 2.14)に依存します。NVIDIA のこの 2 バージョンの AArch64 wheel は、WHEEL ファイルの 中で manylinux2014_sbsa を宣言しており、pip check がそれを拒否します。0.9.0 がそれを修正して います。ビルドは、そのライブラリが ELF64 AArch64 で読み込み可能かを確認し、その後そのタグと RECORD ハッシュを修正します。同じ不具合を持つ他のバージョンは、修理されずにビルドが失敗し、 pip check は引き続き実行されます。これは FastLaya での @TheIrritainer の互換性の指摘に従ったものです。

Spark の結果を報告する

CI には GPU がないので、Spark での推論には実機からの報告が必要です。Spark 上で次を実行し、その 出力を nvidia-smi、OS とドライバのバージョン、イメージのリビジョンとともに提出してください:

docker compose -f compose.yaml -f compose.spark.yaml run --build --rm laya python -c '
import json, platform, torch
from pathlib import Path
from laya import load
assert platform.machine() == "aarch64"
assert torch.cuda.is_available()
print(torch.__version__, torch.version.cuda, torch.cuda.get_device_name(0))
print(torch.cuda.get_device_capability(0), torch.cuda.get_arch_list())
agent = load("convaiinnovations/laya", device="cuda")
request = json.loads(Path("/opt/laya/examples/request.json").read_text())
result = agent.predict(request["state"], request["questions"])
assert next(agent.model.parameters()).device.type == "cuda", "fell back to CPU"
assert set(result["answers"]) == set(request["questions"])
print("CUDA inference passed", torch.cuda.max_memory_allocated())
'

実行する予定のチェックポイントごとに繰り返してください。ネイティブ ARM64 の CPU テストは、 Blackwell カーネルや GPU 推論への対応を裏付けるものではありません。Jetson のプラットフォーム 固有の CUDA スタックは、Spark の override の対象外です。

Apple Silicon

Apple GPU の高速化には、MPS を備えたネイティブ macOS の PyTorch が必要です。Docker Desktop は MPS バックエンドを持たない Linux コンテナを動かすので、コンテナは CPU を使います。Laya には すでに MPS のデバイスパスがあり、PR #51 と PR #109 が Docker の外での MPS の互換性と 性能を扱っています。