EC Both 엔코더

EC Both 엔코더 (Ec Both Encoder)

ec_both 역할로 EC(인코더 캐시) 커넥터를 사용해 멀티모달 이미지 중복에 대한 캐시 히트를 시연하는 배포 스크립트입니다. ECExampleConnector와 공유 스토리지 경로를 설정해 서버를 띄우고, 중복 이미지가 포함된 벤치마크 데이터셋으로 캐시 동작을 확인합니다.

출처: 문서

본문

소스: https://github.com/vllm-project/vllm/tree/main/examples/disaggregated/ec_both_encoder

#!/bin/bash
set -euo pipefail

MODEL="${MODEL:-Qwen/Qwen2.5-VL-3B-Instruct}"
PORT="${PORT:-8000}"
GPU="${GPU:-0}"
NUM_PROMPTS="${NUM_PROMPTS:-200}"
EC_SHARED_STORAGE_PATH="${EC_SHARED_STORAGE_PATH:-/tmp/ec_cache}"
TIMEOUT="${TIMEOUT:-600}"

SERVER_PID=""

cleanup() {
    echo "Stopping server..."
    if [[ -n "$SERVER_PID" ]] && kill -0 "$SERVER_PID" 2>/dev/null; then
        kill "$SERVER_PID" 2>/dev/null || true
        wait "$SERVER_PID" 2>/dev/null || true
    fi
    echo "Done."
}
trap cleanup EXIT INT TERM

wait_for_server() {
    local deadline=$((SECONDS + TIMEOUT))
    echo "Waiting for server on port $PORT..."
    while (( SECONDS < deadline )); do
        if curl -sf "http://localhost:${PORT}/v1/models" > /dev/null 2>&1; then
            echo "Server ready."
            return 0
        fi
        sleep 2
    done
    echo "ERROR: Server did not start within ${TIMEOUT}s"
    return 1
}

rm -rf "$EC_SHARED_STORAGE_PATH"
mkdir -p "$EC_SHARED_STORAGE_PATH"

###############################################################################
# Start server with ec_both
###############################################################################
CUDA_VISIBLE_DEVICES="$GPU" \
vllm serve "$MODEL" \
    --port "$PORT" \
    --enforce-eager \
    --ec-transfer-config '{
        "ec_connector": "ECExampleConnector",
        "ec_role": "ec_both",
        "ec_connector_extra_config": {
            "shared_storage_path": "'"$EC_SHARED_STORAGE_PATH"'"
        }
    }' \
    "$@" &

SERVER_PID=$!
wait_for_server

###############################################################################
# Benchmark -- dataset contains duplicate images, exercises cache hits
###############################################################################
echo "Running benchmark ($NUM_PROMPTS prompts)..."
vllm bench serve \
    --model "$MODEL" \
    --backend openai-chat \
    --endpoint /v1/chat/completions \
    --dataset-name hf \
    --dataset-path lmarena-ai/VisionArena-Chat \
    --seed 0 \
    --num-prompts "$NUM_PROMPTS" \
    --port "$PORT"

echo "Benchmark complete."

동작 요약:

  • 환경변수로 모델·포트·GPU·프롬프트 수·공유 스토리지 경로·타임아웃을 설정 가능(기본값 제공).
  • ECExampleConnectorec_role: ec_both--ec-transfer-config를 구성해 서버를 백그라운드로 띄웁니다.
  • 서버가 준비될 때까지 /v1/models를 폴링하며 기다립니다.
  • 중복 이미지가 포함된 lmarena-ai/VisionArena-Chat 데이터셋으로 vllm bench serve 벤치마크를 실행해 인코더 캐시 히트를 연습합니다.
  • 스크립트 종료 시 서버를 정리(cleanup)합니다.

더 알아보기 (Learn more)