Документация

Контейнеры ARM64 и DGX Spark

Dockerfile собирается для Linux AMD64 и ARM64. В обоих случаях по умолчанию используется CPU; CPU ARM64 не подразумевает наличие GPU NVIDIA.

Хост Конфигурация Проверка
Linux AMD64 CPU compose.yaml Сборка и проверки CI; инференс на CPU
Linux ARM64 CPU compose.yaml, собранный на хосте ARM64 Сборка и проверки CI на нативном раннере ARM64; инференс на CPU
Linux AMD64 NVIDIA добавьте compose.cuda.yaml (CUDA 12.8) Инференс CUDA на RTX 4070 Ti с базовым быстрым стартом
DGX Spark добавьте compose.spark.yaml (ARM64, CUDA 13.0), с compose.http.yaml или без него CI собирает и загружает библиотеки CUDA без GPU; инференс на Spark пока не подтверждён
Apple Silicon Контейнер Linux ARM64 на CPU См. Apple Silicon

ARM64 CPU

Соберите на целевом хосте. Docker выбирает свою нативную архитектуру:

docker compose run --build --rm laya

Кросс-сборки с docker buildx build --platform linux/arm64 --load -t laya:arm64 . требуют сборщика ARM64 или настроенной эмуляции. Эмулированная сборка не показывает нативную производительность инференса.

DGX Spark

Используйте Linux-хост Spark с поддерживаемым драйвером NVIDIA и NVIDIA Container Toolkit. Оверрайд выбирает ARM64, колёса CUDA 13.0 и GPU 0. Используйте его вместо compose.cuda.yaml, а не вместе с ним:

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

Чтобы обслуживать HTTP API на Spark, добавьте 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 фиксирует версию PyTorch для каждой сборки, как CPU, так и CUDA. Compose читает LAYA_TORCH_VERSION; прямые сборки принимают --build-arg TORCH_VERSION=2.14.0 --build-arg TORCH_INDEX=cu130. Чтобы изменить любое из двух, нужна пересборка, потому что переменная окружения времени выполнения не может заменить установленное колесо.

Сборки PyTorch для CUDA 13.0 на ARM64 зависят от cuSPARSELt 0.8.0 (PyTorch 2.11) или 0.8.1 (PyTorch 2.14). Колёса NVIDIA AArch64 для этих двух версий объявляют manylinux2014_sbsa в своём файле WHEEL, что pip check отклоняет; 0.9.0 это исправляет. Сборка проверяет, что библиотека имеет формат ELF64 AArch64 и загружается, а затем исправляет этот тег и его хеш в RECORD. Любая другая версия с тем же дефектом приводит к сбою сборки вместо получения исправления, а pip check всё равно запускается. Это следует находке о совместимости от @TheIrritainer в FastLaya.

Отчёт о результатах Spark

В CI нет GPU, поэтому инференс на Spark требует отчёта с реального оборудования. Запустите это на Spark и приложите его вывод вместе с nvidia-smi, версиями ОС и драйвера, и ревизией образа:

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())
'

Повторите для каждого чекпойнта, который вы собираетесь запускать. Нативный тест CPU ARM64 не устанавливает поддержку ядер Blackwell или инференса на GPU. Специфичный для платформы стек CUDA у Jetson не покрывается оверрайдом Spark.

Apple Silicon

Ускорение на GPU Apple требует нативного PyTorch для macOS с MPS. Docker Desktop запускает Linux-контейнер, в котором нет бэкенда MPS, поэтому контейнер использует CPU. У Laya уже есть путь для устройства MPS, и PR #51 и PR #109 решают проблемы совместимости и производительности MPS вне Docker.