주요 컨텐츠로 이동

Databricks에서 Qwen 모델 서빙하기

Serving Qwen Models on Databricks

Published: March 28, 2025

제품1분 이내 소요

Summary

  • Llama 기반 인프라에 맞게 수정하여 Databricks에서 Qwen 모델을 배포합니다.
  • 낮은 지연 시간, 높은 처리량 엔드포인트를 통해 고성능 서비스를 활용합니다.
  • Qwen 모델을 효율적으로 변환, 등록, 제공하기 위한 간단한 워크플로우를 따릅니다.

알리바바가 개발한 Qwen 모델은 코드 완성 및 명령 작업에서 강력한 성능을 보여주었습니다. 이 블로그에서는 Llama 기반 아키텍처와 유사한 접근 방식을 사용하여 Databricks에서 Qwen 모델을 등록하고 배포하는 방법을 보여드리겠습니다. 이 단계를 따르면, 낮은 지연 시간과 높은 처리량을 제공하는 Databricks의 기반 모델(Provisioned Throughput) 엔드포인트를 활용할 수 있습니다.

목차

  1. 동기: 왜 Databricks에서 Qwen 모델을 제공해야 하는가?
  2. 핵심 아이디어
  3. 구현: 주석이 달린 코드 워크스루
  4. 성능 및 제한 사항
  5. 요약 및 다음 단계

동기: 왜 Databricks에서 Qwen 모델을 제공해야 하는가?

많은 기업 작업 부하에 대해, Databricks는 대규모 언어 모델(LLMs)을 훈련시키고, 등록하고, 제공하는 원스톱 플랫폼입니다. Databricks Mosaic AI 모델 서빙 을 사용하면 세밀하게 조정된 모델이나 기본 모델을 쉽게 배포하고 실시간 또는 배치 추론 작업에 활용할 수 있습니다.

최근에 출시된 Qwen 2.5 시리즈 모델은 코드 완성 및 명령 작업에서 강력한 성능을 제공합니다. Qwen 2.5 모델 은 출시 당시 MMLU, ARC-C, MATH, HumanEval, 그리고 Multi-Exam 및 Multi-Understanding과 같은 다국어 벤치마크 등 표준 벤치마크에서 유사한 크기의 모델을 능가했습니다. Qwen 2.5 Coder 모델 은 코딩 벤치마크에서도 비슷한 향상을 보여줍니다. 이는 고객들이 이러한 모델을 Databricks 모델 서빙에 배포하여 자신들의 사용 사례를 지원하는 데 강력한 동기를 제공할 수 있습니다.

Databricks에서 Qwen 모델을 서빙하는 것은 네 단계로 이루어집니다:

  1. 노트북을 실행하여 Qwen 모델 파일을 Llama 아키텍처와 Databricks 모델 서빙과 호환되도록 변환합니다
  2. Unity 카탈로그에 Qwen 모델 등록
  3. Databricks 기반 모델 서빙에 등록된 모델 배포
  4. 배포에 대한 품질 테스트를 수행하십시오. 이는 수동 테스트 또는 엔드포인트에 직접 표준 벤치마크를 실행하는 것을 포함합니다.

핵심 아이디어

Databricks 기반 모델 서비스 는 Meta의 Llama 모델과 같은 모델에 대해 최적화된 성능을 제공합니다. 고객은 이러한 모델을 프로비저닝된 처리량으로 배포하고 낮은 지연 시간과 높은 처리량을 달성할 수 있습니다. Qwen 모델의 기본 모델 구조는 Llama 모델의 구조와 매우 유사하지만, Databricks의 모델 서비스 인프라를 활용하기 위해서는 일부 수정이 필요합니다. 아래의 단계는 고객이 필요한 수정을 어떻게 할 수 있는지 설명합니다.

구현: 주석이 달린 코드 워크스루

1부) Qwen의 가중치와 설정을 Llama 모델과 일관성 있게 재작성합니다.

modify_qwen.py 의 단계는 Qwen2.5 모델을 가져와 Databricks에서 최적화된 Llama 아키텍처와 일치하도록 재작성 합니다. 코드의 주요 단계는 다음과 같습니다:

  1. Qwen 상태 딕셔너리 불러오기: .safetensors 수집 원래의 Qwen 디렉토리에서.
  2. 가중치 복사 & 조정: Llama가 예상하는 곳에 주의 출력을 위한 제로 바이어스를 삽입합니다.
  3. Config 재작성: "architectures", "model_type" 와 같은 필드를 "llama"로 업데이트하고, Qwen 특정 플래그를 제거합니다.
  4. Tokenizer 파일 복사: tokenizer.json을 가져오는 것을 확인합니다. merges.txt, 등등.
  5. 최종 출력 폴더 생성: 새 디렉토리의 파일들은 전형적인 Llama 모델처럼 보입니다.

이 단계를 마치면, Llama 호환 Qwen 모델이 생깁니다. vLLM 에서 모델을 로드하면 Llama 모델로 취급하고 코드를 생성하거나 지시사항을 따르는 등, 사용한 모델에 따라 다르게 작동해야 합니다.

