AMD MI300X에서 SGLang 사용하기
요즘 가장 잘 알려지지 않은 비밀은 새로운 AMD GPU가 추론에 엄청나게 비용 효율적이라는 점입니다. AMD MI300X 여러 대에서 매우 빠른 추론 서버를 실행하는 방법의 핵심 요약을 원하신다면 다음과 같습니다.
높은 처리량의 추론을 서비스하려는 경우, 추론 서버 선택지는 사실상 다음과 같습니다.
- TensorRT-LLM: GPU 배포를 위해 모델을 최적화하는 NVIDIA의 고성능 딥러닝 추론 라이브러리로, 낮은 지연 시간과 높은 처리량에 중점을 둡니다.
- vLLM: 대규모 언어 모델을 서비스하기 위한 범용 프레임워크로, 특히 Kubernetes 환경과 높은 처리량의 추론 시나리오에 적합합니다.
- SGLang: 오버헤드 없는 배치 스케줄링과 최적화된 어텐션 커널 같은 고급 기능을 갖춘, 효율적인 추론을 위해 설계된 프레임워크입니다.
제 경험상 SGLang이 실행하기 가장 쉽습니다. 다만 kserve로 Kubernetes 추론 서비스를 관리하고 있다면, 네트워크 효과와 종속성 때문에 결국 vLLM을 사용하게 될 가능성이 큽니다.
그래도 SGLang의 성능은 매우 뛰어납니다. FlashInfer 어텐션 커널을 사용한 오버헤드 없는 배치 스케줄링과 자동 KV 캐시 재사용을 위한 RadixAttention 등 성능 향상을 가져올 수 있는 최적화가 많이 있습니다. 또한 JSON 출력을 많이 처리하는 경우를 위해 SGLang에는 매우 빠른 제약 디코딩 알고리즘도 있습니다.
설정
시작하려면 최신 SGLang 이미지를 받으십시오.
docker pull rocm/sglang-staging:latest
컨테이너를 실행하십시오.
docker run -d \
-it \
--ipc=host \
--network=host \
--privileged \
--device=/dev/kfd \
--device=/dev/dri \
--device=/dev/mem \
--group-add render \
--security-opt seccomp=unconfined \
-v /home:/workspace \
rocm/sglang-staging:latest
그런 다음 컨테이너 ID를 확인하고 다음 명령을 실행하여 컨테이너 안의 셸에 접속하십시오.
docker exec -it $CONTAINER_ID bash
그런 다음 Hugging Face에 로그인하십시오.
huggingface-cli login
그런 다음 다음 명령을 실행하여 서버를 시작하십시오. DeepSeek-R1 모델을 사용하고 FP8로 양자화하겠습니다.
HSA_NO_SCRATCH_RECLAIM=1 python -m sglang.launch_server \
--model deepseek-ai/DeepSeek-R1 \
--tp 8 \
--quant fp8 \
--trust-remote-code \
--port 8000
그런 다음 다음 명령을 실행하여 클라이언트를 시작하십시오.
import openai
port = 8000
client = openai.Client(base_url=f"http://127.0.0.1:{port}/v1", api_key="None")
response = client.chat.completions.create(
model="deepseek-ai/DeepSeek-R1",
messages=[
{"role": "user", "content": "Who wrote the Simarillion?"},
],
temperature=0,
max_tokens=64,
)
print_highlight(f"Response: {response}")
성능을 더 높이기 위해 쓸 수 있는 다른 요령도 있습니다. 예를 들어 NUMA 밸런싱을 비활성화할 수 있습니다.
sudo sh -c 'echo 0 > /proc/sys/kernel/numa_balancing'
더 많은 튜닝 가이드는 AMD 문서를 참고하십시오.