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를 통해 자동 추적되는 메트릭으로 성능을 모니터링할 수 있어요.

더 알아보기 (Learn more)