AMD GPU

AMD GPU

이 문서는 AMD GPU에서 SGLang을 실행하는 방법을 설명합니다. 문제가 발생하거나 질문이 있으면 이슈를 열어주세요.

출처: 문서

본문

시스템 구성 (System Configuration)

AMD GPU(예: MI300X)를 사용할 때 특정 시스템 수준 최적화가 안정적인 성능을 보장하는 데 도움이 됩니다. 여기서는 MI300X를 예로 듭니다. AMD는 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 Hub lmsysorg/sglang에서 사용할 수 있으며, rocm.Dockerfile에서 빌드됩니다.

아래 단계는 이미지를 빌드하고 사용하는 방법을 보여줍니다.

  1. 도커 이미지를 빌드합니다. 사전 빌드된 이미지를 사용한다면 이 단계를 건너뛰고 아래 단계에서 sglang_image를 사전 빌드된 이미지 이름으로 바꿀 수 있습니다.

    docker build -t sglang_image -f rocm.Dockerfile .
    
  2. 편리한 별칭(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.
  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
    
  4. 유용성을 검증하려면 다른 터미널에서 벤치마크를 실행하거나 다른 문서를 참조해 엔진에 요청을 보낼 수 있습니다.

    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_nvfp4Petit을 통해 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!을 표시하면 시작이 성공한 것입니다.

더 알아보기 (Learn more)