팁: 변환을 수행하기 전에 Hugging Face에서 Qwen/Qwen2.5-Coder-7B-Instruct 와 같은 Qwen 모델 중 하나를 디렉토리로 가져오기 위해 huggingface_hub.snapshot_download 를 사용할 수 있습니다.

2부) Databricks에서 Qwen 등록 및 서비스 제공

다음으로는 Databricks에서 "Qwen을 Llama로" 모델을 로그하고 제공하는 방법에 집중하겠습니다. 이는 register_qwen.py에 의해 처리됩니다. 여기서의 단계는 모델이 Llama 모델에 대해 모델 서비스가 예상하는 구성을 가지고 있도록 보장합니다. 주요 단계:

  1. 이전에 변환된 모델의 경로를 지정 합니다.
  2. 토크나이저 설정 수정 (특히 chat_template 제거 및 tokenizer_class 설정).
  3. 조정 중 config.json Llama와 호환되는 시퀀스 길이를 반영합니다.
  4. 모델 업데이트 로깅 전에 라마와 유사한 메타데이터로.
  5. 모델을 MLflow에 등록하여 GPU 엔드포인트에서 제공할 수 있게 합니다.

이 노트북을 실행하면 모델이 Unity 카탈로그에 등록됩니다, 모델로 이동하여 "이 모델 제공"을 클릭하여 엔드포인트를 설정하세요. 다른 토큰/초 비율로 입력을 제공하는 엔드포인트를 설정하는 옵션을 볼 수 있어야 합니다.

엔드포인트 테스트

엔드포인트가 준비되면 기본 테스트를 수행하여 제대로 작동하는지 확인할 수 있습니다. 위의 변환 및 등록을 수행한 후 Qwen2.5-Coder-7B 모델을 배포했다고 가정해 봅시다. 이 모델은 코드의 일부를 완성하거나 중간을 채우는 작업을 수행할 수 있습니다. 간단한 정렬 함수를 완성하는 데 사용해 봅시다. “Use” 드롭다운에서 “Query”를 클릭하고 다음 요청을 입력합니다:

응답에 포함된 텍스트에는 구현의 나머지 부분이 포함되어 있습니다:

더 정량적인 접근 방식을 위해 HumanEval 작업에 대한 완성을 생성할 수 있습니다. 그런 다음 pass@1 메트릭을 얻기 위해 평가를 실행하고 게시된 결과와 비교합니다.

성능 및 제한 사항

  1. 수동 채팅 포맷팅
    Qwen의 내장 채팅 템플릿을 제거했으므로, 클라이언트 코드에서 시스템/사용자/어시스턴트 메시지를 수동으로 포맷해야 합니다. 이렇게 하면 모델이 대화 턴을 여전히 제대로 해석할 수 있습니다.
  2. 최대 위치 임베딩
    우리는 특정 Databricks 제약 조건 내에서 맞추기 위해 max_position_embeddings 를 16000 토큰으로 설정했습니다. Qwen이 원래 더 많이 지원했다면, 최대 컨텍스트 길이를 일부 잃을 수 있습니다. 그러나 여전히 프로비저닝된 처리량 지원을 얻을 수 있습니다.

요약 및 다음 단계

Databricks는 현재 제공된 처리량 모델 서비스에서 직접적으로 Qwen 모델을 지원하지 않지만, 위의 방법을 통해 이러한 모델들을 Llama 모델의 아키텍처와 호환되도록 등록하고 서비스를 제공 할 수 있습니다. 이 방법은 팀이 Qwen의 기능을 필요로 하지만 Databricks 모델 서비스 엔드포인트와 제공된 처리량의 편리함을 원할 경우 특히 유용합니다.

핵심 요약

  • Qwen과 Llama 모델은 아키텍처적으로 충분히 유사하여, 몇 가지 사소한 수정(즉, 토크나이저 설정 및 모델 메타데이터에 대한 수정)을 통해 Databricks의 모델 서빙 인프라가 Provisioned Throughput을 사용하여 Qwen 모델을 쉽게 제공할 수 있습니다.

미래 고려사항

  • Databricks 모델 서비스에서 공식 Qwen 지원을 주시하도록 권장합니다.
  • 강제로 컨텍스트 크기를 제한하여 발생하는 성능 오버헤드 를 평가합니다.
  • 채팅 프롬프트에 의존하는 경우, 클라이언트 측에서 프롬프트를 수동으로 형식화 하는 것을 기억하세요.

감사의 말

  • Qwen 변환의 기초를 제공한 초기 예제를 위한 hiyouga의 llamafy_qwen.py.
  • 내부 서비스 제약 사항을 명확히 해준 Databricks 엔지니어링 팀.
  • 이 접근법을 테스트하고 개선한 모든 커뮤니티 회원들.

 

(이 글은 AI의 도움을 받아 번역되었습니다. 원문이 궁금하시다면 여기를 클릭해 주세요)

게시물을 놓치지 마세요

관심 있는 카테고리를 구독하고 최신 게시물을 받은편지함으로 받아보세요