CoreWeave의 Tensorizer로 모델 로드하기

CoreWeave의 Tensorizer로 모델 로드하기

vLLM은 CoreWeave의 Tensorizer로 모델을 로드하는 것을 지원해요. 디스크, HTTP/HTTPS 엔드포인트, 또는 S3 엔드포인트에 직렬화(serialize)된 vLLM 모델 텐서를 런타임에 GPU로 매우 빠르게 역직렬화할 수 있어요. 이 덕분에 Pod 시작 시간과 CPU 메모리 사용이 크게 줄어듭니다. 텐서 암호화도 지원돼요.

vLLM은 Tensorizer를 모델 로딩 메커니즘에 완전히 통합했어요. 아래에서는 vLLM에서 Tensorizer를 시작하는 방법을 간단히 소개합니다.

출처: vLLM 공식 문서 — models-extensions-tensorizer

Tensorizer 설치

tensorizer를 설치하려면 pip install vllm[tensorizer]를 실행하세요.

기본 (The basics)

Tensorizer로 모델을 로드하려면 먼저 모델이 Tensorizer에 의해 직렬화되어 있어야 해요. 예제 스크립트가 이 과정을 처리합니다.

facebook/opt-125m을 직렬화하고 추론용으로 로드하는 기본 예제를 살펴볼게요.

Tensorizer로 vLLM 모델 직렬화하기

모델을 직렬화하려면 예제 스크립트를 필요한 CLI 인자와 함께 호출해요. S3 버킷 s3://my-bucket에 저장한다고 가정해볼게요.

python examples/features/tensorize_vllm_model.py \
    --model facebook/opt-125m \
    serialize \
    --serialized-directory s3://my-bucket \
    --suffix v1

이렇게 하면 모델 텐서가 s3://my-bucket/vllm/facebook/opt-125m/v1에 저장돼요. 텐서화된 모델에 LoRA 어댑터를 적용하려면 위 명령에 LoRA 어댑터의 HF id를 전달할 수 있고, 아티팩트도 함께 저장됩니다.

python examples/features/tensorize_vllm_model.py \
    --model facebook/opt-125m \
    --lora-path <lora_id> \
    serialize \
    --serialized-directory s3://my-bucket \
    --suffix v1

Tensorizer로 모델 서빙하기

모델을 원하는 위치에 직렬화했다면 vllm serveLLM 엔트리포인트로 로드할 수 있어요. 모델을 저장한 디렉토리를 model 인자에 전달하면 됩니다.

vllm serve s3://my-bucket/vllm/facebook/opt-125m/v1 --load-format tensorizer --enable-lora

또는 LLM()으로:

from vllm import LLM
llm = LLM("s3://my-bucket/vllm/facebook/opt-125m/v1", load_format="tensorizer", enable_lora=True)

Tensorizer 구성 옵션

tensorizer의 핵심 객체인 TensorSerializerTensorDeserializer는 직렬화와 역직렬화를 각각 수행해요. 여기에 임의의 kwargs를 전달해 직렬화/역직렬화 과정을 구성할 수 있는데, model_loader_extra_configserialization_kwargsdeserialization_kwargs 키로 제공하면 됩니다.

예를 들어 직렬화 시 CPU 동시성을 limit_cpu_concurrency 파라미터로 제한할 수 있어요.

python examples/features/tensorize_vllm_model.py \
    --model facebook/opt-125m \
    --lora-path <lora_id> \
    serialize \
    --serialized-directory s3://my-bucket \
    --serialization-kwargs '{"limit_cpu_concurrency": 2}' \
    --suffix v1

역직렬화 중 읽기 동시성을 num_readers 파라미터로 제한할 수도 있어요.

vllm serve s3://my-bucket/vllm/facebook/opt-125m/v1 \
    --load-format tensorizer \
    --enable-lora \
    --model-loader-extra-config '{"deserialization_kwargs": {"num_readers": 2}}'

더 알아보기 (Learn more)