Contenedores ARM64 y DGX Spark
El Dockerfile compila para Linux AMD64 y ARM64. La CPU sigue siendo el valor por defecto en ambos; una CPU ARM64 no implica una GPU NVIDIA.
| Host | Configuración | Validación |
|---|---|---|
| CPU Linux AMD64 | compose.yaml |
Compilación y comprobaciones de CI; inferencia en CPU |
| CPU Linux ARM64 | compose.yaml, compilado en el host ARM64 |
Compilación y comprobaciones de CI en un runner ARM64 nativo; inferencia en CPU |
| NVIDIA Linux AMD64 | añade compose.cuda.yaml (CUDA 12.8) |
Inferencia CUDA en una RTX 4070 Ti con el inicio rápido base |
| DGX Spark | añade compose.spark.yaml (ARM64, CUDA 13.0), con o sin compose.http.yaml |
CI compila y carga las bibliotecas de CUDA sin GPU; inferencia de Spark todavía no informada |
| Apple Silicon | Contenedor Linux ARM64 en CPU | Consulta Apple Silicon |
CPU ARM64
Compila en el host de destino. Docker selecciona su arquitectura nativa:
docker compose run --build --rm laya
Las compilaciones cruzadas con docker buildx build --platform linux/arm64 --load -t laya:arm64 .
necesitan un builder ARM64 o emulación configurada. Una compilación emulada no muestra el
rendimiento de inferencia nativo.
DGX Spark
Usa el host Linux del Spark con su controlador NVIDIA compatible y el
NVIDIA Container Toolkit.
La anulación selecciona ARM64, ruedas CUDA 13.0 y la GPU 0. Úsala en lugar de compose.cuda.yaml,
no junto a ella:
docker compose -f compose.yaml -f compose.spark.yaml run --build --rm laya
Para servir la API HTTP en el Spark, añade compose.http.yaml. Los ajustes de
Servicio HTTP se aplican sin cambios:
docker compose -f compose.yaml -f compose.http.yaml -f compose.spark.yaml up --build laya-serve
Define LAYA_GPU_ID para seleccionar otro dispositivo.
TORCH_VERSION fija PyTorch para todas las compilaciones, tanto de CPU como de CUDA. Compose lee
LAYA_TORCH_VERSION; las compilaciones directas toman
--build-arg TORCH_VERSION=2.14.0 --build-arg TORCH_INDEX=cu130. Cambiar cualquiera de los dos
necesita una recompilación, porque una variable de entorno de runtime no puede reemplazar la rueda
instalada.
Las compilaciones de CUDA 13.0 de PyTorch para ARM64 dependen de cuSPARSELt 0.8.0 (PyTorch 2.11) o
0.8.1 (PyTorch 2.14). Las ruedas AArch64 de NVIDIA para esas dos versiones declaran
manylinux2014_sbsa dentro de su archivo WHEEL, que pip check rechaza; 0.9.0 lo corrige. La
compilación comprueba que la biblioteca es ELF64 AArch64 y que carga, y luego corrige esa etiqueta y
su hash de RECORD. Cualquier otra versión con el mismo defecto hace fallar la compilación en lugar
de recibir la reparación, y pip check sigue ejecutándose. Esto sigue el hallazgo de compatibilidad
de @TheIrritainer en FastLaya.
Informar de resultados de Spark
CI no tiene GPU, así que la inferencia de Spark necesita un informe desde hardware real. Ejecuta esto
en el Spark e incluye su salida junto con nvidia-smi, las versiones del sistema operativo y del
controlador, y la revisión de la imagen:
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())
'
Repite con cada checkpoint que pretendas ejecutar. Una prueba de CPU ARM64 nativa no establece soporte de kernels de Blackwell ni de inferencia en GPU. La pila CUDA específica de plataforma de Jetson no está cubierta por la anulación de Spark.
Apple Silicon
La aceleración por GPU de Apple necesita PyTorch nativo de macOS con MPS. Docker Desktop ejecuta un contenedor Linux, que no tiene backend MPS, así que el contenedor usa CPU. Laya ya tiene una ruta de dispositivo MPS, y PR #51 y PR #109 abordan la compatibilidad y el rendimiento de MPS fuera de Docker.