SkyPilot로 Qwen 배포하기

SkyPilot로 Qwen 배포하기

SkyPilot은 어떤 클라우드에서든 LLM, AI, 배치 작업을 실행하기 위한 프레임워크로, 최대한의 비용 절감, 최고의 GPU 가용성, 그리고 관리형 실행을 제공해요.

출처: 문서

본문

⚠️ 주의: 이 페이지는 Qwen3 기준으로 업데이트 예정이에요.

SkyPilot이란?

SkyPilot은 모든 클라우드에서 LLM, AI, 배치 작업을 실행하기 위한 프레임워크로, 최대 비용 절감, 최고의 GPU 가용성, 관리형 실행을 제공해요. 주요 특징은 다음과 같아요:

  • 여러 리전과 클라우드에 걸친 다중 리소스 풀을 활용해 최고의 GPU 가용성을 확보해요.
  • 최소 비용만 지불해요 — SkyPilot이 리전과 클라우드 전반에서 가장 저렴한 리소스를 골라 줘요. 관리형 솔루션 마크업이 없어요.
  • 서로 다른 위치와 가속기에 걸쳐 여러 복제본으로 확장하고, 모두 단일 엔드포인트로 서빙해요.
  • 모든 것이 여러분의 클라우드 계정 안에 유지돼요 (나의 VM과 버킷).
  • 완전히 비공개예요 — 다른 사람이 여러분의 채팅 기록을 보지 못해요.

SkyPilot 설치

SkyPilot 설치 지침을 따르는 것을 권장해요. 여기서는 pip을 사용한 간단한 설치 예시를 보여드릴게요.

# You can use any of the following clouds that you have access to:
# aws, gcp, azure, oci, lamabda, runpod, fluidstack, paperspace,
# cudo, ibm, scp, vsphere, kubernetes
pip install "skypilot-nightly[aws,gcp]"

그 다음 다음 명령으로 클라우드 접근을 확인해야 해요:

sky check

자세한 내용은 공식 문서를 확인하고 클라우드 계정이 올바르게 설정되었는지 살펴보세요.

또는 SkyPilot 마스터 브랜치가 자동으로 클론되는 공식 docker 이미지를 사용할 수도 있어요:

# NOTE: '--platform linux/amd64' is needed for Apple Silicon Macs
docker run --platform linux/amd64 \
  -td --rm --name sky \
  -v "$HOME/.sky:/root/.sky:rw" \
  -v "$HOME/.aws:/root/.aws:rw" \
  -v "$HOME/.config/gcloud:/root/.config/gcloud:rw" \
  berkeleyskypilot/skypilot-nightly

docker exec -it sky /bin/bash

SkyPilot로 Qwen2.5-72B-Instruct 실행하기

vLLM 기반의 OpenAI 호환 엔드포인트로 serve-72b.yaml에 지정된 목록 중 사용 가능한 GPU로 단일 인스턴스에서 Qwen2.5-72B-Instruct 서빙을 시작하세요:

sky launch -c qwen serve-72b.yaml

실행 전에 YAML 파일에서 Qwen/Qwen2-72B-Instruct를 Qwen/Qwen2.5-72B-Instruct로 바꿔야 한다는 점을 확인하세요.

완성 요청을 엔드포인트로 보내 보세요:

IP=$(sky status --ip qwen)

curl -L http://$IP:8000/v1/completions \
   -H "Content-Type: application/json" \
   -d '{
      "model": "Qwen/Qwen2.5-72B-Instruct",
      "prompt": "My favorite food is",
      "max_tokens": 512
}' | jq -r '.choices[0].text'

채팅 완성 요청을 보내 보세요:

curl -L http://$IP:8000/v1/chat/completions \
   -H "Content-Type: application/json" \
   -d '{
      "model": "Qwen/Qwen2.5-72B-Instruct",
      "messages": [
      {
         "role": "system",
         "content": "You are Qwen, created by Alibaba Cloud. You are a helpful and honest chat expert."
      },
      {
         "role": "user",
         "content": "What is the best food?"
      }
      ],
      "max_tokens": 512
}' | jq -r '.choices[0].message.content'

