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 러너에서의 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을
사용하십시오. 오버라이드는 ARM64, CUDA 13.0 휠, 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을 받습니다. 둘 중 하나를 바꾸면
다시 빌드해야 합니다. 런타임 환경 변수는 설치된 휠을 대체할 수 없기 때문입니다.
ARM64용 PyTorch CUDA 13.0 빌드는 cuSPARSELt 0.8.0(PyTorch 2.11) 또는 0.8.1(PyTorch 2.14)에
의존합니다. 그 두 버전의 NVIDIA AArch64 휠은 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 오버라이드가 커버하지 않습니다.
Apple Silicon
Apple GPU 가속은 MPS가 있는 네이티브 macOS PyTorch가 필요합니다. Docker Desktop은 MPS 백엔드가 없는 Linux 컨테이너를 실행하므로 컨테이너는 CPU를 씁니다. Laya에는 이미 MPS 장치 경로가 있고, PR #51과 PR #109가 Docker 밖에서의 MPS 호환성과 성능을 다룹니다.