Run:ai Model Streamer로 모델 로드하기
Run:ai Model Streamer로 모델 로드하기
Run:ai Model Streamer는 텐서를 동시성(concurrency)으로 읽으면서 GPU 메모리로 스트리밍하는 라이브러리예요. vLLM은 Safetensors 형식의 가중치를 Run:ai Model Streamer를 통해 로드하는 것을 지원해요. 로컬 파일은 물론 AWS S3, Google Cloud Storage, Azure Blob Storage, S3 호환 오브젝트 스토어에서도 모델을 직접 로드할 수 있어요.
출처: 문서
본문
자세한 내용은 Run:ai Model Streamer 문서를 참고하세요.
설치
먼저 vLLM의 RunAI 선택적 의존성을 설치해야 해요:
pip3 install vllm[runai]
OpenAI 호환 서버로 실행
OpenAI 호환 서버로 실행하려면 --load-format runai_streamer 플래그를 추가하세요:
vllm serve /home/meta-llama/Llama-3.2-3B-Instruct \
--load-format runai_streamer
다양한 스토리지에서 로드
AWS S3 오브젝트 스토어:
vllm serve s3://core-llm/Llama-3-8b \
--load-format runai_streamer
Google Cloud Storage:
vllm serve gs://core-llm/Llama-3-8b \
--load-format runai_streamer
Azure Blob Storage:
AZURE_STORAGE_ACCOUNT_NAME=<account> \
vllm serve az://<container>/<model-path> \
--load-format runai_streamer
인증은 DefaultAzureCredential을 사용하며, az login, 관리 ID(managed identity), 환경 변수(AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET) 등을 지원해요.
S3 호환 오브젝트 스토어:
RUNAI_STREAMER_S3_USE_VIRTUAL_ADDRESSING=0 \
AWS_EC2_METADATA_DISABLED=true \
AWS_ENDPOINT_URL=https://storage.googleapis.com \
vllm serve s3://core-llm/Llama-3-8b \
--load-format runai_streamer
튜닝 파라미터
--model-loader-extra-config로 파라미터를 튜닝할 수 있어요.
distributed — 분산 스트리밍(distributed streaming) 사용 여부. 현재 CUDA와 ROCm 디바이스에서만 가능하며, 오브젝트 스토어나 고처리량 네트워크 파일셰어에서 로딩 시간을 크게 개선할 수 있어요:
vllm serve /home/meta-llama/Llama-3.2-3B-Instruct \
--load-format runai_streamer \
--model-loader-extra-config '{"distributed":true}'
concurrency — 파일에서 CPU 버퍼로 텐서를 읽는 동시성 수준과 OS 스레드 수. S3에서 읽을 때는 호스트가 S3 서버에 여는 클라이언트 인스턴스 수예요:
vllm serve /home/meta-llama/Llama-3.2-3B-Instruct \
--load-format runai_streamer \
--model-loader-extra-config '{"concurrency":16}'
memory_limit — 파일에서 텐서를 읽는 CPU 메모리 버퍼의 크기 제한:
vllm serve /home/meta-llama/Llama-3.2-3B-Instruct \
--load-format runai_streamer \
--model-loader-extra-config '{"memory_limit":5368709120}'
참고: 튜닝 파라미터와 환경 변수로 구성 가능한 추가 파라미터에 대한 자세한 내용은 Environment Variables 문서를 읽으세요.
샤딩된 모델 로딩
여러 파일로 분할된 대형 모델에는 --load-format runai_streamer_sharded 플래그를 사용할 수 있어요:
vllm serve /path/to/sharded/model --load-format runai_streamer_sharded
샤딩 로더는 일반 샤딩 상태 로더와 동일한 네이밍 패턴 model-rank-{rank}-part-{part}.safetensors를 요구해요. --model-loader-extra-config의 pattern 파라미터로 패턴을 커스터마이즈할 수 있어요:
vllm serve /path/to/sharded/model \
--load-format runai_streamer_sharded \
--model-loader-extra-config '{"pattern":"custom-model-rank-{rank}-part-{part}.safetensors"}'
샤딩된 모델 파일을 만들려면 examples/features/sharded_state/save_sharded_state_offline.py 스크립트를 사용할 수 있어요. 이 스크립트는 Run:ai Model Streamer 샤딩 로더와 호환되는 형식으로 모델을 저장하는 방법을 보여줘요.
샤딩 로더는 concurrency와 memory_limit을 포함해 일반 Run:ai Model Streamer의 모든 튜닝 파라미터를 동일하게 지원해요:
vllm serve /path/to/sharded/model \
--load-format runai_streamer_sharded \
--model-loader-extra-config '{"concurrency":16, "memory_limit":5368709120}'
참고: 샤딩 로더는 각 워커가 전체 체크포인트가 아니라 자신의 샤드만 읽으면 되는 tensor/pipeline parallel 모델에서 특히 효율적이에요.