AMD GPU
AMD GPU
이 문서는 AMD GPU에서 SGLang을 실행하는 방법을 설명합니다. 문제가 발생하거나 질문이 있으면 이슈를 열어주세요.
출처: 문서
본문
시스템 구성 (System Configuration)
AMD GPU(예: MI300X)를 사용할 때 특정 시스템 수준 최적화가 안정적인 성능을 보장하는 데 도움이 됩니다. 여기서는 MI300X를 예로 듭니다. AMD는 MI300X 최적화 및 시스템 튜닝에 대한 공식 문서를 제공합니다:
- AMD MI300X Tuning Guides
- LLM inference performance validation on AMD Instinct MI300X
- AMD Instinct MI300X System Optimization
- AMD Instinct MI300X Workload Optimization
- Supercharge DeepSeek-R1 Inference on AMD Instinct MI300X
참고: 시스템을 최대한 활용하려면 이 문서와 가이드를 전체적으로 읽을 것을 강력히 권장합니다.
SGLang을 위해 확인하거나 활성화해야 할 몇 가지 핵심 설정은 다음과 같습니다:
GRUB 설정 업데이트 (Update GRUB Settings)
/etc/default/grub에서 GRUB_CMDLINE_LINUX에 다음을 추가하세요:
pci=realloc=off iommu=pt
이후 sudo update-grub(또는 배포판에 해당하는 명령)을 실행하고 재부팅하세요.
NUMA 자동 밸런싱 비활성화 (Disable NUMA Auto-Balancing)
sudo sh -c 'echo 0 > /proc/sys/kernel/numa_balancing'
이 변경을 자동화하거나 검증하려면 이 유용한 스크립트를 사용할 수 있습니다.
다시 말하지만, 시스템이 권장 구성을 사용하고 있는지 확인하려면 전체 문서를 살펴보세요.
SGLang 설치 (Install SGLang)
아래 방법 중 하나로 SGLang을 설치할 수 있습니다.
소스에서 설치 (Install from Source)
# Use the last release branch
git clone -b v0.5.18 https://github.com/sgl-project/sglang.git
cd sglang
# Compile sgl-kernel
pip install --upgrade pip
cd python/sglang/kernels/aot
python setup_rocm.py install
# Install sglang python package along with diffusion support
cd ../../../..
rm -rf python/pyproject.toml && mv python/pyproject_other.toml python/pyproject.toml
pip install -e "python[all_hip]"
Docker로 설치 (권장) (Install Using Docker (Recommended))
도커 이미지는 Docker Hub lmsysorg/sglang에서 사용할 수 있으며, rocm.Dockerfile에서 빌드됩니다.
아래 단계는 이미지를 빌드하고 사용하는 방법을 보여줍니다.
-
도커 이미지를 빌드합니다. 사전 빌드된 이미지를 사용한다면 이 단계를 건너뛰고 아래 단계에서
sglang_image를 사전 빌드된 이미지 이름으로 바꿀 수 있습니다.docker build -t sglang_image -f rocm.Dockerfile . -
편리한 별칭(alias)을 만듭니다.
alias drun='docker run -it --rm --network=host --privileged --device=/dev/kfd --device=/dev/dri \ --ipc=host --shm-size 16G --group-add video --cap-add=SYS_PTRACE \ --security-opt seccomp=unconfined \ -v $HOME/dockerx:/dockerx \ -v /data:/data'RDMA를 사용한다면 다음에 유의하세요:
--network host와--privileged는 RDMA에 필요합니다. RDMA가 필요 없다면 제거할 수 있습니다.- RoCE를 사용한다면
NCCL_IB_GID_INDEX를 설정해야 할 수 있습니다. 예:export NCCL_IB_GID_INDEX=3.
-
서버를 시작합니다.
참고: 아래
<secret>을 huggingface hub token으로 바꾸세요.drun -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ sglang_image \ python3 -m sglang.launch_server \ --model-path NousResearch/Meta-Llama-3.1-8B \ --host 0.0.0.0 \ --port 30000 -
유용성을 검증하려면 다른 터미널에서 벤치마크를 실행하거나 다른 문서를 참조해 엔진에 요청을 보낼 수 있습니다.
drun sglang_image \ python3 -m sglang.bench_serving \ --backend sglang \ --dataset-name random \ --num-prompts 4000 \ --random-input 128 \ --random-output 128
AMD 시스템이 제대로 구성되고 SGLang이 설치되면 AMD 하드웨어를 완전히 활용해 SGLang의 머신러닝 기능을 구동할 수 있습니다.
AMD GPU에서의 양자화 (Quantization on AMD GPUs)
양자화 문서에 완전한 호환성 매트릭스가 있습니다. 요약하면: FP8, AWQ, MXFP4, W8A8, GPTQ, compressed-tensors, Quark, 그리고 petit_nvfp4 (Petit을 통한 ROCm의 NVFP4) 모두 AMD에서 동작합니다. Marlin 또는 NVIDIA 전용 커널에 의존하는 방법(awq_marlin, gptq_marlin, gguf, modelopt_fp8, modelopt_fp4)은 동작하지 않습니다.
몇 가지 유의할 점:
- FP8은 Aiter 또는 Triton을 통해 동작합니다. DeepSeek-V3/R1 같은 사전 양자화된 FP8 모델은 바로 동작합니다.
- AWQ는 AMD에서 Triton 디양자화 커널을 사용합니다. 더 빠른 Marlin 경로는 사용할 수 없습니다.
- MXFP4는 CDNA3/CDNA4와
SGLANG_USE_AITER=1이 필요합니다. petit_nvfp4는 Petit을 통해 MI250/MI300X에서 NVFP4 모델(예: Llama 3.3 70B FP4)을 활성화합니다.pip install petit-kernel로 설치하세요. 사전 양자화된 NVFP4 모델을 로드할 때는--quantization플래그가 필요 없습니다.quark_int4fp8_moe는 CDNA3/CDNA4에서 MoE 모델을 위한 AMD 전용 온라인 양자화 방법입니다.
이 백엔드 중 몇몇은 Aiter로 가속됩니다. 다음과 같이 활성화하세요:
export SGLANG_USE_AITER=1
예시 — AWQ 모델 서빙:
python3 -m sglang.launch_server \
--model-path hugging-quants/Mixtral-8x7B-Instruct-v0.1-AWQ-INT4 \
--trust-remote-code \
--port 30000 --host 0.0.0.0
예시 — FP8 온라인 양자화:
python3 -m sglang.launch_server \
--model-path meta-llama/Meta-Llama-3.1-8B-Instruct \
--quantization fp8 \
--port 30000 --host 0.0.0.0
예시 (Examples)
DeepSeek-V3 실행 (Running DeepSeek-V3)
DeepSeek-V3를 실행할 때의 유일한 차이는 서버를 시작하는 방식입니다. 예시 명령어는 다음과 같습니다:
drun -p 30000:30000 \
-v ~/.cache/huggingface:/root/.cache/huggingface \
--ipc=host \
--env "HF_TOKEN=<secret>" \
sglang_image \
python3 -m sglang.launch_server \
--model-path deepseek-ai/DeepSeek-V3 \ # <- here
--tp 8 \
--trust-remote-code \
--host 0.0.0.0 \
--port 30000
단일 NDv5 MI300X VM에서 DeepSeek-R1 실행도 좋은 참고 자료가 될 수 있습니다.
Llama3.1 실행 (Running Llama3.1)
Llama3.1 실행은 DeepSeek-V3 실행과 거의 동일합니다. 유일한 차이는 서버를 시작할 때 지정하는 모델입니다. 다음 예시 명령어로 확인할 수 있습니다:
drun -p 30000:30000 \
-v ~/.cache/huggingface:/root/.cache/huggingface \
--ipc=host \
--env "HF_TOKEN=<secret>" \
sglang_image \
python3 -m sglang.launch_server \
--model-path meta-llama/Meta-Llama-3.1-8B-Instruct \ # <- here
--tp 8 \
--trust-remote-code \
--host 0.0.0.0 \
--port 30000
워밍업 단계 (Warmup Step)
서버가 The server is fired up and ready to roll!을 표시하면 시작이 성공한 것입니다.