dstack으로 Qwen 배포하기
dstack으로 Qwen 배포하기
dstack은 Kubernetes와 Slurm의 오픈소스 대안으로, ML 팀이 주요 클라우드, 온프레미스 클러스터, 가속기에서 GPU 할당과 AI 워크로드 오케스트레이션을 단순화하도록 설계되었어요.
출처: 문서
본문
사전 준비
시작하기 전에 설치 지침을 따라 dstack을 설치하세요. dstack 서버가 켜지면 아래처럼 워크스페이스를 초기화할 수 있어요:
mkdir dstack-qwen-deploy && cd dstack-qwen-deploy
dstack init
Qwen3-30B-A3B 배포하기
~/.dstack/server/config.yml 파일에 설정된 클라우드 공급자가 제공하는 인스턴스에 Qwen3-30B-A3B를 배포하세요.
모델을 서빙하는 데 SgLang, TGI 또는 vLLM을 사용할 수 있어요. 여기서는 SgLang을 예시로 사용할게요.
serve-30b.dstack.yml이라는 이름의 서비스 설정 파일을 다음 내용으로 만드세요:
type: service
name: qwen3-30b-a3b
image: lmsysorg/sglang:latest
env:
- MODEL_ID=Qwen/Qwen3-30B-A3B
commands:
- python3 -m sglang.launch_server
--model-path $MODEL_ID
--port 8000
--trust-remote-code
port: 8000
model: Qwen/Qwen3-30B-A3B
resources:
gpu: 80GB:1
📝 참고: vLLM이나 TGI 같은 다른 추론 백엔드에 대해서는 dstack Inference Examples 문서를 방문하세요.
이제 서비스 설정을 적용하세요:
dstack apply -f serve-30b.dstack.yml
서비스 접근하기
서비스를 성공적으로 배포한 뒤에는 다음 방법으로 서비스 엔드포인트에 접근할 수 있어요.
CURL
<dstack 서버 URL>/proxy/services/<프로젝트 이름>/<run 이름>/에서 서비스 엔드포인트를 통해 접근하세요:
curl http://localhost:3000/proxy/services/main/qwen3-30b-a3b/v1/chat/completions \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer *** token>' \
-d '{
"model": "Qwen/Qwen3-30B-A3B",
"messages": [
{
"role": "user",
"content": "Compose a poem that explains the concept of recursion in programming."
}
]
}'
📝 참고: dstack 서버를 시작하면 관리자 토큰이 자동으로 생성돼요:
The admin token is "bbae0f28-d3dd-4820-bf61-8f4bb40815da"
The server is running at http://127.0.0.1:3000/
채팅 UI
<dstack 서버 URL>/projects/<프로젝트 이름>/models/<run 이름>/의 dstack 채팅 UI를 통해 접근하세요.
게이트웨이
개발용으로 서비스를 실행할 때는 게이트웨이를 설정할 필요가 없어요. 다만 다음 경우에는 게이트웨이가 필요해요:
- 자동 스케일링이나 속도 제한을 사용하려는 경우
- 엔드포인트에 HTTPS를 활성화하고 여러분의 도메인에 매핑하려는 경우
- 서비스가 WebSockets을 필요로 하는 경우
- 서비스가 경로 접두사(path prefix)와 함께 동작할 수 없는 경우
게이트웨이 설정과 사용에 대한 자세한 내용은 dstack 게이트웨이 문서를 참고하세요.
복제본 (Replicas) 및 자동 스케일링
serve-30b.dstack.yml에 추가 설정을 지정해서 서비스 자동 스케일링을 할 수 있어요.
replicas: min..max를 설정해 복제본의 최소·최대 수를 정의하세요scaling규칙을 구성해 언제 확장·축소할지 결정하세요
자동 스케일링이 활성화된 전체 설정 예시는 다음과 같아요:
type: service
name: qwen3-30b-a3b
image: lmsysorg/sglang:latest
env:
- MODEL_ID=Qwen/Qwen3-30B-A3B
commands:
- python3 -m sglang.launch_server
--model-path $MODEL_ID
--port 8000
--trust-remote-code
port: 8000
model: Qwen/Qwen3-30B-A3B
resources:
gpu: 80GB:1
# Minimum and maximum number of replicas
replicas: 1..4
scaling:
# Requests per seconds
metric: rps
# Target metric value
target: 10
📝 참고: 스케일링 속성은 게이트웨이가 설정되어 있어야 동작해요.
함께 보기 (See also)
- Fleets: Fleets를 사용해 클라우드 및 온프레미스 클러스터를 만들 수 있어요.
- Dev Environments: 프로덕션에 배포하기 전에 Dev Environments로 실험·테스트할 수 있어요.
- Tasks: Tasks를 사용해 단일 노드 또는 분산 훈련을 예약할 수 있어요.
- Services: Services를 사용해 모델을 보안이 강화되고 자동 스케일링되는 OpenAI 호환 엔드포인트로 배포할 수 있어요.
- Metrics: Metrics를 사용해 CLI나 UI를 통해 자동 추적되는 메트릭으로 성능을 모니터링할 수 있어요.