็†ฑ้–€ๅˆ†้กž
 ่ผ‰ๅ…ฅไธญ…
็›ฎ้Œ„

๐Ÿค– LLM Ops ๅฏฆๆˆฐ:ๅœจ Linux ็’ฐๅขƒไฝฟ็”จ Docker ้ƒจ็ฝฒ DeepSeek-V3 ็งๆœ‰ๅŒ–ๆจกๅž‹่ˆ‡ API ๆ•ดๅˆ

    ๐Ÿค– LLM Ops ๅฏฆๆˆฐ:ๅœจ Linux ็’ฐๅขƒไฝฟ็”จ Docker ้ƒจ็ฝฒ DeepSeek-V3 ็งๆœ‰ๅŒ–ๆจกๅž‹่ˆ‡ API ๆ•ดๅˆ

    ๆŠŠๅคงๅž‹่ชž่จ€ๆจกๅž‹(LLM)「ๆฌๅ›žๅ…ง็ถฒ」็š„้œ€ๆฑ‚,่ฟ‘ไธ€ๅนดๆ˜Ž้กฏ่ฎŠๅคš:่ณ‡ๆ–™ไธๅ‡บ้–€、ๅปถ้ฒๆ›ดไฝŽ、ๆˆๆœฌๆ›ดๅฏๆŽง、ๆฒป็†ๆ›ดไธ€่‡ด。 ไฝ†็œŸๆญฃ่ฝๅœฐๆ™‚,ๆŒ‘ๆˆฐ้€šๅธธไธๆ˜ฏ「่ท‘่ตทไพ†」่€Œๅทฒ,่€Œๆ˜ฏ:ๅฏ็ถญ้‹、ๅฏ็›ฃๆŽง、ๅฏๆŽงๆฌŠ้™、ๅฏๆ“ดๅฑ•、ๅฏๅ›žๆปพ

    ้€™็ฏ‡ไปฅ LLM Ops(LLM Operation) ็š„่ฆ–่ง’,็คบ็ฏ„ๅฆ‚ไฝ•ๅœจ Linux ไธŠ็”จ Docker ไฝˆ็ฝฒ DeepSeek-V3 ๆŽจ่ซ–ๆœๅ‹™, ้€้Ž vLLM ๆไพ› OpenAI-Compatible API,ๅ†็”จ Nginx ไฝœ API Gateway ๅšๆฌŠ้™、้™ๆต่ˆ‡่ทฏ็”ฑ, ๆœ€ๅพŒ่ฃœไธŠ Prometheus/Grafana ็›ฃๆŽง่ˆ‡ systemd ้–‹ๆฉŸ่‡ชๅ‹•ๅ•Ÿๅ‹•,ๅฝขๆˆไธ€ๅฅ—ๅฏไธŠ็ทš็š„็งๆœ‰ๅŒ–ๆŽจ่ซ–ๅŸบๅบง。

    ๐Ÿ“‘ ็›ฎ้Œ„

    ไธ€、ๅ…ˆ่ซ‡็พๅฏฆ:DeepSeek-V3 ็š„้ƒจ็ฝฒ้–€ๆชป่ˆ‡็ญ–็•ฅ

    DeepSeek-V3 ๅฑฌๆ–ผๅคงๅž‹ MoE(Mixture-of-Experts)ๆจกๅž‹,ๅฎšไฝๆ›ดๆŽฅ่ฟ‘「ๆ——่‰ฆ็ดš」ๆŽจ่ซ–ๆœๅ‹™。 ๅ› ๆญคๅœจ็งๆœ‰ๅŒ–้ƒจ็ฝฒๅ‰,ๅปบ่ญฐๅ…ˆๅšๅ…ฉๅ€‹ๆฑบ็ญ–:

    1. ็›ฎๆจ™ๆ˜ฏ「ไธŠ็ทšไพ›ๅ…ง้ƒจๅคšไบบไฝฟ็”จ」้‚„ๆ˜ฏ「PoC/้–‹็™ผ้ฉ—่ญ‰」?
      PoC ๅฏไปฅ็”จ่ผƒๅฐๆจกๅž‹ๆˆ– Distill/้‡ๅŒ–็‰ˆๆœฌๅ…ˆๆŠŠๆต็จ‹ๆ‰“้€š;ไธŠ็ทšๆ‰ๆŠ•ๅ…ฅๆ›ดๅฎŒๆ•ด็š„่ณ‡ๆบ่ˆ‡ๆฒป็†。
    2. ่ฆๆไพ›ๅ“ชไธ€็จฎ API ไป‹้ข?
      ไผๆฅญๅ…ง้ƒจๆœ€ๅฏฆ็”จ็š„ๆ˜ฏ OpenAI-Compatible API,ๅ› ็‚บๆ—ขๆœ‰ๆ‡‰็”จ(SDK、ๆก†ๆžถ、RAG)ๆ”นๅ‹•ๆœ€ๅฐ。

    ๆœฌๆ–‡ไปฅ「ไป‹้ขไธ€่‡ด、็ถญ้‹ๅฏๆŽง」็‚บๆ ธๅฟƒ:ๅณไฝฟไฝ ๆœชๅฟ…ไธ€้–‹ๅง‹ๅฐฑ็”จๆœ€ๅคง่ฆๆจก็š„ๆฌŠ้‡, ไนŸ่ƒฝๅ…ˆๆŠŠๆ•ดๅฅ— LLM Ops ๅŸบๅบงๅปบ่ตทไพ†,ๅพŒ็บŒๅ†ๆ›ฟๆ›ๆจกๅž‹็‰ˆๆœฌๆˆ–ๆ“ดๅฎน GPU。

    ไบŒ、็›ฎๆจ™ๆžถๆง‹:Docker + vLLM + API Gateway + Observability

    ไธ‹ๅœ–ๆ˜ฏๆœฌๆ–‡ๆŽจ่–ฆ็š„ๆœ€ๅฐๅฏไธŠ็ทšๆžถๆง‹(MVP),ไฟ็•™ไบ†ๅฏฆๅ‹™ไธŠๆœ€ๅธธ่ฆ‹็š„ๆฒป็†้œ€ๆฑ‚:

    Client / App / RAG
            |
            |  HTTPS + API Key / JWT(ๅปบ่ญฐ)
            v
       [ Nginx API Gateway ]
            |
            |  Proxy to internal service
            v
    [ vLLM OpenAI-Compatible Server ]  -- loads -->  DeepSeek-V3 weights (HF/local)
            |
            +--> /metrics  ---> Prometheus ---> Grafana
            |
            +--> Logs (stdout/stderr) ---> Loki/ELK(้ธ้…)
    

    ้€™ๆจฃๆ‹†ๅฑค็š„ๅฅฝ่™•ๆ˜ฏ:ๆŽจ่ซ–ๅผ•ๆ“ŽๅฐˆๆณจๆŽจ่ซ–,ๅฎ‰ๅ…จ่ˆ‡ๆต้‡ๆฒป็†ไบค็ตฆ Gateway,็›ฃๆŽง่ˆ‡็จฝๆ ธๅฏไปฅ็จ็ซ‹ๆผ”้€ฒ。

    ไธ‰、้ƒจ็ฝฒๅ‰ๆบ–ๅ‚™:GPU、Docker ่ˆ‡ๆจกๅž‹ๆช”ๆกˆ

    1) ๅŸบๆœฌๆชขๆŸฅๆธ…ๅ–ฎ

    • Linux ไธปๆฉŸ:ๅปบ่ญฐ Ubuntu 22.04/24.04 ๆˆ–ๅŒ็ดšไผบๆœๅ™จ็‰ˆ็™ผ่กŒ็‰ˆ。
    • NVIDIA Driver:็ขบ่ช nvidia-smi ๅฏๆญฃๅธธ้กฏ็คบ GPU。
    • Docker / Docker Compose:ๆŽจ่ซ–ๆœๅ‹™ไปฅๅฎนๅ™จๅŒ–ๆ–นๅผไธŠ็ทš่ˆ‡ๅ›žๆปพ。
    • GPU Container Runtime:NVIDIA Container Toolkit(่ฎ“ๅฎนๅ™จ่ƒฝไฝฟ็”จ GPU)。
    • ๅ„ฒๅญ˜็ฉบ้–“:ๆจกๅž‹ๆฌŠ้‡้€šๅธธ้žๅธธๅคง,่ซ‹้ ็•™่ถณๅค ๅฎน้‡่ˆ‡ I/O(NVMe ๅ„ชๅ…ˆ)。

    2) ๅปบ่ญฐ็›ฎ้Œ„่ฆๅŠƒ

    sudo mkdir -p /opt/llm/models
    sudo mkdir -p /opt/llm/deepseek-v3
    sudo chown -R $USER:$USER /opt/llm
    

    3) ไธ‹่ผ‰ๆจกๅž‹ๆฌŠ้‡(ไปฅ Hugging Face ็‚บไพ‹)

    ๅฏฆๅ‹™ไธŠ,ๅปบ่ญฐๆŠŠๆจกๅž‹ๆฌŠ้‡ๅ›บๅฎšๅœจไธ€ๅ€‹ๆช”ๆกˆ่ทฏๅพ‘,ไธฆไปฅ「็‰ˆๆœฌๅŒ–่ณ‡ๆ–™ๅคพ」็ฎก็†,้ฟๅ…ๆ›ดๆ–ฐๆ™‚่ฆ†่“‹้€ ๆˆๅ›žๆปพๅ›ฐ้›ฃ。

    # ๅฎ‰่ฃ HF CLI(่‹ฅๅทฒๅฎ‰่ฃๅฏ็•ฅ)
    python3 -m pip install -U "huggingface_hub[cli]"
    
    # ็™ปๅ…ฅ(่‹ฅๆจกๅž‹้œ€่ฆๆŽˆๆฌŠๆˆ–ไฝ ่ฆ็”จๅŠ ้€Ÿไธ‹่ผ‰)
    huggingface-cli login
    
    # ไธ‹่ผ‰ๅˆฐๆœฌๅœฐ(็ฏ„ไพ‹:DeepSeek-V3)
    # ๅปบ่ญฐๆฏๆฌกไธ‹่ผ‰็ถๅฎš็‰ˆๆœฌ่ณ‡ๆ–™ๅคพ,ไพ‹ๅฆ‚:/opt/llm/models/deepseek-v3/2025-11-27/
    mkdir -p /opt/llm/models/deepseek-v3/2025-11-27
    huggingface-cli download deepseek-ai/DeepSeek-V3 \
      --local-dir /opt/llm/models/deepseek-v3/2025-11-27 \
      --local-dir-use-symlinks False
    

    ๅ››、Docker ้ƒจ็ฝฒ vLLM(OpenAI-Compatible Server)

    vLLM ๆไพ› OpenAI-Compatible Server,ๅฏ็›ดๆŽฅๅฐๅค–ๆไพ› /v1/models/v1/chat/completions ็ญ‰็ซฏ้ปž, ่ฎ“ไฝ ๆŠŠๆ—ขๆœ‰ๆ‡‰็”จ็š„ๅ‘ผๅซๆจกๅผ「่ฝ‰ๅ‘ๅ…ง็ถฒ」。

    ๆ–นๆกˆ A:docker run(ๆœ€ๅฟซ้ฉ—่ญ‰)

    # ไปฅ vLLM OpenAI server ็‚บไพ‹(ๆ˜ ๅฐ„ 8000)
    # ้‡่ฆ:่ซ‹ไพ GPU ๆ•ธ้‡่ชฟๆ•ด --tensor-parallel-size
    docker run --rm -it \
      --gpus all \
      -p 8000:8000 \
      -v /opt/llm/models:/models \
      vllm/vllm-openai:latest \
      --model /models/deepseek-v3/2025-11-27 \
      --served-model-name deepseek-v3 \
      --tensor-parallel-size 1 \
      --max-model-len 8192 \
      --gpu-memory-utilization 0.90 \
      --trust-remote-code \
      --disable-log-requests
    

    ๅ•Ÿๅ‹•ๅพŒๅ…ˆๅšๅฅๅบทๆชขๆŸฅ:

    curl http://127.0.0.1:8000/v1/models
    

    ๆ–นๆกˆ B:docker compose(ไธŠ็ทšๅปบ่ญฐ)

    ๆŠŠ่จญๅฎšๅ›บๅฎšๅœจ compose.yml,ๅฏ้‡็พ้ƒจ็ฝฒ、ๅฏ่ฟฝ็‰ˆ、ไนŸๆ›ดๅฎนๆ˜“ๆŽฅ systemd。

    cat > /opt/llm/deepseek-v3/compose.yml <<'YAML'
    services:
      deepseek_v3:
        image: vllm/vllm-openai:latest
        container_name: deepseek-v3
        restart: unless-stopped
        ports:
          - "8000:8000"
        volumes:
          - /opt/llm/models:/models:ro
        environment:
          # ่‹ฅไฝ ็š„ๆต็จ‹้œ€่ฆ HF Token,ๅฏ็”จ็’ฐๅขƒ่ฎŠๆ•ธๆณจๅ…ฅ(ไนŸๅฏๆ”น็”จ docker secret)
          # - HUGGING_FACE_HUB_TOKEN=xxxx
          - TZ=Asia/Taipei
        command:
          - "--model=/models/deepseek-v3/2025-11-27"
          - "--served-model-name=deepseek-v3"
          - "--tensor-parallel-size=1"
          - "--max-model-len=8192"
          - "--gpu-memory-utilization=0.90"
          - "--trust-remote-code"
          - "--disable-log-requests"
        # ้œ€่ฆ Compose v2 + NVIDIA runtime ๆ”ฏๆด
        deploy:
          resources:
            reservations:
              devices:
                - capabilities: ["gpu"]
    YAML
    
    cd /opt/llm/deepseek-v3
    docker compose up -d
    docker compose logs -f
    

    ่‹ฅไฝ ๆ˜ฏๅคšๅผต GPU(ไพ‹ๅฆ‚ 2/4/8 ๅผต)ๅšๅผต้‡ๅนณ่กŒ,ๆ ธๅฟƒๅฐฑๆ˜ฏๆŠŠ --tensor-parallel-size ่จญ็‚บๅฐๆ‡‰็š„ GPU ๆ•ธ, ไธฆ็ขบไฟๅฎนๅ™จ่ƒฝ็œ‹่ฆ‹่ถณๅค  GPU。่ณ‡ๆบไธ่ถณๆ™‚,่ซ‹ๅ…ˆ้™ไฝŽ --max-model-len、ๆˆ–ๆŽก็”จๆ›ดๅฐ/้‡ๅŒ–็‰ˆๆœฌๆจกๅž‹。

    ไบ”、Nginx API Gateway:TLS、API Key、้™ๆต่ˆ‡่ทฏ็”ฑ

    ไธๅปบ่ญฐๆŠŠ vLLM ๆœๅ‹™(8000)็›ดๆŽฅๆšด้œฒๅœจๅ…ฌ้–‹็ถฒ่ทฏ。ๅฏฆๅ‹™ไธŠๆ‡‰่ฉฒ: vLLM ๅช่ฝๅ…ง็ถฒ,็”ฑ Nginx ไฝœ API Gateway ็ตฑไธ€ๅšๅญ˜ๅ–ๆŽงๅˆถ่ˆ‡ๆต้‡ๆฒป็†。

    1) ๆœ€ๅฐๅฏ็”จ:Header API Key + ้™ๆต

    ไปฅไธ‹็คบ็ฏ„ไปฅ X-API-Key ไฝœ็‚บ็ฐกๆ˜“ๆŽˆๆฌŠ(ๅ…ง็ถฒ็’ฐๅขƒๅธธ็”จ),ไธฆๅŠ ไธŠ basic rate limit:

    # /etc/nginx/conf.d/llm-gateway.conf
    # ๆณจๆ„:ๆญค็‚บ็คบ็ฏ„,TLS/ๆ†‘่ญ‰、WAF、IP allowlist ๅฏไพ้œ€ๆฑ‚ๆ“ดๅ……
    
    limit_req_zone $binary_remote_addr zone=llm_ratelimit:10m rate=10r/s;
    
    map $http_x_api_key $llm_allowed {
      default 0;
      "REPLACE_WITH_YOUR_KEY" 1;
    }
    
    server {
      listen 443 ssl;
      server_name llm.internal.example.com;
    
      # ssl_certificate / ssl_certificate_key ่ซ‹่‡ช่กŒ้…็ฝฎ
      # ssl_certificate     /etc/letsencrypt/live/xxx/fullchain.pem;
      # ssl_certificate_key /etc/letsencrypt/live/xxx/privkey.pem;
    
      if ($llm_allowed = 0) { return 401; }
    
      location / {
        limit_req zone=llm_ratelimit burst=20 nodelay;
    
        proxy_pass http://127.0.0.1:8000;
        proxy_http_version 1.1;
    
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    
        # ้ฟๅ…่ถ…้•ทๅ›žๆ‡‰่ขซๅˆ‡ๆ–ท(ๅฏ่ฆ–ๆƒ…ๆณ่ชฟๆ•ด)
        proxy_read_timeout 300s;
        proxy_send_timeout 300s;
      }
    
      # ๅฏๆŠŠ metrics ไนŸๆ”ถ้€ฒไพ†,ไฝ†ๅปบ่ญฐๅชๅ…่จฑ็›ฃๆŽง็ถฒๆฎต
      location /metrics {
        allow 10.0.0.0/8;
        deny all;
        proxy_pass http://127.0.0.1:8000/metrics;
      }
    }
    

    ๅปบ่ญฐๅพŒ็บŒๆผ”้€ฒๆ–นๅ‘:API Key ๆ”นๆˆ JWT / OAuth2、ๅŠ ไธŠ ็”จๆˆถ/้ƒจ้–€้…้ก、ไธฆๅฐ‡่ซ‹ๆฑ‚่จ˜้Œ„ๅฐŽๅ…ฅ SIEM。

    ๅ…ญ、API ๆ•ดๅˆ:curl / Python(OpenAI SDK)/ ๆ—ขๆœ‰็ณป็ตฑๆ”น้€ 

    1) curl:ๅฟซ้€Ÿ้ฉ—่ญ‰ Chat Completions

    curl https://llm.internal.example.com/v1/chat/completions \
      -H "Content-Type: application/json" \
      -H "X-API-Key: REPLACE_WITH_YOUR_KEY" \
      -d '{
        "model": "deepseek-v3",
        "messages": [
          {"role": "system", "content": "ไฝ ๆ˜ฏๅšด่ฌน็š„ไผๆฅญ IT ๅŠฉ็†。"},
          {"role": "user", "content": "่ซ‹็”จๆขๅˆ—ๆ•ด็†:Docker ๅŒ–ๆŽจ่ซ–ๆœๅ‹™ไธŠ็ทšๅ‰่ฆๆชขๆŸฅๅ“ชไบ›้ …็›ฎ?"}
        ],
        "temperature": 0.2
      }'
    

    2) Python:ไฝฟ็”จ OpenAI SDK ๆŒ‡ๅ‘ๅ…ง็ถฒ

    python3 -m pip install -U openai
    
    python3 - <<'PY'
    from openai import OpenAI
    
    client = OpenAI(
      base_url="https://llm.internal.example.com/v1",
      api_key="REPLACE_WITH_YOUR_KEY"
    )
    
    resp = client.chat.completions.create(
      model="deepseek-v3",
      messages=[
        {"role":"system","content":"ไฝ ๆ˜ฏๅšด่ฌน็š„ไผๆฅญ IT ๅŠฉ็†。"},
        {"role":"user","content":"่ซ‹็ตฆๆˆ‘ไธ€ไปฝ LLM Ops ไธŠ็ทšๆชขๆŸฅๆธ…ๅ–ฎ(ๅซ็›ฃๆŽง、ๆ—ฅ่ชŒ、่ณ‡ๅฎ‰)。"}
      ],
      temperature=0.2
    )
    
    print(resp.choices[0].message.content)
    PY
    

    3) ๆ—ขๆœ‰็ณป็ตฑๆ”น้€ ๅปบ่ญฐ(ๆœ€ๅฐ่ฎŠๆ›ด)

    • ็ตฑไธ€่จญๅฎš:ไปฅ็’ฐๅขƒ่ฎŠๆ•ธ็ฎก็† LLM_BASE_URLLLM_API_KEY,้ฟๅ…ๆ•ฃ่ฝๅœจ็จ‹ๅผ็ขผ。
    • ๆจกๅž‹ๅ็จฑๆŠฝ่ฑกๅŒ–:ไธ่ฆๆŠŠ็‰นๅฎšๆจกๅž‹ๅฏซๆญป;็”จ MODEL_NAME ๅƒๆ•ธๅฏๅฟซ้€Ÿๅˆ‡ๆ›็‰ˆๆœฌ(ๅ›žๆปพๆ›ดๅฎนๆ˜“)。
    • ่ถ…ๆ™‚่ˆ‡้‡่ฉฆ็ญ–็•ฅ:ๆŽจ่ซ–ๅปถ้ฒๆœฌไพ†ๅฐฑ้ซ˜ๆ–ผไธ€่ˆฌ API,่ซ‹่จญๅฎšๅˆ็† timeout、ไธฆไปฅๅ†ช็ญ‰ๆ–นๅผ้‡่ฉฆ。
    • ๆ•ๆ„Ÿ่ณ‡ๆ–™่™•็†:้€ฒๅ…ฅ LLM ไน‹ๅ‰ๅ…ˆๅš้ฎ็ฝฉ(ไพ‹ๅฆ‚ Token、ๅธณๅฏ†、ๅ€‹่ณ‡),ไธฆๆŠŠ้ฎ็ฝฉ่ฆๅ‰‡็‰ˆๆœฌๅŒ–。

    ไธƒ、LLM Ops ๅฟ…ๅ‚™:็›ฃๆŽง、ๆ—ฅ่ชŒ、ๅฎน้‡่ฆๅŠƒ、็‰ˆๆœฌๆŽง็ฎก่ˆ‡ๅ›žๆปพ

    1) ็›ฃๆŽง:Prometheus / Grafana

    vLLM ้€šๅธธๆœƒๆไพ› /metrics(Prometheus ๆ ผๅผ)ไพ›ๆŠ“ๅ–。ๆœ€ๅฐ่จญๅฎšๅฆ‚ไธ‹:

    # prometheus.yml(็‰‡ๆฎต)
    scrape_configs:
      - job_name: "vllm-deepseek"
        metrics_path: /metrics
        static_configs:
          - targets: ["llm.internal.example.com:443"]
    

    ๅปบ่ญฐ่‡ณๅฐ‘ๅšๅ››ๅผตๅœ–:

    • ๅปถ้ฒ:P50/P95/P99(ๅพž Gateway ่ˆ‡ vLLM ๅ„็œ‹ไธ€ไปฝ)
    • ไฝ‡ๅˆ—/ไธฆ็™ผ:็ญ‰ๅพ…ไธญ็š„่ซ‹ๆฑ‚ๆ•ธ、่™•็†ไธญ็š„่ซ‹ๆฑ‚ๆ•ธ
    • ๅžๅ:tokens/s、requests/s
    • ่ณ‡ๆบ:GPU utilization、GPU memory、CPU/RAM、็ฃ็ขŸ I/O

    2) ๆ—ฅ่ชŒ:ๅฏ็จฝๆ ธไฝ†ไธๆดฉๆผ

    • ๆŽจ่ซ–็ซฏ:ๅปบ่ญฐๅœจ้šฑ็งๆ•ๆ„Ÿๅ ดๆ™ฏไฝฟ็”จ --disable-log-requests,้ฟๅ…ๆŠŠ prompt/response ๆ‰“ๅˆฐ logs。
    • Gateway ็ซฏ:ไฟ็•™ request id、ไพ†ๆบ、่€—ๆ™‚、็‹€ๆ…‹็ขผ;ๅฟ…่ฆๆ™‚่จ˜้Œ„ไฝฟ็”จ่€…/้ƒจ้–€่ญ˜ๅˆฅ(้…้ก่ˆ‡็จฝๆ ธ)。
    • ่ณ‡ๆ–™ไฟ็•™:่จ‚ๅฎš retention(ไพ‹ๅฆ‚ 14/30/90 ๅคฉ),้ฟๅ…็„ก้™ๅˆถๆˆ้•ท。

    3) ๅฎน้‡่ฆๅŠƒ:ๆŠŠ「ๅฏๆœๅ‹™็š„ไบบๆ•ธ」้‡ๅŒ–

    LLM ็š„ๅฎน้‡่ฆๅŠƒ้‡้ปž้€šๅธธไธๆ˜ฏ CPU,่€Œๆ˜ฏ:GPU ่จ˜ๆ†ถ้ซ”KV Cacheๆœ€ๅคงไธŠไธ‹ๆ–‡้•ทๅบฆๅŒๆ™‚ไฝต็™ผๆ•ธ。 ๅฏฆๅ‹™ๅปบ่ญฐๅšๅ…ฉๅ€‹้™ๅˆถ:

    • ้™ๅˆถ max tokens / max model len:ๅ…ˆไฟ็ฉฉๅฎš,ๅ†้€ๆญฅๆ”พๅฏฌ。
    • Gateway ้™ๆต:้ฟๅ…ๅฐ–ๅณฐๆŠŠๆŽจ่ซ–ๆœๅ‹™ๆ‰“็ˆ†(burst + rate)。

    4) ็‰ˆๆœฌๆŽง็ฎก่ˆ‡ๅ›žๆปพ:ๆจกๅž‹ไนŸๆ˜ฏ「็™ผ็‰ˆ็‰ฉ」

    • ๆจกๅž‹็‰ˆๆœฌๅŒ–:ไพ‹ๅฆ‚ /opt/llm/models/deepseek-v3/2025-11-27,ไธ่ฆ็”จ「latest」่ณ‡ๆ–™ๅคพ่ฆ†่“‹。
    • ้…็ฝฎ็‰ˆๆœฌๅŒ–compose.yml、Nginx conf、Prometheus conf ้ƒฝ่ฆ้€ฒ Git。
    • ๅ›žๆปพ็ญ–็•ฅ:ๅ‡บไบ‹ๆ™‚ๅ…ˆๅ›žๆปพๅˆฐไธŠไธ€ๅ€‹็ฉฉๅฎšๆจกๅž‹่ทฏๅพ‘,ๅ†ๆŽ’ๆŸฅๆ–ฐ็‰ˆๆœฌ。

    5) ้–‹ๆฉŸ่‡ชๅ‹•ๅ•Ÿๅ‹•:็”จ systemd ็ฎกไฝ docker compose

    # /etc/systemd/system/deepseek-v3.service
    [Unit]
    Description=DeepSeek-V3 vLLM (Docker Compose)
    After=network-online.target
    Wants=network-online.target
    
    [Service]
    Type=oneshot
    WorkingDirectory=/opt/llm/deepseek-v3
    ExecStart=/usr/bin/docker compose up -d
    ExecStop=/usr/bin/docker compose down
    RemainAfterExit=yes
    TimeoutStartSec=0
    
    [Install]
    WantedBy=multi-user.target
    
    # ๅ•Ÿ็”จ
    sudo systemctl daemon-reload
    sudo systemctl enable --now deepseek-v3.service
    sudo systemctl status deepseek-v3.service
    

    ๅ…ซ、ๅธธ่ฆ‹ๅ•้กŒ่ˆ‡ๆŽ’้šœๆธ…ๅ–ฎ

    1) ๅฎนๅ™จ็œ‹ไธๅˆฐ GPU

    nvidia-smi
    docker run --rm --gpus all nvidia/cuda:12.4.1-base-ubuntu22.04 nvidia-smi
    
    • ่‹ฅ็ฌฌไบŒ่กŒๅคฑๆ•—:ๅ„ชๅ…ˆๆชขๆŸฅ NVIDIA Driver ่ˆ‡ NVIDIA Container Toolkit。

    2) ๅ•Ÿๅ‹•ๆˆๅŠŸไฝ†่ซ‹ๆฑ‚ๅพˆๆ…ขๆˆ–ๅธธ่ถ…ๆ™‚

    • ๅ…ˆ้™ไฝŽ --max-model-len ่ˆ‡ๆฏๆฌก่ซ‹ๆฑ‚็š„ max_tokens
    • ๆชขๆŸฅ GPU memory ๆ˜ฏๅฆ็ˆ†ๆމ(KV Cache ไธ่ถณๆœƒๅฐŽ่‡ดไบคๆ›/้€€ๅŒ–)。
    • ๆŠŠ Gateway ็š„ proxy_read_timeout ่ชฟๅคง,้ฟๅ…ๅ›žๆ‡‰่ขซๅˆ‡ๆ–ท。

    3) /metrics ๆŠ“ไธๅˆฐ

    • ๅ…ˆ็ขบ่ช:curl http://127.0.0.1:8000/metrics
    • ่‹ฅ่ตฐ Nginx:็ขบ่ช allowlist ่ˆ‡ proxy_pass ่ทฏๅพ‘。

    4) ๆจกๅž‹ๆ›ดๆ–ฐๅพŒๅ‡บ็พไธ็›ธๅฎนๆˆ–่กŒ็‚บๆ”น่ฎŠ

    • ไปฅๆจกๅž‹็‰ˆๆœฌ่ณ‡ๆ–™ๅคพๅฟซ้€Ÿๅ›žๆปพ。
    • ไฟ็•™ไธ€ไปฝ「ๅ›บๅฎšๆธฌ่ฉฆ้›†」(ๆ็คบ่ฉž + ๆœŸๆœ›่ผธๅ‡บ้ขจๆ ผ)ๅš smoke test。

    ๐Ÿ’ฌ ไบ’ๅ‹•็•™่จ€

    ไฝ ็›ฎๅ‰็š„้ƒจ็ฝฒ็’ฐๅขƒๆ˜ฏๅ–ฎๆฉŸ、ๅคš GPU,้‚„ๆ˜ฏๆบ–ๅ‚™่ตฐ K8s / Ray ็š„ๅˆ†ๆ•ฃๅผๆŽจ่ซ–?ไนŸๆญก่ฟŽๅˆ†ไบซไฝ ้‡ๅˆฐ็š„็“ถ้ ธ(GPU ่จ˜ๆ†ถ้ซ”、ๅปถ้ฒ、ไฝต็™ผ、ๆฌŠ้™ๆŽง็ฎก、็›ฃๆŽงๆŒ‡ๆจ™)。

    • ๆƒณ็œ‹ไธ‹ไธ€็ฏ‡:K8s ไธŠ็ทš(HPA/่‡ชๅ‹•ๆ“ด็ธฎ/็ฐๅบฆ็™ผ็‰ˆ)่ˆ‡ๆจกๅž‹ๅ›žๆปพ็ญ–็•ฅ
    • ๆƒณ็œ‹ๅฏฆไฝœ:RAG(ๅ‘้‡ๅบซ)+ๅ…ง็ถฒ OpenAI-Compatible API ็š„ๆ•ดๅˆ็ฏ„ๆœฌ
    • ๆƒณ็œ‹ๆฒป็†:้ƒจ้–€้…้ก、ๅฏฉ่จˆๆ—ฅๅฟ—、ๆ็คบ่ฉž้ฎ็ฝฉ่ˆ‡่ณ‡ๆ–™้˜ฒๅค–ๆดฉ

    ๆœ€ๅพŒๆ›ดๆ–ฐ:2026-01-02 · ไฝœ่€…:WWFandy

    ๐Ÿ”— ๅˆ†ไบซ้€™็ฏ‡ LINE Facebook X

    ๆฒ’ๆœ‰็•™่จ€:

    ๅผต่ฒผ็•™่จ€

    ๅญ—็ดš