SkyPilot Serve로 서비스 확장하기

SkyPilot 위에 구축된 서빙 라이브러리인 SkyPilot Serve를 사용하면 Qwen 서비스 확장이 아래처럼 간단해져요:

sky serve up -n qwen ./serve-72b.yaml

실행 전에 YAML 파일에서 Qwen/Qwen2-72B-Instruct를 Qwen/Qwen2.5-72B-Instruct로 바꿔야 한다는 점을 확인하세요.

이렇게 하면 가장 저렴한 위치와 가속기에서 여러 복제본으로 서비스가 시작돼요. SkyServe가 복제본을 자동으로 관리하고, 상태를 모니터링하며, 부하에 따라 자동 스케일링하고, 필요할 때 재시작해 줘요.

단일 엔드포인트가 반환되고, 그 엔드포인트로 보내진 모든 요청은 준비된 복제본으로 라우팅돼요.

서비스 상태를 확인하려면 다음을 실행하세요:

sky serve status qwen

잠시 후 다음 출력을 볼 수 있을 거예요:

Services
NAME        VERSION  UPTIME  STATUS        REPLICAS  ENDPOINT
Qwen  1        -       READY         2/2       3.85.107.228:30002

Service Replicas
SERVICE_NAME  ID  VERSION  IP  LAUNCHED    RESOURCES                   STATUS REGION
Qwen          1   1        -   2 mins ago  1x Azure({'A100-80GB': 8}) READY  eastus
Qwen          2   1        -   2 mins ago  1x GCP({'L4': 8})          READY  us-east4-a

보시다시피 서비스가 이제 2개의 복제본으로 운영되며, 하나는 Azure, 하나는 GCP에 있어요. 가속기 유형은 클라우드에서 가장 저렴한 것을 선택하도록 되어 있어요. 즉, 비용을 최소화하면서 서비스 가용성을 최대화하는 방식이에요.

모델에 접근하려면 curl -L 명령(-L은 리다이렉트를 따라감)을 사용해 엔드포인트로 요청을 보내요:

ENDPOINT=$(sky serve status --endpoint qwen)

curl -L http://$ENDPOINT/v1/chat/completions \
   -H "Content-Type: application/json" \
   -d '{
      "model": "Qwen/Qwen2.5-72B-Instruct",
      "messages": [
      {
         "role": "system",
         "content": "You are Qwen, created by Alibaba Cloud. You are a helpful and honest code assistant expert in Python."
      },
      {
         "role": "user",
         "content": "Show me the python code for quick sorting a list of integers."
      }
      ],
      "max_tokens": 512
}' | jq -r '.choices[0].message.content'

Chat GUI로 Qwen2.5 접근하기

위에서 실행한 엔드포인트에 FastChat GUI 서버를 연결해 GUI로 Qwen2.5 서비스에 접근하는 것도 가능해요 (gui.yaml 참고).

채팅 웹 UI를 시작하세요:

sky launch -c qwen-gui ./gui.yaml --env ENDPOINT=$(sky serve status --endpoint qwen)

실행 전에 YAML 파일에서 Qwen/Qwen1.5-72B-Chat를 Qwen/Qwen2.5-72B-Instruct로 바꿔야 한다는 점을 확인하세요.

그 다음 반환된 gradio 링크에서 GUI에 접근할 수 있어요:

| INFO | stdout | Running on public URL: https://6141e84201ce0bb4ed.gradio.live

다른 temperature와 top_p 값을 사용하면 더 나은 결과를 얻을 수도 있다는 점을 참고하세요.

요약

SkyPilot을 사용하면 어떤 클라우드에서든 Qwen2.5를 쉽게 배포할 수 있어요. 더 많은 사용법과 업데이트를 위해 공식 문서를 읽어볼 것을 권장해요. 확인해 보세요!

더 알아보기 (Learn more)