Documentation

Conteneurs ARM64 et DGX Spark

Le Dockerfile compile pour Linux AMD64 et ARM64. Le CPU reste la valeur par défaut sur les deux ; un CPU ARM64 n’implique pas un GPU NVIDIA.

Hôte Configuration Validation
CPU Linux AMD64 compose.yaml Build et vérifications CI ; inférence CPU
CPU Linux ARM64 compose.yaml, compilé sur l’hôte ARM64 Build et vérifications CI sur un runner ARM64 natif ; inférence CPU
NVIDIA Linux AMD64 ajouter compose.cuda.yaml (CUDA 12.8) Inférence CUDA sur une RTX 4070 Ti avec le démarrage rapide de base
DGX Spark ajouter compose.spark.yaml (ARM64, CUDA 13.0), avec ou sans compose.http.yaml La CI compile et charge les bibliothèques CUDA sans GPU ; inférence Spark pas encore rapportée
Apple Silicon conteneur Linux ARM64 sur CPU Voir Apple Silicon

CPU ARM64

Compile sur l’hôte cible. Docker sélectionne son architecture native :

docker compose run --build --rm laya

Les compilations croisées avec docker buildx build --platform linux/arm64 --load -t laya:arm64 . ont besoin d’un builder ARM64 ou d’une émulation configurée. Une compilation émulée ne montre pas les performances d’inférence natives.

DGX Spark

Utilise l’hôte Linux du Spark avec son pilote NVIDIA pris en charge et le NVIDIA Container Toolkit. L’override sélectionne ARM64, les roues CUDA 13.0 et GPU 0. Utilise-le à la place de compose.cuda.yaml, pas avec :

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

Pour servir l’API HTTP sur le Spark, ajoute compose.http.yaml. Les réglages de service HTTP s’appliquent sans changement :

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

Définis LAYA_GPU_ID pour sélectionner un autre appareil.

TORCH_VERSION épingle PyTorch pour chaque build, CPU comme CUDA. Compose lit LAYA_TORCH_VERSION ; les builds directs prennent --build-arg TORCH_VERSION=2.14.0 --build-arg TORCH_INDEX=cu130. Changer l’un ou l’autre exige une recompilation, car une variable d’environnement de runtime ne peut pas remplacer la roue installée.

Les builds CUDA 13.0 de PyTorch pour ARM64 dépendent de cuSPARSELt 0.8.0 (PyTorch 2.11) ou 0.8.1 (PyTorch 2.14). Les roues AArch64 de NVIDIA pour ces deux versions déclarent manylinux2014_sbsa dans leur fichier WHEEL, ce que pip check rejette ; 0.9.0 corrige cela. Le build vérifie que la bibliothèque est ELF64 AArch64 et se charge, puis corrige ce tag et son hash RECORD. Toute autre version avec le même défaut fait échouer le build au lieu de recevoir la réparation, et pip check tourne quand même. Cela suit la découverte de compatibilité de @TheIrritainer dans FastLaya.

Rapporter des résultats Spark

La CI n’a pas de GPU, donc l’inférence Spark a besoin d’un rapport depuis du matériel réel. Exécute ceci sur le Spark et joins sa sortie avec nvidia-smi, les versions de l’OS et du pilote, et la révision de l’image :

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

Répète avec chaque checkpoint que tu comptes exécuter. Un test CPU ARM64 natif n’établit pas le support des kernels Blackwell ni de l’inférence GPU. La pile CUDA spécifique à la plateforme Jetson n’est pas couverte par l’override Spark.

Apple Silicon

L’accélération GPU Apple nécessite PyTorch macOS natif avec MPS. Docker Desktop exécute un conteneur Linux, qui n’a pas de backend MPS, donc le conteneur utilise le CPU. Laya a déjà une voie d’appareil MPS, et PR #51 et PR #109 traitent la compatibilité et les performances MPS hors Docker.