Menjalankan model lokal openai/gpt-oss-20b dengan NVIDIA L4 GPU, model ini sebenarnya dapat dijalankan pada GPU konsumer seri RTX dengan ~16GB VRAM. Saya membaginya menjadi dua bagian: menjalankan secara manual dan menggunakan kontainer dengan sistem operasi Ubuntu 24.04 LTS.

Persiapan

Instal driver dan dependensi

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb && rm -rf cuda-keyring_1.1-1_all.deb
sudo apt update && sudo apt install -y \
     linux-headers-$(uname -r) \
     libnvidia-compute-580 nvidia-dkms-580-open \
     datacenter-gpu-manager-4-cuda-all \
     datacenter-gpu-manager-exporter \
     cuda-toolkit nvtop build-essential

Kita memerlukan reboot host untuk menerapkan driver GPU.

Validasi Driver

nvidia-smi
nvidia-smi -L

nvidia-smi

Menjalankan vLLM Secara Manual

Instal git LFS dan kloning repositori openai/gpt-oss-20b

curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash
apt install git-lfs && git lfs install
git clone https://huggingface.co/openai/gpt-oss-20b /models/gpt-oss-20b

Instal UV untuk lingkungan virtual Python

curl -LsSf https://astral.sh/uv/install.sh | sh
cd /models && uv venv
source .venv/bin/activate
uv pip install vllm==0.10.2 --torch-backend=auto

Mulai menyajikan model dengan vllm menggunakan perintah berikut

export VLLM_LOGGING_LEVEL=ERROR
python3 -m vllm.entrypoints.openai.api_server \
--host 0.0.0.0 --port 8000 \
--api-key $API_TOKEN \
--served-model-name openai/gpt-oss-20b \
--model /models/gpt-oss-20b \
--gpu-memory-utilization 0.90 \
--chat-template-content-format openai \
--tool-call-parser openai \
--enable-auto-tool-choice \
--trust-remote-code \
--async-scheduling \
--disable-log-requests

Anda dapat memantau pemanfaatan GPU secara real-time menggunakan perintah nvtop.

Saat model berhasil dimuat, pesan “application startup complete” akan muncul, dan Anda dapat menggunakan model tersebut. vllm-serve

Menjalankan vLLM dengan Kontainer

Instal Nvidia Container Toolkit

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo \
gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

export NVIDIA_CONTAINER_TOOLKIT_VERSION=1.18.0-1
sudo apt update && apt-get install -y \
     nvidia-container-toolkit=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
     nvidia-container-toolkit-base=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
     libnvidia-container-tools=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
     libnvidia-container1=${NVIDIA_CONTAINER_TOOLKIT_VERSION}

Instal Docker dan atur Nvidia Runtime

curl -fsSL https://get.docker.com | bash

nvidia-ctk runtime configure --runtime=docker
systemctl restart docker.service
docker run --rm --gpus all nvidia/cuda:12.3.2-base-ubuntu22.04 nvidia-smi

Jika GPU terdeteksi di tingkat kontainer, lanjutkan ke langkah berikutnya.

Create docker-compose.yaml file configuration

services:
  vllm:
    image: vllm/vllm-openai:v0.12.0
    container_name: vllm-gpt-oss-20b
    restart: unless-stopped
    ports:
      - "8000:8000"
    environment:
      API_TOKEN: ${API_TOKEN}
      VLLM_LOGGING_LEVEL: ERROR
    volumes:
      - /models:/models
    command: >
      --host 0.0.0.0
      --port 8000
      --api-key ${API_TOKEN}
      --served-model-name openai/gpt-oss-20b
      --model /models/gpt-oss-20b
      --gpu-memory-utilization 0.90
      --chat-template-content-format openai
      --tool-call-parser openai
      --enable-auto-tool-choice
      --trust-remote-code
      --async-scheduling
      --disable-log-requests
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
    ipc: host

ipc=host membuat kontainer Anda berbagi ruang memori dengan mesin host, yang penting untuk menjalankan model besar secara efisien.

Jalankan dengan perintah docker compose up -d lalu pantau log dengan docker compose logs -f. docker-compose-up

Menggunakan Model

Periksa model dengan endpoint GET API /v1/models seperti contoh berikut

curl -X GET http://127.0.0.1:8000/v1/models \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $API_TOKEN" | jq -r

api-check-model.webp

Kemudian lakukan tes prompt dengan POST ke endpoint API /v1/chat/completions seperti contoh berikut

curl -X POST http://127.0.0.1:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $API_TOKEN" \
-d '{
    "model": "openai/gpt-oss-20b",
    "messages": [
      {
        "role": "user",
        "content": "what is AI ?"
      }
    ],
    "temperature": 0.3,
    "max_tokens": 256,
    "stream": false,
    "reasoning_effort": "high"
}' | jq -r

api-test-prompt.webp

Benchmark

Terima kasih kepada Yoosu-L atas alat benchmark LLM yang mudah digunakan.

curl -O https://github.com/Yoosu-L/llmapibenchmark/releases/download/v1.0.7/llmapibenchmark_linux_amd64.tar.gz
tar xzvf llmapibenchmark_linux_amd64.tar.gz

Kami akan menguji dengan hingga 1.024 concurrency dengan menjalankan perintah berikut:

./llmapibenchmark_linux_amd64 \
--base-url http://127.0.0.1:8000/v1 \
--api-key $API_TOKEN \
--model openai/gpt-oss-20b \
--concurrency 1,2,4,8,16,32,64,128,256,512,1024 \
--max-tokens 512 \
--num-words 512 \
--prompt "what is AI ?" \
--format yaml | tee benchmark-results-gpt-oss-20b-nvidia-l4.yaml

Results: benchmark-results

Setelah menguji openai/gpt-oss-20b di berbagai tingkat concurrency untuk memahami perilakunya saat beban meningkat. Seiring concurrency meningkat, model secara jelas menjadi lebih cepat dalam menghasilkan token secara keseluruhan, menunjukkan perilaku skalabilitas yang kuat. Throughput prompt juga meningkat dengan concurrency yang lebih tinggi, terutama di rentang menengah.

Meskipun respons tercepat (min TTFT) tetap konsisten rendah, respons terlama (max TTFT) meningkat secara mencolok seiring concurrency tumbuh. Ini berarti sebagian besar permintaan masih dilayani dengan cepat, tetapi sebagian kecil mulai mengalami waktu tunggu lebih lama ketika sistem sangat terisi. Yang penting, semua permintaan berhasil, bahkan pada tingkat concurrency tertinggi.

Data benchmark dapat ditemukan di sini

Referensi