| # One-Click All-Local Deployment |
|
|
| This profile runs the full runtime without hosted model providers. |
|
|
| It starts: |
|
|
| - GLM-5.2 reasoning through local vLLM using `zai-org/GLM-5.2-FP8`. |
| - Qwen Omni vision/audio/video understanding through local vLLM-Omni using `Qwen/Qwen3-Omni-30B-A3B-Instruct`. |
| - Local OCR service built from this repo. |
| - Gateway API under `glm-5.2-visual-runtime`. |
| - PostgreSQL and MinIO for persistence. |
|
|
| ## Start |
|
|
| ```bash |
| cp one_click/.env.all-local.example one_click/.env.all-local |
| docker compose -f one_click/docker-compose.all-local.yml --env-file one_click/.env.all-local up --build |
| ``` |
|
|
| By default, vLLM downloads checkpoints from Hugging Face at startup. For a physically self-contained repo, first populate and upload `models/`, then set local paths in `one_click/.env.all-local`: |
|
|
| ```bash |
| python scripts/materialize_weights.py --profile glm52_plus_qwen_omni |
| hf upload-large-folder wassemgtk/glm-5.2-visual-runtime models --type model |
| ``` |
|
|
| ```bash |
| GLM_MODEL_PATH=/models/zai-org/GLM-5.2-FP8 |
| QWEN_OMNI_MODEL_PATH=/models/Qwen/Qwen3-Omni-30B-A3B-Instruct |
| ``` |
|
|
| Gateway: |
|
|
| ```text |
| http://localhost:8000/v1 |
| ``` |
|
|
| Reasoning vLLM: |
|
|
| ```text |
| http://localhost:8001/v1 |
| ``` |
|
|
| Vision vLLM: |
|
|
| ```text |
| http://localhost:8002/v1 |
| ``` |
|
|
| OCR: |
|
|
| ```text |
| http://localhost:8081/ocr |
| ``` |
|
|
| ## Hardware |
|
|
| This is a real local deployment profile. GLM-5.2-FP8 and Qwen3-Omni are large checkpoints and require a serious multi-GPU environment. If you do not have enough GPU memory, the gateway can still run in `test` mode, but the all-local model services will not start. |
|
|
| ## Smoke Test |
|
|
| ```bash |
| python vllm/openai_smoke_test.py |
| ``` |
|
|
| For the gateway: |
|
|
| ```python |
| from openai import OpenAI |
| |
| client = OpenAI(base_url="http://localhost:8000/v1", api_key="EMPTY") |
| response = client.responses.create( |
| model="glm-5.2-visual-runtime", |
| input=[{"role": "user", "content": [{"type": "input_text", "text": "Say ready"}]}], |
| ) |
| print(response.output_text) |
| ``` |
|
|