zdroj: https://cefboud.com/posts/coding-agent-self-hosted-llm-opencode-vllm
Publikováno 7. března 2026, autor Moncef Abboud
Obsah:
- Zajištění GPU
- Spuštění vLLM
- Bezpečný přístup k modelu (SSH‑tunel)
- Testování modelu
- Propojení s Opencode
- O nastavení
max_tokens - Měření výkonu vLLM
- Závěr
Zajištění GPU
Pro ukázku použiji Lambda jako poskytovatele GPU, ale libovolný poskytovatel funguje. Stačí se zaregistrovat zde, doplnit platební údaje a vytvořit virtuální stroj s GPU.

Po vytvoření VM získáte veřejnou IP adresu a přidáte SSH‑klíč (privátní klíč, který použijete později):
export IP=<vaše_ip_adresa>
ssh -i path/to/private_key ubuntu@$IP
Na serveru máte k dispozici GPU např. NVIDIA A10 (96 GB VRAM). Ověřit můžete příkazem:
nvidia-smi
Spuštění vLLM
V našem příkladu použijeme model Qwen/Qwen2.5-Coder-7B-Instruct (7 M parametrů, solidní výkon). vLLM je knihovna umožňující rychlé nasazení LLM s OpenAI‑kompatibilním API.
Docker příkaz, který spustí vLLM a stáhne model z Hugging Face, vypadá takto:
# proměnná s názvem modelu
export MODEL="Qwen/Qwen2.5-Coder-7B-Instruct"
# spustíme kontejner (použijeme všechny GPU)
sudo docker run --gpus all --rm -p 8000:8000 \
vllm/vllm-openai:latest \
--model $MODEL \
--dtype auto \
--max-model-len 32768 \
--gpu-memory-utilization 0.95 \
--enable-auto-tool-choice \
--tool-call-parser hermes
Po stažení modelu (cca 7–10 GB) kontejner spustí HTTP‑server na portu 8000. GPU jsou sdíleny díky parametru --gpus all.
Bezpečný přístup k modelu (SSH‑tunel)
Na Lambda serveru je otevřen pouze port 22 (SSH). Pro přístup z lokálního počítače použijeme SSH‑tunel:
ssh -i path/to/private_key -N -L 8000:localhost:8000 ubuntu@$IP
Po tomto příkazu můžete k modelu přistupovat na http://localhost:8000 (na svém počítači).
Testování modelu
Jednoduchý test pomocí curl:
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen/Qwen2.5-Coder-7B-Instruct",
"messages": [
{"role":"user","content":"Napiš HTML stránku, která popisuje nějaké zábavné téma."}
]
}'
Pro streamování tokenů (stejně jako u OpenAI) přidejte "stream": true:
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen/Qwen2.5-Coder-7B-Instruct",
"messages": [
{"role":"user","content":"Napiš HTML stránku, která popisuje nějaké zábavné téma."}
],
"stream": true
}'
Propojení s Opencode
Opencode je otevřený coding‑agent (podobný Claude Code nebo Codex). Jeho konfigurace je v souboru opencode.json (nebo globálně v ~/.config/opencode/opencode.json).
Přidejte následující nastavení, aby Opencode používal náš lokální vLLM server:
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"cefprovider": {
"npm": "@ai-sdk/openai-compatible",
"name": "Cef Lambda Provider",
"options": {
"baseURL": "http://localhost:8000/v1"
},
"models": {
"Qwen/Qwen2.5-Coder-7B-Instruct": {
"name": "Cef Model",
"options": {
"max_tokens": 20000
}
}
}
}
}
}
Spusťte opencode a zadejte /models – nový model by se měl objevit v seznamu. Nyní můžete do Opencode zadávat požadavky (např. „Napiš funkci v Pythonu, která načte CSV“).
O nastavení max_tokens
V našem configu je nastaveno "max_tokens": 20000, i když model má limit 32768. Důvod: max_tokens představuje celkový výstup (včetně vstupního promptu). Bezpečné číslo spočítáte jako:
# max_context - input_tokens
32768 - 10694 = 22074 # takže 20000 je v bezpečném rozmezí
Příliš vysoké max_tokens vyvolá chybu:
'max_tokens' or 'max_completion_tokens' is too large: 32000.
This model's maximum context length is 32768 tokens and your request has 10694 input tokens (32000 > 32768 - 10694).
Měření výkonu vLLM
vLLM poskytuje endpoint /metrics (Prometheus kompatibilní). Můžete ho přidat do Grafana dashboardu a sledovat např.:
- E2E latency – celkový čas od přijetí požadavku po poslední token.
- TTFT (Time‑to‑First‑Token) – čas do první tokenové výstupní.
- TPOT / ITL (Time‑per‑Output‑Token) – průměrná doba mezi tokeny.
Ukázka nasazení Grafana dashboardu (z vllm/examples/online_serving/prometheus_grafana):
# klonování a spuštění
git clone https://github.com/vllm-project/vllm.git
cd vllm/examples/online_serving/prometheus_grafana
docker compose up
Po nasazení přidejte Prometheus data source a importujte soubor grafana.json. Výsledek by měl vypadat přibližně takto:

Závěr
Takto získáte plně self‑hostovaný stack pro kódovací agenty – model, inference server, SSH tunel a samotný agent (Opencode). Vše běží pod vaší kontrolou, bez potřeby komerčních API.
Článek přeložil ChatGPT (OpenAI) a upravil pro WordPress.