Files
OpenCode 68a9071cf1 feat: reconcile local master with origin (exa/hot-platform hunters, leaks ledger, latest results)
Local branch had diverged from origin/master (sibling commits on the same base). Rewrote local history linearly on top of origin/master, folding in all local content: exa/hot-platform discovery hunters, leaks ledger, nightly sweep orchestrator, updated .gitignore and skill docs, plus the latest hunt output and vault state. Remote-only files (vault keys, channel scripts) were restored rather than dropped, so the resulting tree is a full union of both sides.
2026-08-07 12:53:47 +08:00

1 line
90 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"repo": "amd/playbooks", "files": {"auto-translations/zh-CN/supplemental/deepseek-v4-flash-ds4/README.md": {"2c91fd969a341f9f82591458a50acd1791738b33": {"t": 1785747257.252161, "n": 12125, "h": "1f42a56f6201fc00", "c": "<!--\nCopyright Advanced Micro Devices, Inc.\n\nSPDX-License-Identifier: MIT\n-->\n\n<!-- auto-translated-disclaimer v1 -->\n> [!WARNING]\n> **机器翻译。**本页面由英文自动翻译而成,尚未经过人工审核。其中可能存在错误,部分步骤、命令、下载内容或产品的可用性在您所在的语言或地区可能有所不同。如发现任何问题,请以英文原版 playbook 为准。\n<!-- auto-translated-disclaimer:end -->\n\n<!-- @github-only -->\n> [!IMPORTANT]\n> 本行动手册使用了 GitHub 无法渲染的特殊标签。请访问 [amd.com/playbooks](https://amd.com/playbooks) 以正确预览此内容。\n<!-- @github-only:end -->\n\n## 概述\n\n[DeepSeek V4 Flash](https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash) 是 DeepSeek V4 系列中专注于效率的变体——一个拥有 2840 亿参数的混合专家(Mixture of Experts)模型,激活参数为 130 亿。根据[DeepSeek 的技术报告](https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash),该模型在 SWE-bench Verified 上得分 79%,在 LiveCodeBench 上得分 91.6%。\n\n[ds4 (Dwarf Star 4)](https://github.com/antirez/ds4) 是专门为该模型架构构建的专用推理引擎。与通用运行时不同,ds4 直接针对 DeepSeek V4 系列,为 AMD ROCm™ 软件提供架构特定的内核优化。目前,它是 Strix Halo 上性能最佳的 DeepSeek V4 Flash 实现之一。\n\n本教程展示了如何使用 `ds4-cockpit`(一款终端 UI)来设置 ds4、下载模型权重,并在 AMD Ryzen™ AI Halo 开发者平台上本地启动 DeepSeek V4 Flash 服务。\n\n## 您将学到什么\n\n- 如何安装并启动 `ds4-cockpit` 终端 UI\n- 如何创建 ds4 ROCm 工具箱容器\n- 为单个 Halo 节点下载推荐的量化版本\n- 启动 ds4 推理服务器并公开与 OpenAI 兼容的端点\n- 将 Web UI 或编码代理连接到本地服务器\n\n## 设置内存配置\n\n<!-- @require:memory-config -->\n\n## 安装软件先决条件\n\n> **本配置的系统要求(单节点 IQ2_XXS,126k 上下文):**\n> - 一台**至少配备 128 GB 统一内存**的 Strix Halo 系统。\n> - **BIOS 专用 VRAM(UMA 帧缓冲区)设置为最低值**,以便共享内存池尽可能大。\n> - GPU **共享内存池至少设置为 110 GB**:运行 `amd-ttm --set 110`(参见上面的内存配置步骤)并重启。如果模型在 126k 上下文下加载时数值过低,可能会导致内存不足。如果您的系统可用内存较少,请改为在服务器模式中降低**上下文(Context)**值。\n>\n> **注意:** 尝试将**GPU 共享内存池**设置为 **110 GB** 作为起始值。如果遇到内存不足错误,请增加共享内存池或降低上下文大小。\n\nds4-cockpit 使用容器工具箱来运行 ds4 引擎。请安装 `podman`、`distrobox` 和 `pipx`:\n\n```bash\nsudo apt update\nsudo apt install -y podman distrobox pipx\n```\n\n<!-- @test:id=ds4-prereqs-linux timeout=60 hidden=True -->\n```bash\nset -euo pipefail\nexport PATH=\"$HOME/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH\"\npodman --version\ndistrobox version 2>/dev/null || distrobox --version\npipx --version\necho \"OK: podman, distrobox, and pipx are installed\"\n```\n<!-- @test:end -->\n\n## 可用的量化版本\n\nds4 的作者提供了多个采用 GGUF 格式的 DeepSeek V4 Flash 量化版本。以下所有模型都使用了重要性矩阵(imatrix)校准,该方法可为模型中对编码和推理任务最重要的部分保留更高的精度。\n\n| 量化版本 | 大小 | 说明 |\n|-------------|------|-------------|\n| [IQ2_XXS imatrix](https://huggingface.co/antirez/deepseek-v4-gguf) | ~80.8 GB | 推荐用于单个 128 GB 节点 |\n| [Hybrid Q2/Q4 imatrix](https://huggingface.co/antirez/deepseek-v4-gguf) | ~97 GB | 第 37–42 层保持 Q4 精度以获得更好的准确性。可容纳于 128 GB,但为上下文留出的空间较少 |\n| [Q4 imatrix](https://huggingface.co/antirez/deepseek-v4-gguf) | ~153 GB | 更高质量。需要通过多节点集群使用两个 Halo 节点 |\n| [MTP Speculative Decoding](https://huggingface.co/antirez/deepseek-v4-gguf) | ~3.6 GB | 用于推测解码的可选附加组件,以提升生成速度 |\n\n**IQ2_XXS imatrix** 模型是一个不错的起点。它可以轻松容纳在单个节点中,并为合理的上下文窗口留出了足够的内存。\n\n## 安装 ds4-cockpit\n\n[ds4-cockpit](https://github.com/kyuz0/strix-halo-ds4-toolbox) 是一款轻量级终端 UI,可让您轻松在 Strix Halo 上运行 ds4。它负责创建工具箱容器、下载模型权重以及启动服务器。使用 `pipx` 安装:\n\n```bash\npipx install \"git+https://github.com/kyuz0/strix-halo-ds4-toolbox.git#subdirectory=ds4-strix-halo-cockpit\"\n```\n\n启动 cockpit:\n```bash\nds4-cockpit\n```\n\n<!-- @test:id=ds4-cockpit-linux timeout=60 hidden=True -->\n```bash\nset -euo pipefail\nexport PATH=\"$HOME/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH\"\n# Verify the pipx-installed cockpit entry point is on PATH (do NOT launch the TUI).\ncommand -v ds4-cockpit\necho \"OK: ds4-cockpit is installed and on PATH\"\n```\n<!-- @test:end -->\n\n## 创建工具箱\n\n在**交互式工具箱(Interactive Toolboxes)**选项卡中,选择最新的可用/稳定工具箱(例如 `ds4-rocm-7.2.4`),然后点击**创建/更新(Create/Update)**。这将拉取容器镜像并创建工具箱环境。\n\n\n<p align=\"center\">\n <img src=\"assets/ds4-cockpit-toolboxes.png\" alt=\"Selecting the ds4 toolbox in ds4-cockpit\" width=\"800\"/>\n</p>\n\n<!-- @test:id=ds4-toolbox-image-linux timeout=120 hidden=True -->\n```bash\nset -euo pipefail\nexport PATH=\"$HOME/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH\"\n\n# The toolbox version changes over time, so match the image family, not a fixed tag.\nif ! podman images --format '{{.Repository}}:{{.Tag}}' | grep -i 'strix-halo-ds4-toolbox'; then\n echo \"No strix-halo-ds4-toolbox image found. Create the toolbox in ds4-cockpit (Interactive Toolboxes tab) first.\"\n exit 1\nfi\necho \"OK: ds4 toolbox container image is present\"\n```\n<!-- @test:end -->\n\n## 下载模型\n\n前往**模型管理器(Model Manager)**选项卡。从下拉菜单中选择 **IQ2_XXS imatrix (~80.8 GB)**,然后点击**下载(Download)**。模型文件默认将保存到 `~/ds4`(您可以更改存储路径)。\n\n> **注意:** IQ2_XXS 模型大小约为 80 GB,因此根据您的网络连接情况,下载可能需要一段时间。下载完成后即可继续操作。\n\n<p align=\"center\">\n <img src=\"assets/ds4-cockpit-model-manager.png\" alt=\"Selecting and downloading the IQ2_XXS model\" width=\"800\"/>\n</p>\n\n<!-- @test:id=ds4-model-downloaded-linux timeout=60 hidden=True -->\n```bash\nset -euo pipefail\n\n# ds4-cockpit saves model weights to ~/ds4 by default\nmodel_dir=\"$HOME/ds4\"\n\nif [ ! -d \"$model_dir\" ]; then\n echo \"Model directory $model_dir does not exist. Download the model in ds4-cockpit (Model Manager tab) first.\"\n exit 1\nfi\n\nif ! find \"$model_dir\" -maxdepth 2 -iname '*.gguf' | grep -q .; then\n echo \"No .gguf model files found under $model_dir. Download the IQ2_XXS imatrix model in ds4-cockpit first.\"\n exit 1\nfi\n\n# Prefer to confirm the recommended IQ2_XXS imatrix quantization is present.\nif find \"$model_dir\" -maxdepth 2 -iname '*IQ2*imatrix*.gguf' | grep -q .; then\n echo \"OK: IQ2_XXS imatrix model is downloaded\"\nelse\n echo \"OK: a GGUF model is present (recommended IQ2_XXS imatrix file not detected by name)\"\nfi\n```\n<!-- @test:end -->\n\n## 启动服务器\n\n前往**服务器模式(Server Mode)**选项卡。选择已下载的模型和工具箱,然后配置上下文大小、主机和端口。准备就绪后,点击**启动 ds4-server(Start ds4-server)**。\n\n> **提示** `126000` 的上下文大小是一个合理的起始值,应该能够容纳在单个节点中——如果您有多余的内存,可以将其设置得更高;如果遇到内存不足错误,则可以降低该值。本指南中的端口(`8000`)是随意选定的;您可以选择任何空闲端口。\n\n> **KV 磁盘缓存(可选)。** 开启 **KV Disk Cache** 会将 KV 缓存卸载到磁盘(位于**主机缓存目录(Host Cache Dir)**,默认为 `~/.cache/ds4-kv`),这样重复的系统提示词就可以从 SSD 中恢复,而无需重新计算。这是针对具有长而重复提示词的编码代理工作流的一项性能优化,**并非**运行服务器所必需的。\n\n<p align=\"center\">\n <img src=\"assets/ds4-cockpit-server-mode.png\" alt=\"Configuring and starting the ds4 server\" width=\"800\"/>\n</p>\n\n服务器将启动并监听 8000 端口,在 `http://localhost:8000/v1` 公开一个与 OpenAI 兼容的 API 端点。\n\n**快速测试:**\n```bash\ncurl http://127.0.0.1:8000/v1/chat/completions \\\n -H 'Content-Type: application/json' \\\n -d '{\n \"model\": \"deepseek-v4-flash\",\n \"messages\": [{\"role\": \"user\", \"content\": \"Hello!\"}],\n \"stream\": false\n }'\n```\n\n<!-- @test:id=ds4-server-chat-linux timeout=1200 hidden=True -->\n```bash\nset -euo pipefail\n\n# This runner is shared with other playbooks, and ds4 at a 126k context consumes almost the entire GPU memory pool.\n# So rather than keeping ds4 resident, CI starts the server, verifies a chat completion, then stops it again.\n# This frees the memory for the next job.\n# ds4 has no separate \"unload\"; stopping the server process is what releases the ~80 GB model.\n\nCONTAINER=\"ds4-ci-server\"\nMODEL_DIR=\"$HOME/ds4\"\n\n# Locate the downloaded model (prefer the recommended IQ2_XXS imatrix file).\nmodel_file=\"$(find \"$MODEL_DIR\" -maxdepth 2 -iname '*IQ2*imatrix*.gguf' 2>/dev/null | head -1)\"\nif [ -z \"$model_file\" ]; then\n model_file=\"$(find \"$MODEL_DIR\" -maxdepth 2 -iname '*.gguf' 2>/dev/null | head -1)\"\nfi\nif [ -z \"$model_file\" ]; then\n echo \"No .gguf model found under $MODEL_DIR. Download it in ds4-cockpit first.\"\n exit 1\nfi\nmodel_name=\"$(basename \"$model_file\")\"\n\n# Pick the toolbox image (version-agnostic).\nimage=\"$(podman images --format '{{.Repository}}:{{.Tag}}' | grep -i 'strix-halo-ds4-toolbox' | head -1)\"\nif [ -z \"$image\" ]; then\n echo \"No strix-halo-ds4-toolbox image found. Create the toolbox in ds4-cockpit first.\"\n exit 1\nfi\n\n# Always stop/remove the server on exit so it never holds GPU memory afterwards.\ncleanup() {\n podman stop -t 10 \"$CONTAINER\" >/dev/null 2>&1 || true\n podman rm -f \"$CONTAINER\" >/dev/null 2>&1 || true\n}\ntrap cleanup EXIT\n\n# Remove any stale instance, then start ds4-server detached (same flags ds4-cockpit uses, with -d instead of -it).\npodman rm -f \"$CONTAINER\" >/dev/null 2>&1 || true\npodman run -d --name \"$CONTAINER\" \\\n --device /dev/dri --device /dev/kfd \\\n --group-add keep-groups \\\n --security-opt seccomp=unconfined \\\n --ipc=host \\\n --cap-add=SYS_PTRACE \\\n --security-opt label=disable \\\n --userns=keep-id \\\n -p 127.0.0.1:8000:8000 \\\n -v \"$MODEL_DIR\":/models:ro \\\n \"$image\" \\\n ds4-server -m \"/models/$model_name\" --ctx 126000 --host 0.0.0.0 --port 8000\n\n# Wait for readiness; the ~80 GB model can take a few minutes to load.\nup=false\nfor i in $(seq 1 240); do\n code=\"$(curl -s -o /dev/null -w '%{http_code}' --max-time 3 http://127.0.0.1:8000/v1/models || true)\"\n if [ -n \"$code\" ] && [ \"$code\" != \"000\" ]; then\n up=true\n break\n fi\n if ! podman inspect -f '{{.State.Running}}' \"$CONTAINER\" 2>/dev/null | grep -q true; then\n echo \"ds4-server container exited during startup:\"\n podman logs \"$CONTAINER\" 2>&1 | tail -40 || true\n exit 1\n fi\n sleep 2\ndone\n\nif [ \"$up\" != \"true\" ]; then\n echo \"ds4 server did not become ready on http://127.0.0.1:8000\"\n podman logs \"$CONTAINER\" 2>&1 | tail -40 || true\n exit 1\nfi\necho \"OK: ds4 server is responding on :8000\"\n\nbody='{\n \"model\": \"deepseek-v4-flash\",\n \"messages\": [{\"role\": \"user\", \"content\": \"Reply with exactly: OK\"}],\n \"temperature\": 0,\n \"max_tokens\": 32,\n \"stream\": false\n}'\n\nout=\"$(curl -sS --fail-with-body --max-time 300 http://127.0.0.1:8000/v1/chat/completions \\\n -H 'Content-Type: application/json' \\\n -d \"$body\")\"\n\nif [ -z \"$out\" ]; then\n echo \"Empty response from ds4 /v1/chat/completions\"\n exit 1\nfi\n\nexport DS4_OUT=\"$out\"\npython3 - <<'PY'\nimport json, os, sys\n\ndata = json.loads(os.environ[\"DS4_OUT\"])\nchoices = data.get(\"choices\")\nif not choices:\n print(\"Response has no 'choices':\")\n print(json.dumps(data, indent=2)[:2000])\n sys.exit(1)\n\nmessage = choices[0].get(\"message\", {}) or {}\ncontent = message.get(\"content\") or message.get(\"reasoning_content\")\nif not content:\n print(\"Response choice has empty content:\")\n print(json.dumps(data, indent=2)[:2000])\n sys.exit(1)\n\nprint(\"OK: ds4 chat/completions returned content\")\nPY\n\necho \"OK: ds4 server test complete; server stopped and GPU memory released\"\n```\n<!-- @test:end -->\n\n## 连接 Web UI\n\n您可以连接任何支持 OpenAI API 格式的聊天界面。例如,使用 HuggingFace ChatUI:\n\n```bash\ndocker run -p 3000:3000 \\\n --add-host=host.docker.internal:host-gateway \\\n -e OPENAI_BASE_URL=http://host.docker.internal:8000/v1 \\\n -e OPENAI_API_KEY=dummy \\\n -v chat-ui-data:/data \\\n ghcr.io/huggingface/chat-ui-db\n```\n\n在浏览器中打开 `http://localhost:3000` 即可开始聊天。\n## 连接编码代理\n\nds4 服务器同时暴露了兼容 OpenAI 和 Anthropic 的端点,因此大多数编码代理都可以直接连接到它。例如,要将其添加到 `pi` 编码代理中,请将以下代码块添加到 `~/.pi/agent/models.json`:\n\n```json\n\"ds4\": {\n \"name\": \"ds4.c local\",\n \"baseUrl\": \"http://localhost:8000/v1\",\n \"api\": \"openai-completions\",\n \"apiKey\": \"dsv4-local\",\n \"compat\": {\n \"supportsStore\": false,\n \"supportsDeveloperRole\": false,\n \"supportsReasoningEffort\": true,\n \"supportsUsageInStreaming\": true,\n \"maxTokensField\": \"max_tokens\",\n \"supportsStrictMode\": false,\n \"thinkingFormat\": \"deepseek\",\n \"requiresReasoningContentOnAssistantMessages\": true\n },\n \"models\": [\n {\n \"id\": \"deepseek-v4-flash\",\n \"name\": \"DeepSeek V4 Flash (ds4.c local)\",\n \"reasoning\": true,\n \"thinkingLevelMap\": {\n \"off\": null,\n \"minimal\": \"low\",\n \"low\": \"low\",\n \"medium\": \"medium\",\n \"high\": \"high\",\n \"xhigh\": \"xhigh\"\n },\n \"input\": [\"text\"],\n \"contextWindow\": 131072,\n \"maxTokens\": 65536,\n \"cost\": { \"input\": 0, \"output\": 0, \"cacheRead\": 0, \"cacheWrite\": 0 }\n }\n ]\n}\n```\n\n> **提示**:如果您的编码代理或 Web UI 运行在与 Halo 平台不同的机器上,您需要通过 SSH 转发 8000 端口:\n> ```bash\n> ssh -L 0.0.0.0:8000:localhost:8000 <halo-host-ip>\n> ```\n\n## 后续步骤\n\n- **多节点集群**:如果您拥有两台 Halo 设备,ds4 支持通过流水线并行将 Q4 模型(约 153 GB)分布到两台机器上。有关设置说明,请参阅 [ds4-toolbox 文档](https://github.com/kyuz0/strix-halo-ds4-toolbox#distributed-inference-pipeline-parallelism)。\n- **推测解码(MTP)**:下载 MTP 权重(约 3.6 GB),并向服务器传递 `--mtp` 参数以获得更快的生成速度。\n- **KV 缓存磁盘卸载**:对于编码代理工作流,启用 `--kv-disk-dir`,这样重复的系统提示词可以从 SSD 中恢复,而无需每次都重新计算。\n\n更多信息,请参阅 [ds4 仓库](https://github.com/antirez/ds4) 和 [ds4-cockpit 工具箱](https://github.com/kyuz0/strix-halo-ds4-toolbox)。"}, "67e50b3269457cc2cd7f06e97fee2c834080e0b9": {"t": 1785771884.8442063, "n": 12125, "h": "1f42a56f6201fc00", "c": "<!--\nCopyright Advanced Micro Devices, Inc.\n\nSPDX-License-Identifier: MIT\n-->\n\n<!-- auto-translated-disclaimer v1 -->\n> [!WARNING]\n> **机器翻译。**本页面由英文自动翻译而成,尚未经过人工审核。其中可能存在错误,部分步骤、命令、下载内容或产品的可用性在您所在的语言或地区可能有所不同。如发现任何问题,请以英文原版 playbook 为准。\n<!-- auto-translated-disclaimer:end -->\n\n<!-- @github-only -->\n> [!IMPORTANT]\n> 本行动手册使用了 GitHub 无法渲染的特殊标签。请访问 [amd.com/playbooks](https://amd.com/playbooks) 以正确预览此内容。\n<!-- @github-only:end -->\n\n## 概述\n\n[DeepSeek V4 Flash](https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash) 是 DeepSeek V4 系列中专注于效率的变体——一个拥有 2840 亿参数的混合专家(Mixture of Experts)模型,激活参数为 130 亿。根据[DeepSeek 的技术报告](https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash),该模型在 SWE-bench Verified 上得分 79%,在 LiveCodeBench 上得分 91.6%。\n\n[ds4 (Dwarf Star 4)](https://github.com/antirez/ds4) 是专门为该模型架构构建的专用推理引擎。与通用运行时不同,ds4 直接针对 DeepSeek V4 系列,为 AMD ROCm™ 软件提供架构特定的内核优化。目前,它是 Strix Halo 上性能最佳的 DeepSeek V4 Flash 实现之一。\n\n本教程展示了如何使用 `ds4-cockpit`(一款终端 UI)来设置 ds4、下载模型权重,并在 AMD Ryzen™ AI Halo 开发者平台上本地启动 DeepSeek V4 Flash 服务。\n\n## 您将学到什么\n\n- 如何安装并启动 `ds4-cockpit` 终端 UI\n- 如何创建 ds4 ROCm 工具箱容器\n- 为单个 Halo 节点下载推荐的量化版本\n- 启动 ds4 推理服务器并公开与 OpenAI 兼容的端点\n- 将 Web UI 或编码代理连接到本地服务器\n\n## 设置内存配置\n\n<!-- @require:memory-config -->\n\n## 安装软件先决条件\n\n> **本配置的系统要求(单节点 IQ2_XXS,126k 上下文):**\n> - 一台**至少配备 128 GB 统一内存**的 Strix Halo 系统。\n> - **BIOS 专用 VRAM(UMA 帧缓冲区)设置为最低值**,以便共享内存池尽可能大。\n> - GPU **共享内存池至少设置为 110 GB**:运行 `amd-ttm --set 110`(参见上面的内存配置步骤)并重启。如果模型在 126k 上下文下加载时数值过低,可能会导致内存不足。如果您的系统可用内存较少,请改为在服务器模式中降低**上下文(Context)**值。\n>\n> **注意:** 尝试将**GPU 共享内存池**设置为 **110 GB** 作为起始值。如果遇到内存不足错误,请增加共享内存池或降低上下文大小。\n\nds4-cockpit 使用容器工具箱来运行 ds4 引擎。请安装 `podman`、`distrobox` 和 `pipx`:\n\n```bash\nsudo apt update\nsudo apt install -y podman distrobox pipx\n```\n\n<!-- @test:id=ds4-prereqs-linux timeout=60 hidden=True -->\n```bash\nset -euo pipefail\nexport PATH=\"$HOME/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH\"\npodman --version\ndistrobox version 2>/dev/null || distrobox --version\npipx --version\necho \"OK: podman, distrobox, and pipx are installed\"\n```\n<!-- @test:end -->\n\n## 可用的量化版本\n\nds4 的作者提供了多个采用 GGUF 格式的 DeepSeek V4 Flash 量化版本。以下所有模型都使用了重要性矩阵(imatrix)校准,该方法可为模型中对编码和推理任务最重要的部分保留更高的精度。\n\n| 量化版本 | 大小 | 说明 |\n|-------------|------|-------------|\n| [IQ2_XXS imatrix](https://huggingface.co/antirez/deepseek-v4-gguf) | ~80.8 GB | 推荐用于单个 128 GB 节点 |\n| [Hybrid Q2/Q4 imatrix](https://huggingface.co/antirez/deepseek-v4-gguf) | ~97 GB | 第 37–42 层保持 Q4 精度以获得更好的准确性。可容纳于 128 GB,但为上下文留出的空间较少 |\n| [Q4 imatrix](https://huggingface.co/antirez/deepseek-v4-gguf) | ~153 GB | 更高质量。需要通过多节点集群使用两个 Halo 节点 |\n| [MTP Speculative Decoding](https://huggingface.co/antirez/deepseek-v4-gguf) | ~3.6 GB | 用于推测解码的可选附加组件,以提升生成速度 |\n\n**IQ2_XXS imatrix** 模型是一个不错的起点。它可以轻松容纳在单个节点中,并为合理的上下文窗口留出了足够的内存。\n\n## 安装 ds4-cockpit\n\n[ds4-cockpit](https://github.com/kyuz0/strix-halo-ds4-toolbox) 是一款轻量级终端 UI,可让您轻松在 Strix Halo 上运行 ds4。它负责创建工具箱容器、下载模型权重以及启动服务器。使用 `pipx` 安装:\n\n```bash\npipx install \"git+https://github.com/kyuz0/strix-halo-ds4-toolbox.git#subdirectory=ds4-strix-halo-cockpit\"\n```\n\n启动 cockpit:\n```bash\nds4-cockpit\n```\n\n<!-- @test:id=ds4-cockpit-linux timeout=60 hidden=True -->\n```bash\nset -euo pipefail\nexport PATH=\"$HOME/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH\"\n# Verify the pipx-installed cockpit entry point is on PATH (do NOT launch the TUI).\ncommand -v ds4-cockpit\necho \"OK: ds4-cockpit is installed and on PATH\"\n```\n<!-- @test:end -->\n\n## 创建工具箱\n\n在**交互式工具箱(Interactive Toolboxes)**选项卡中,选择最新的可用/稳定工具箱(例如 `ds4-rocm-7.2.4`),然后点击**创建/更新(Create/Update)**。这将拉取容器镜像并创建工具箱环境。\n\n\n<p align=\"center\">\n <img src=\"assets/ds4-cockpit-toolboxes.png\" alt=\"Selecting the ds4 toolbox in ds4-cockpit\" width=\"800\"/>\n</p>\n\n<!-- @test:id=ds4-toolbox-image-linux timeout=120 hidden=True -->\n```bash\nset -euo pipefail\nexport PATH=\"$HOME/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH\"\n\n# The toolbox version changes over time, so match the image family, not a fixed tag.\nif ! podman images --format '{{.Repository}}:{{.Tag}}' | grep -i 'strix-halo-ds4-toolbox'; then\n echo \"No strix-halo-ds4-toolbox image found. Create the toolbox in ds4-cockpit (Interactive Toolboxes tab) first.\"\n exit 1\nfi\necho \"OK: ds4 toolbox container image is present\"\n```\n<!-- @test:end -->\n\n## 下载模型\n\n前往**模型管理器(Model Manager)**选项卡。从下拉菜单中选择 **IQ2_XXS imatrix (~80.8 GB)**,然后点击**下载(Download)**。模型文件默认将保存到 `~/ds4`(您可以更改存储路径)。\n\n> **注意:** IQ2_XXS 模型大小约为 80 GB,因此根据您的网络连接情况,下载可能需要一段时间。下载完成后即可继续操作。\n\n<p align=\"center\">\n <img src=\"assets/ds4-cockpit-model-manager.png\" alt=\"Selecting and downloading the IQ2_XXS model\" width=\"800\"/>\n</p>\n\n<!-- @test:id=ds4-model-downloaded-linux timeout=60 hidden=True -->\n```bash\nset -euo pipefail\n\n# ds4-cockpit saves model weights to ~/ds4 by default\nmodel_dir=\"$HOME/ds4\"\n\nif [ ! -d \"$model_dir\" ]; then\n echo \"Model directory $model_dir does not exist. Download the model in ds4-cockpit (Model Manager tab) first.\"\n exit 1\nfi\n\nif ! find \"$model_dir\" -maxdepth 2 -iname '*.gguf' | grep -q .; then\n echo \"No .gguf model files found under $model_dir. Download the IQ2_XXS imatrix model in ds4-cockpit first.\"\n exit 1\nfi\n\n# Prefer to confirm the recommended IQ2_XXS imatrix quantization is present.\nif find \"$model_dir\" -maxdepth 2 -iname '*IQ2*imatrix*.gguf' | grep -q .; then\n echo \"OK: IQ2_XXS imatrix model is downloaded\"\nelse\n echo \"OK: a GGUF model is present (recommended IQ2_XXS imatrix file not detected by name)\"\nfi\n```\n<!-- @test:end -->\n\n## 启动服务器\n\n前往**服务器模式(Server Mode)**选项卡。选择已下载的模型和工具箱,然后配置上下文大小、主机和端口。准备就绪后,点击**启动 ds4-server(Start ds4-server)**。\n\n> **提示** `126000` 的上下文大小是一个合理的起始值,应该能够容纳在单个节点中——如果您有多余的内存,可以将其设置得更高;如果遇到内存不足错误,则可以降低该值。本指南中的端口(`8000`)是随意选定的;您可以选择任何空闲端口。\n\n> **KV 磁盘缓存(可选)。** 开启 **KV Disk Cache** 会将 KV 缓存卸载到磁盘(位于**主机缓存目录(Host Cache Dir)**,默认为 `~/.cache/ds4-kv`),这样重复的系统提示词就可以从 SSD 中恢复,而无需重新计算。这是针对具有长而重复提示词的编码代理工作流的一项性能优化,**并非**运行服务器所必需的。\n\n<p align=\"center\">\n <img src=\"assets/ds4-cockpit-server-mode.png\" alt=\"Configuring and starting the ds4 server\" width=\"800\"/>\n</p>\n\n服务器将启动并监听 8000 端口,在 `http://localhost:8000/v1` 公开一个与 OpenAI 兼容的 API 端点。\n\n**快速测试:**\n```bash\ncurl http://127.0.0.1:8000/v1/chat/completions \\\n -H 'Content-Type: application/json' \\\n -d '{\n \"model\": \"deepseek-v4-flash\",\n \"messages\": [{\"role\": \"user\", \"content\": \"Hello!\"}],\n \"stream\": false\n }'\n```\n\n<!-- @test:id=ds4-server-chat-linux timeout=1200 hidden=True -->\n```bash\nset -euo pipefail\n\n# This runner is shared with other playbooks, and ds4 at a 126k context consumes almost the entire GPU memory pool.\n# So rather than keeping ds4 resident, CI starts the server, verifies a chat completion, then stops it again.\n# This frees the memory for the next job.\n# ds4 has no separate \"unload\"; stopping the server process is what releases the ~80 GB model.\n\nCONTAINER=\"ds4-ci-server\"\nMODEL_DIR=\"$HOME/ds4\"\n\n# Locate the downloaded model (prefer the recommended IQ2_XXS imatrix file).\nmodel_file=\"$(find \"$MODEL_DIR\" -maxdepth 2 -iname '*IQ2*imatrix*.gguf' 2>/dev/null | head -1)\"\nif [ -z \"$model_file\" ]; then\n model_file=\"$(find \"$MODEL_DIR\" -maxdepth 2 -iname '*.gguf' 2>/dev/null | head -1)\"\nfi\nif [ -z \"$model_file\" ]; then\n echo \"No .gguf model found under $MODEL_DIR. Download it in ds4-cockpit first.\"\n exit 1\nfi\nmodel_name=\"$(basename \"$model_file\")\"\n\n# Pick the toolbox image (version-agnostic).\nimage=\"$(podman images --format '{{.Repository}}:{{.Tag}}' | grep -i 'strix-halo-ds4-toolbox' | head -1)\"\nif [ -z \"$image\" ]; then\n echo \"No strix-halo-ds4-toolbox image found. Create the toolbox in ds4-cockpit first.\"\n exit 1\nfi\n\n# Always stop/remove the server on exit so it never holds GPU memory afterwards.\ncleanup() {\n podman stop -t 10 \"$CONTAINER\" >/dev/null 2>&1 || true\n podman rm -f \"$CONTAINER\" >/dev/null 2>&1 || true\n}\ntrap cleanup EXIT\n\n# Remove any stale instance, then start ds4-server detached (same flags ds4-cockpit uses, with -d instead of -it).\npodman rm -f \"$CONTAINER\" >/dev/null 2>&1 || true\npodman run -d --name \"$CONTAINER\" \\\n --device /dev/dri --device /dev/kfd \\\n --group-add keep-groups \\\n --security-opt seccomp=unconfined \\\n --ipc=host \\\n --cap-add=SYS_PTRACE \\\n --security-opt label=disable \\\n --userns=keep-id \\\n -p 127.0.0.1:8000:8000 \\\n -v \"$MODEL_DIR\":/models:ro \\\n \"$image\" \\\n ds4-server -m \"/models/$model_name\" --ctx 126000 --host 0.0.0.0 --port 8000\n\n# Wait for readiness; the ~80 GB model can take a few minutes to load.\nup=false\nfor i in $(seq 1 240); do\n code=\"$(curl -s -o /dev/null -w '%{http_code}' --max-time 3 http://127.0.0.1:8000/v1/models || true)\"\n if [ -n \"$code\" ] && [ \"$code\" != \"000\" ]; then\n up=true\n break\n fi\n if ! podman inspect -f '{{.State.Running}}' \"$CONTAINER\" 2>/dev/null | grep -q true; then\n echo \"ds4-server container exited during startup:\"\n podman logs \"$CONTAINER\" 2>&1 | tail -40 || true\n exit 1\n fi\n sleep 2\ndone\n\nif [ \"$up\" != \"true\" ]; then\n echo \"ds4 server did not become ready on http://127.0.0.1:8000\"\n podman logs \"$CONTAINER\" 2>&1 | tail -40 || true\n exit 1\nfi\necho \"OK: ds4 server is responding on :8000\"\n\nbody='{\n \"model\": \"deepseek-v4-flash\",\n \"messages\": [{\"role\": \"user\", \"content\": \"Reply with exactly: OK\"}],\n \"temperature\": 0,\n \"max_tokens\": 32,\n \"stream\": false\n}'\n\nout=\"$(curl -sS --fail-with-body --max-time 300 http://127.0.0.1:8000/v1/chat/completions \\\n -H 'Content-Type: application/json' \\\n -d \"$body\")\"\n\nif [ -z \"$out\" ]; then\n echo \"Empty response from ds4 /v1/chat/completions\"\n exit 1\nfi\n\nexport DS4_OUT=\"$out\"\npython3 - <<'PY'\nimport json, os, sys\n\ndata = json.loads(os.environ[\"DS4_OUT\"])\nchoices = data.get(\"choices\")\nif not choices:\n print(\"Response has no 'choices':\")\n print(json.dumps(data, indent=2)[:2000])\n sys.exit(1)\n\nmessage = choices[0].get(\"message\", {}) or {}\ncontent = message.get(\"content\") or message.get(\"reasoning_content\")\nif not content:\n print(\"Response choice has empty content:\")\n print(json.dumps(data, indent=2)[:2000])\n sys.exit(1)\n\nprint(\"OK: ds4 chat/completions returned content\")\nPY\n\necho \"OK: ds4 server test complete; server stopped and GPU memory released\"\n```\n<!-- @test:end -->\n\n## 连接 Web UI\n\n您可以连接任何支持 OpenAI API 格式的聊天界面。例如,使用 HuggingFace ChatUI:\n\n```bash\ndocker run -p 3000:3000 \\\n --add-host=host.docker.internal:host-gateway \\\n -e OPENAI_BASE_URL=http://host.docker.internal:8000/v1 \\\n -e OPENAI_API_KEY=dummy \\\n -v chat-ui-data:/data \\\n ghcr.io/huggingface/chat-ui-db\n```\n\n在浏览器中打开 `http://localhost:3000` 即可开始聊天。\n## 连接编码代理\n\nds4 服务器同时暴露了兼容 OpenAI 和 Anthropic 的端点,因此大多数编码代理都可以直接连接到它。例如,要将其添加到 `pi` 编码代理中,请将以下代码块添加到 `~/.pi/agent/models.json`:\n\n```json\n\"ds4\": {\n \"name\": \"ds4.c local\",\n \"baseUrl\": \"http://localhost:8000/v1\",\n \"api\": \"openai-completions\",\n \"apiKey\": \"dsv4-local\",\n \"compat\": {\n \"supportsStore\": false,\n \"supportsDeveloperRole\": false,\n \"supportsReasoningEffort\": true,\n \"supportsUsageInStreaming\": true,\n \"maxTokensField\": \"max_tokens\",\n \"supportsStrictMode\": false,\n \"thinkingFormat\": \"deepseek\",\n \"requiresReasoningContentOnAssistantMessages\": true\n },\n \"models\": [\n {\n \"id\": \"deepseek-v4-flash\",\n \"name\": \"DeepSeek V4 Flash (ds4.c local)\",\n \"reasoning\": true,\n \"thinkingLevelMap\": {\n \"off\": null,\n \"minimal\": \"low\",\n \"low\": \"low\",\n \"medium\": \"medium\",\n \"high\": \"high\",\n \"xhigh\": \"xhigh\"\n },\n \"input\": [\"text\"],\n \"contextWindow\": 131072,\n \"maxTokens\": 65536,\n \"cost\": { \"input\": 0, \"output\": 0, \"cacheRead\": 0, \"cacheWrite\": 0 }\n }\n ]\n}\n```\n\n> **提示**:如果您的编码代理或 Web UI 运行在与 Halo 平台不同的机器上,您需要通过 SSH 转发 8000 端口:\n> ```bash\n> ssh -L 0.0.0.0:8000:localhost:8000 <halo-host-ip>\n> ```\n\n## 后续步骤\n\n- **多节点集群**:如果您拥有两台 Halo 设备,ds4 支持通过流水线并行将 Q4 模型(约 153 GB)分布到两台机器上。有关设置说明,请参阅 [ds4-toolbox 文档](https://github.com/kyuz0/strix-halo-ds4-toolbox#distributed-inference-pipeline-parallelism)。\n- **推测解码(MTP)**:下载 MTP 权重(约 3.6 GB),并向服务器传递 `--mtp` 参数以获得更快的生成速度。\n- **KV 缓存磁盘卸载**:对于编码代理工作流,启用 `--kv-disk-dir`,这样重复的系统提示词可以从 SSD 中恢复,而无需每次都重新计算。\n\n更多信息,请参阅 [ds4 仓库](https://github.com/antirez/ds4) 和 [ds4-cockpit 工具箱](https://github.com/kyuz0/strix-halo-ds4-toolbox)。"}}, "auto-translations/ar/supplemental/deepseek-v4-flash-ds4/README.md": {"e7630fd3d6e6665d69df2a80a26f8f5c73a764fe": {"t": 1786068576.2321622, "n": 15138, "h": "4bcbc1b76fa5fbff", "c": "<!--\nCopyright Advanced Micro Devices, Inc.\n\nSPDX-License-Identifier: MIT\n-->\n\n<!-- auto-translated-disclaimer v2 -->\n> [!WARNING]\n> **الترجمة الآلية.** تمت ترجمة هذه الصفحة تلقائيًا من اللغة الإنجليزية ولم تتم مراجعتها من قِبل مترجم بشري. قد تحتوي على أخطاء، وقد تختلف بعض التعليمات أو الأوامر أو خيارات التنزيل أو مدى توفر المنتج أو أي محتوى آخر باختلاف اللغة أو المنطقة. في حال وجود أي تعارض أو تباين، تكون النسخة الإنجليزية الأصلية من الـ playbook هي النسخة المعتمدة والمرجعية، ويُعمل بها في هذه الحالة.\n<!-- auto-translated-disclaimer:end -->\n\n<!-- @github-only -->\n> [!IMPORTANT]\n> This playbook uses special tags that GitHub cannot render. Please visit [amd.com/playbooks](https://amd.com/playbooks) to correctly preview this content.\n<!-- @github-only:end -->\n\n## نظرة عامة\n\n[DeepSeek V4 Flash](https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash) هو الإصدار المركز على الكفاءة من عائلة DeepSeek V4 — وهو نموذج مزيج من الخبراء (Mixture of Experts) بحجم 284 مليار معامل، مع 13 مليار معامل نشط. وفقًا لـ [التقرير الفني لـ DeepSeek](https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash)، يحقق النموذج 79% في SWE-bench Verified و91.6% في LiveCodeBench.\n\n[ds4 (Dwarf Star 4)](https://github.com/antirez/ds4) هو محرك استدلال مخصص مبني خصيصًا لهندسة هذا النموذج. بدلاً من كونه بيئة تشغيل عامة الغرض، يستهدف ds4 عائلة DeepSeek V4 مباشرةً بتحسينات نواة (kernel) مخصصة للهندسة من أجل برمجيات AMD ROCm™. وهو حاليًا واحد من أفضل التنفيذات أداءً لنموذج DeepSeek V4 Flash على Strix Halo.\n\nيوضح هذا البرنامج التعليمي كيفية استخدام `ds4-cockpit`، وهي واجهة مستخدم طرفية (terminal UI)، لإعداد ds4، وتنزيل أوزان النموذج، وبدء تقديم DeepSeek V4 Flash محليًا على منصة AMD Ryzen™ AI Halo Developer Platform.\n\n## ما ستتعلمه\n\n- كيفية تثبيت وتشغيل واجهة المستخدم الطرفية `ds4-cockpit`\n- كيفية إنشاء حاوية أدوات ROCm الخاصة بـ ds4\n- تنزيل مستوى التكميم (quantization) الموصى به لعقدة Halo واحدة\n- بدء تشغيل خادم استدلال ds4 وكشف نقطة نهاية متوافقة مع OpenAI\n- ربط واجهة ويب أو وكيل برمجي بالخادم المحلي\n\n## ضبط تهيئة الذاكرة\n\n<!-- @require:memory-config -->\n\n## تثبيت متطلبات البرمجيات الأساسية\n\n> **متطلبات النظام لهذا التهيئة (عقدة واحدة IQ2_XXS بسياق 126 ألف):**\n> - نظام Strix Halo بذاكرة موحدة **لا تقل عن 128 جيجابايت**.\n> - ضبط **ذاكرة VRAM المخصصة في BIOS (UMA frame buffer) على الحد الأدنى**، بحيث يكون مجمع الذاكرة المشتركة كبيرًا قدر الإمكان.\n> - ضبط **مجمع ذاكرة GPU المشتركة إلى 110 جيجابايت على الأقل**: نفّذ `amd-ttm --set 110` (انظر خطوة تهيئة الذاكرة أعلاه) ثم أعد التشغيل. قد تفشل القيم الأقل بنفاد الذاكرة عند تحميل النموذج بسياق 126 ألف. إذا كانت الذاكرة المتاحة في نظامك أقل، فقم بخفض قيمة **السياق (Context)** في وضع الخادم بدلاً من ذلك.\n>\n> **ملاحظة:** جرّب ضبط **مجمع ذاكرة GPU المشتركة** على **110 جيجابايت** كنقطة بداية. إذا واجهت أخطاء نفاد الذاكرة، فارفع مجمع الذاكرة المشتركة أو قلّل حجم السياق.\n\nيستخدم ds4-cockpit حاويات أدوات (toolboxes) لتشغيل محرك ds4. قم بتثبيت `podman` و`distrobox` و`pipx`:\n\n```bash\nsudo apt update\nsudo apt install -y podman distrobox pipx\n```\n\n<!-- @test:id=ds4-prereqs-linux timeout=60 hidden=True -->\n```bash\nset -euo pipefail\nexport PATH=\"$HOME/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH\"\npodman --version\ndistrobox version 2>/dev/null || distrobox --version\npipx --version\necho \"OK: podman, distrobox, and pipx are installed\"\n```\n<!-- @test:end -->\n\n## مستويات التكميم المتاحة\n\nيوفر مؤلف ds4 عدة إصدارات مكممة من DeepSeek V4 Flash بتنسيق GGUF. تستخدم جميع النماذج أدناه معايرة مصفوفة الأهمية (imatrix)، التي تحافظ على دقة أعلى للأجزاء الأكثر أهمية من النموذج فيما يخص مهام البرمجة والاستدلال.\n\n| مستوى التكميم | الحجم | الوصف |\n|-------------|------|-------------|\n| [IQ2_XXS imatrix](https://huggingface.co/antirez/deepseek-v4-gguf) | ~80.8 جيجابايت | موصى به لعقدة واحدة بسعة 128 جيجابايت |\n| [Hybrid Q2/Q4 imatrix](https://huggingface.co/antirez/deepseek-v4-gguf) | ~97 جيجابايت | يبقي الطبقات من 37 إلى 42 بدقة Q4 لتحسين الدقة. يناسب 128 جيجابايت لكن يترك مساحة أقل للسياق |\n| [Q4 imatrix](https://huggingface.co/antirez/deepseek-v4-gguf) | ~153 جيجابايت | جودة أعلى. يتطلب عقدتي Halo عبر التجميع متعدد العقد (multi-node clustering) |\n| [MTP Speculative Decoding](https://huggingface.co/antirez/deepseek-v4-gguf) | ~3.6 جيجابايت | إضافة اختيارية لفك الترميز التخميني لتحسين سرعة التوليد |\n\nيُعد نموذج **IQ2_XXS imatrix** نقطة انطلاق جيدة. فهو يناسب عقدة واحدة بشكل مريح ويترك ذاكرة كافية لنافذة سياق معقولة.\n\n## تثبيت ds4-cockpit\n\n[ds4-cockpit](https://github.com/kyuz0/strix-halo-ds4-toolbox) هي واجهة مستخدم طرفية خفيفة لتسهيل الإعداد والتشغيل السريع لـ ds4 على Strix Halo. تتولى إنشاء حاويات الأدوات (toolboxes)، وتنزيل أوزان النموذج، وبدء تشغيل الخوادم. قم بتثبيتها باستخدام `pipx`:\n\n```bash\npipx install \"git+https://github.com/kyuz0/strix-halo-ds4-toolbox.git#subdirectory=ds4-strix-halo-cockpit\"\n```\n\nشغّل الـ cockpit:\n```bash\nds4-cockpit\n```\n\n<!-- @test:id=ds4-cockpit-linux timeout=60 hidden=True -->\n```bash\nset -euo pipefail\nexport PATH=\"$HOME/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH\"\n# Verify the pipx-installed cockpit entry point is on PATH (do NOT launch the TUI).\ncommand -v ds4-cockpit\necho \"OK: ds4-cockpit is installed and on PATH\"\n```\n<!-- @test:end -->\n\n## إنشاء حاوية الأدوات (Toolbox)\n\nفي تبويب **Interactive Toolboxes**، اختر أحدث حاوية أدوات مستقرة متاحة (مثل `ds4-rocm-7.2.4`) وانقر على **Create/Update**. سيؤدي ذلك إلى سحب صورة الحاوية وإنشاء بيئة حاوية الأدوات.\n\n\n<p align=\"center\">\n <img src=\"assets/ds4-cockpit-toolboxes.png\" alt=\"Selecting the ds4 toolbox in ds4-cockpit\" width=\"800\"/>\n</p>\n\n<!-- @test:id=ds4-toolbox-image-linux timeout=120 hidden=True -->\n```bash\nset -euo pipefail\nexport PATH=\"$HOME/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH\"\n\n# The toolbox version changes over time, so match the image family, not a fixed tag.\nif ! podman images --format '{{.Repository}}:{{.Tag}}' | grep -i 'strix-halo-ds4-toolbox'; then\n echo \"No strix-halo-ds4-toolbox image found. Create the toolbox in ds4-cockpit (Interactive Toolboxes tab) first.\"\n exit 1\nfi\necho \"OK: ds4 toolbox container image is present\"\n```\n<!-- @test:end -->\n\n## تنزيل النموذج\n\nانتقل إلى تبويب **Model Manager**. اختر **IQ2_XXS imatrix (~80.8 جيجابايت)** من القائمة المنسدلة وانقر على **Download**. سيتم حفظ ملفات النموذج في `~/ds4` بشكل افتراضي (يمكنك تغيير مسار التخزين).\n\n> **ملاحظة:** حجم نموذج IQ2_XXS يبلغ نحو 80 جيجابايت، لذا قد يستغرق التنزيل بعض الوقت حسب سرعة اتصالك. يمكنك المتابعة بمجرد انتهائه.\n\n<p align=\"center\">\n <img src=\"assets/ds4-cockpit-model-manager.png\" alt=\"Selecting and downloading the IQ2_XXS model\" width=\"800\"/>\n</p>\n\n<!-- @test:id=ds4-model-downloaded-linux timeout=60 hidden=True -->\n```bash\nset -euo pipefail\n\n# ds4-cockpit saves model weights to ~/ds4 by default\nmodel_dir=\"$HOME/ds4\"\n\nif [ ! -d \"$model_dir\" ]; then\n echo \"Model directory $model_dir does not exist. Download the model in ds4-cockpit (Model Manager tab) first.\"\n exit 1\nfi\n\nif ! find \"$model_dir\" -maxdepth 2 -iname '*.gguf' | grep -q .; then\n echo \"No .gguf model files found under $model_dir. Download the IQ2_XXS imatrix model in ds4-cockpit first.\"\n exit 1\nfi\n\n# Prefer to confirm the recommended IQ2_XXS imatrix quantization is present.\nif find \"$model_dir\" -maxdepth 2 -iname '*IQ2*imatrix*.gguf' | grep -q .; then\n echo \"OK: IQ2_XXS imatrix model is downloaded\"\nelse\n echo \"OK: a GGUF model is present (recommended IQ2_XXS imatrix file not detected by name)\"\nfi\n```\n<!-- @test:end -->\n\n## بدء تشغيل الخادم\n\nانتقل إلى تبويب **Server Mode**. اختر النموذج الذي تم تنزيله وحاوية الأدوات، ثم قم بتهيئة حجم السياق والمضيف والمنفذ. عند الجاهزية، انقر على **Start ds4-server**.\n\n> **تلميح** يُعد حجم سياق `126000` قيمة بداية معقولة يُفترض أن تناسب عقدة واحدة — يمكنك رفعها إذا كانت لديك ذاكرة إضافية، أو خفضها إذا واجهت أخطاء نفاد الذاكرة. المنفذ (`8000` في هذا الدليل) اختياري؛ اختر أي منفذ متاح.\n\n> **ذاكرة تخزين مؤقت KV على القرص (اختياري).** يؤدي تفعيل **KV Disk Cache** إلى نقل ذاكرة التخزين المؤقت KV إلى القرص (في **Host Cache Dir**، الافتراضي `~/.cache/ds4-kv`) بحيث تتم استعادة موجهات النظام (system prompts) المتكررة من SSD بدلاً من إعادة حسابها. هذا تحسين للأداء مخصص لسير عمل وكلاء البرمجة ذات الموجهات الطويلة والمتكررة، وهو **غير مطلوب** لتشغيل الخادم.\n\n<p align=\"center\">\n <img src=\"assets/ds4-cockpit-server-mode.png\" alt=\"Configuring and starting the ds4 server\" width=\"800\"/>\n</p>\n\nسيبدأ الخادم بالتشغيل والاستماع على المنفذ 8000، ويكشف نقطة نهاية API متوافقة مع OpenAI على العنوان `http://localhost:8000/v1`.\n\n**اختبار سريع:**\n```bash\ncurl http://127.0.0.1:8000/v1/chat/completions \\\n -H 'Content-Type: application/json' \\\n -d '{\n \"model\": \"deepseek-v4-flash\",\n \"messages\": [{\"role\": \"user\", \"content\": \"Hello!\"}],\n \"stream\": false\n }'\n```\n\n<!-- @test:id=ds4-server-chat-linux timeout=1200 hidden=True -->\n```bash\nset -euo pipefail\n\n# This runner is shared with other playbooks, and ds4 at a 126k context consumes almost the entire GPU memory pool.\n# So rather than keeping ds4 resident, CI starts the server, verifies a chat completion, then stops it again.\n# This frees the memory for the next job.\n# ds4 has no separate \"unload\"; stopping the server process is what releases the ~80 GB model.\n\nCONTAINER=\"ds4-ci-server\"\nMODEL_DIR=\"$HOME/ds4\"\n\n# Locate the downloaded model (prefer the recommended IQ2_XXS imatrix file).\nmodel_file=\"$(find \"$MODEL_DIR\" -maxdepth 2 -iname '*IQ2*imatrix*.gguf' 2>/dev/null | head -1)\"\nif [ -z \"$model_file\" ]; then\n model_file=\"$(find \"$MODEL_DIR\" -maxdepth 2 -iname '*.gguf' 2>/dev/null | head -1)\"\nfi\nif [ -z \"$model_file\" ]; then\n echo \"No .gguf model found under $MODEL_DIR. Download it in ds4-cockpit first.\"\n exit 1\nfi\nmodel_name=\"$(basename \"$model_file\")\"\n\n# Pick the toolbox image (version-agnostic).\nimage=\"$(podman images --format '{{.Repository}}:{{.Tag}}' | grep -i 'strix-halo-ds4-toolbox' | head -1)\"\nif [ -z \"$image\" ]; then\n echo \"No strix-halo-ds4-toolbox image found. Create the toolbox in ds4-cockpit first.\"\n exit 1\nfi\n\n# Always stop/remove the server on exit so it never holds GPU memory afterwards.\ncleanup() {\n podman stop -t 10 \"$CONTAINER\" >/dev/null 2>&1 || true\n podman rm -f \"$CONTAINER\" >/dev/null 2>&1 || true\n}\ntrap cleanup EXIT\n\n# Remove any stale instance, then start ds4-server detached (same flags ds4-cockpit uses, with -d instead of -it).\npodman rm -f \"$CONTAINER\" >/dev/null 2>&1 || true\npodman run -d --name \"$CONTAINER\" \\\n --device /dev/dri --device /dev/kfd \\\n --group-add keep-groups \\\n --security-opt seccomp=unconfined \\\n --ipc=host \\\n --cap-add=SYS_PTRACE \\\n --security-opt label=disable \\\n --userns=keep-id \\\n -p 127.0.0.1:8000:8000 \\\n -v \"$MODEL_DIR\":/models:ro \\\n \"$image\" \\\n ds4-server -m \"/models/$model_name\" --ctx 126000 --host 0.0.0.0 --port 8000\n\n# Wait for readiness; the ~80 GB model can take a few minutes to load.\nup=false\nfor i in $(seq 1 240); do\n code=\"$(curl -s -o /dev/null -w '%{http_code}' --max-time 3 http://127.0.0.1:8000/v1/models || true)\"\n if [ -n \"$code\" ] && [ \"$code\" != \"000\" ]; then\n up=true\n break\n fi\n if ! podman inspect -f '{{.State.Running}}' \"$CONTAINER\" 2>/dev/null | grep -q true; then\n echo \"ds4-server container exited during startup:\"\n podman logs \"$CONTAINER\" 2>&1 | tail -40 || true\n exit 1\n fi\n sleep 2\ndone\n\nif [ \"$up\" != \"true\" ]; then\n echo \"ds4 server did not become ready on http://127.0.0.1:8000\"\n podman logs \"$CONTAINER\" 2>&1 | tail -40 || true\n exit 1\nfi\necho \"OK: ds4 server is responding on :8000\"\n\nbody='{\n \"model\": \"deepseek-v4-flash\",\n \"messages\": [{\"role\": \"user\", \"content\": \"Reply with exactly: OK\"}],\n \"temperature\": 0,\n \"max_tokens\": 32,\n \"stream\": false\n}'\n\nout=\"$(curl -sS --fail-with-body --max-time 300 http://127.0.0.1:8000/v1/chat/completions \\\n -H 'Content-Type: application/json' \\\n -d \"$body\")\"\n\nif [ -z \"$out\" ]; then\n echo \"Empty response from ds4 /v1/chat/completions\"\n exit 1\nfi\n\nexport DS4_OUT=\"$out\"\npython3 - <<'PY'\nimport json, os, sys\n\ndata = json.loads(os.environ[\"DS4_OUT\"])\nchoices = data.get(\"choices\")\nif not choices:\n print(\"Response has no 'choices':\")\n print(json.dumps(data, indent=2)[:2000])\n sys.exit(1)\n\nmessage = choices[0].get(\"message\", {}) or {}\ncontent = message.get(\"content\") or message.get(\"reasoning_content\")\nif not content:\n print(\"Response choice has empty content:\")\n print(json.dumps(data, indent=2)[:2000])\n sys.exit(1)\n\nprint(\"OK: ds4 chat/completions returned content\")\nPY\n\necho \"OK: ds4 server test complete; server stopped and GPU memory released\"\n```\n<!-- @test:end -->\n\n## ربط واجهة ويب\n\nيمكنك ربط أي واجهة محادثة تدعم تنسيق OpenAI API. على سبيل المثال، لاستخدام HuggingFace ChatUI:\n\n```bash\ndocker run -p 3000:3000 \\\n --add-host=host.docker.internal:host-gateway \\\n -e OPENAI_BASE_URL=http://host.docker.internal:8000/v1 \\\n -e OPENAI_API_KEY=dummy \\\n -v chat-ui-data:/data \\\n ghcr.io/huggingface/chat-ui-db\n```\n\nافتح `http://localhost:3000` في متصفحك لبدء المحادثة.\n## توصيل وكيل برمجي (Coding Agent)\n\nيوفر خادم ds4 نقاط نهاية متوافقة مع OpenAI وAnthropic، لذا يمكن لمعظم وكلاء البرمجة الاتصال به مباشرة. على سبيل المثال، لإضافته إلى وكيل البرمجة `pi`، أضف الكتلة التالية إلى `~/.pi/agent/models.json`:\n\n```json\n\"ds4\": {\n \"name\": \"ds4.c local\",\n \"baseUrl\": \"http://localhost:8000/v1\",\n \"api\": \"openai-completions\",\n \"apiKey\": \"dsv4-local\",\n \"compat\": {\n \"supportsStore\": false,\n \"supportsDeveloperRole\": false,\n \"supportsReasoningEffort\": true,\n \"supportsUsageInStreaming\": true,\n \"maxTokensField\": \"max_tokens\",\n \"supportsStrictMode\": false,\n \"thinkingFormat\": \"deepseek\",\n \"requiresReasoningContentOnAssistantMessages\": true\n },\n \"models\": [\n {\n \"id\": \"deepseek-v4-flash\",\n \"name\": \"DeepSeek V4 Flash (ds4.c local)\",\n \"reasoning\": true,\n \"thinkingLevelMap\": {\n \"off\": null,\n \"minimal\": \"low\",\n \"low\": \"low\",\n \"medium\": \"medium\",\n \"high\": \"high\",\n \"xhigh\": \"xhigh\"\n },\n \"input\": [\"text\"],\n \"contextWindow\": 131072,\n \"maxTokens\": 65536,\n \"cost\": { \"input\": 0, \"output\": 0, \"cacheRead\": 0, \"cacheWrite\": 0 }\n }\n ]\n}\n```\n\n> **نصيحة**: إذا كان وكيل البرمجة أو واجهة الويب الخاصة بك يعمل على جهاز مختلف عن منصة Halo، فستحتاج إلى إعادة توجيه المنفذ 8000 عبر SSH:\n> ```bash\n> ssh -L 0.0.0.0:8000:localhost:8000 <halo-host-ip>\n> ```\n\n## الخطوات التالية\n\n- **التجميع متعدد العُقد (Multi-node clustering)**: إذا كان لديك جهازا Halo، يدعم ds4 توزيع نموذج Q4 (‏~153 غيغابايت) عبر كلا الجهازين من خلال التوازي في خط الأنابيب (pipeline parallelism). راجع [توثيق ds4-toolbox](https://github.com/kyuz0/strix-halo-ds4-toolbox#distributed-inference-pipeline-parallelism) للحصول على تعليمات الإعداد.\n- **فك التشفير التخميني (Speculative decoding) (MTP)**: قم بتنزيل أوزان MTP (‏~3.6 غيغابايت) ومرّر `--mtp` إلى الخادم لتحقيق سرعة توليد أسرع.\n- **تفريغ ذاكرة التخزين المؤقت KV على القرص**: بالنسبة لسير عمل وكلاء البرمجة، فعّل `--kv-disk-dir` بحيث تتم استعادة موجهات النظام المتكررة من SSD بدلاً من إعادة حسابها في كل مرة.\n\nلمزيد من المعلومات، راجع [مستودع ds4](https://github.com/antirez/ds4) و[أدوات ds4-cockpit](https://github.com/kyuz0/strix-halo-ds4-toolbox)."}}, "auto-translations/he/supplemental/deepseek-v4-flash-ds4/README.md": {"e7630fd3d6e6665d69df2a80a26f8f5c73a764fe": {"t": 1786068577.028561, "n": 14592, "h": "1cbf7cc39aecd3cf", "c": "<!--\nCopyright Advanced Micro Devices, Inc.\n\nSPDX-License-Identifier: MIT\n-->\n\n<!-- auto-translated-disclaimer v2 -->\n> [!WARNING]\n> **תרגום מכונה.** דף זה תורגם באופן אוטומטי מאנגלית ולא נבדק על ידי אדם. ייתכן שהוא מכיל שגיאות, וייתכן שהוראות, פקודות, הורדות, זמינות מוצרים, או תוכן אחר מסוימים ישתנו בהתאם לשפה או לאזור. בכל מקרה של אי-התאמה או סתירה, הגרסה המקורית באנגלית של ה-playbook היא הקובעת והמחייבת.\n<!-- auto-translated-disclaimer:end -->\n\n<!-- @github-only -->\n> [!IMPORTANT]\n> This playbook uses special tags that GitHub cannot render. Please visit [amd.com/playbooks](https://amd.com/playbooks) to correctly preview this content.\n<!-- @github-only:end -->\n\n## סקירה כללית\n\n[DeepSeek V4 Flash](https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash) הוא הגרסה הממוקדת ביעילות של משפחת DeepSeek V4 — מודל Mixture of Experts בעל 284 מיליארד פרמטרים עם 13 מיליארד פרמטרים פעילים. על פי [הדוח הטכני של DeepSeek](https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash), הוא משיג ציון של 79% ב-SWE-bench Verified ו-91.6% ב-LiveCodeBench.\n\n[ds4 (Dwarf Star 4)](https://github.com/antirez/ds4) הוא מנוע היסק ייעודי שנבנה במיוחד עבור ארכיטקטורת המודל הזו. במקום זמן ריצה כללי, ds4 מכוון ישירות למשפחת DeepSeek V4 עם אופטימיזציות kernel ספציפיות לארכיטקטורה עבור תוכנת AMD ROCm™. זהו כיום אחד היישומים בעלי הביצועים הטובים ביותר של DeepSeek V4 Flash על Strix Halo.\n\nמדריך זה מראה כיצד להשתמש ב-`ds4-cockpit`, ממשק משתמש טרמינלי, כדי להגדיר את ds4, להוריד את משקלי המודל, ולהתחיל להריץ את DeepSeek V4 Flash באופן מקומי על AMD Ryzen™ AI Halo Developer Platform.\n\n## מה תלמד\n\n- כיצד להתקין ולהפעיל את ממשק המשתמש הטרמינלי `ds4-cockpit`\n- כיצד ליצור את מיכל ה-toolbox של ds4 ROCm\n- הורדת הקוונטיזציה המומלצת עבור מפרק Halo יחיד\n- הפעלת שרת ההיסק של ds4 וחשיפת נקודת קצה תואמת OpenAI\n- חיבור ממשק Web UI או סוכן קידוד לשרת המקומי\n\n## הגדרת תצורת הזיכרון\n\n<!-- @require:memory-config -->\n\n## התקנת דרישות תוכנה מקדימות\n\n> **דרישות מערכת עבור תצורה זו (IQ2_XXS במפרק יחיד עם הקשר של 126k):**\n> - מערכת Strix Halo עם **לפחות 128 GB של זיכרון מאוחד**.\n> - **VRAM ייעודי ב-BIOS (מאגר מסגרות UMA) מוגדר למינימום**, כך שמאגר הזיכרון המשותף יוכל להיות גדול ככל האפשר.\n> - **מאגר הזיכרון המשותף של ה-GPU מוגדר לפחות ל-110 GB**: הרץ `amd-ttm --set 110` (ראה שלב תצורת הזיכרון לעיל) ואתחל מחדש. ערכים נמוכים יותר עלולים להיכשל עקב חוסר זיכרון בעת טעינת המודל בהקשר של 126k. אם למערכת שלך יש פחות זיכרון זמין, הורד במקום זאת את ערך ה-**Context** במצב שרת.\n>\n> **הערה:** נסה להגדיר את **מאגר הזיכרון המשותף של ה-GPU** ל-**110 GB** כנקודת מוצא. אם אתה נתקל בשגיאות חוסר זיכרון, הגדל את מאגר הזיכרון המשותף או הקטן את גודל ההקשר.\n\nds4-cockpit משתמש ב-toolboxes של מיכלים כדי להריץ את מנוע ds4. התקן את `podman`, `distrobox`, ו-`pipx`:\n\n```bash\nsudo apt update\nsudo apt install -y podman distrobox pipx\n```\n\n<!-- @test:id=ds4-prereqs-linux timeout=60 hidden=True -->\n```bash\nset -euo pipefail\nexport PATH=\"$HOME/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH\"\npodman --version\ndistrobox version 2>/dev/null || distrobox --version\npipx --version\necho \"OK: podman, distrobox, and pipx are installed\"\n```\n<!-- @test:end -->\n\n## קוונטיזציות זמינות\n\nמחבר ds4 מספק מספר גרסאות מקוונטזות של DeepSeek V4 Flash בפורמט GGUF. כל המודלים למטה משתמשים בכיול מטריצת חשיבות (imatrix), השומר על דיוק גבוה יותר עבור החלקים במודל החשובים ביותר למשימות קידוד וחשיבה.\n\n| קוונטיזציה | גודל | תיאור |\n|-------------|------|-------------|\n| [IQ2_XXS imatrix](https://huggingface.co/antirez/deepseek-v4-gguf) | ~80.8 GB | מומלץ עבור מפרק יחיד בעל 128 GB |\n| [Hybrid Q2/Q4 imatrix](https://huggingface.co/antirez/deepseek-v4-gguf) | ~97 GB | שומר על שכבות 37–42 בדיוק Q4 לדיוק טוב יותר. מתאים ל-128 GB אך משאיר פחות מקום להקשר |\n| [Q4 imatrix](https://huggingface.co/antirez/deepseek-v4-gguf) | ~153 GB | איכות גבוהה יותר. דורש שני מפרקי Halo באמצעות אשכול מרובה-מפרקים |\n| [MTP Speculative Decoding](https://huggingface.co/antirez/deepseek-v4-gguf) | ~3.6 GB | תוסף אופציונלי לפענוח ספקולטיבי לשיפור מהירות היצירה |\n\nמודל ה-**IQ2_XXS imatrix** הוא נקודת התחלה טובה. הוא מתאים בקלות למפרק יחיד ומשאיר מספיק זיכרון לחלון הקשר סביר.\n\n## התקנת ds4-cockpit\n\n[ds4-cockpit](https://github.com/kyuz0/strix-halo-ds4-toolbox) הוא ממשק משתמש טרמינלי קליל שהופך את תהליך ההפעלה של ds4 על Strix Halo לפשוט. הוא מטפל ביצירת מיכלי toolbox, הורדת משקלי מודל, והפעלת שרתים. התקן אותו באמצעות `pipx`:\n\n```bash\npipx install \"git+https://github.com/kyuz0/strix-halo-ds4-toolbox.git#subdirectory=ds4-strix-halo-cockpit\"\n```\n\nהפעל את ה-cockpit:\n```bash\nds4-cockpit\n```\n\n<!-- @test:id=ds4-cockpit-linux timeout=60 hidden=True -->\n```bash\nset -euo pipefail\nexport PATH=\"$HOME/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH\"\n# Verify the pipx-installed cockpit entry point is on PATH (do NOT launch the TUI).\ncommand -v ds4-cockpit\necho \"OK: ds4-cockpit is installed and on PATH\"\n```\n<!-- @test:end -->\n\n## יצירת ה-Toolbox\n\nבכרטיסייה **Interactive Toolboxes**, בחר את ה-toolbox העדכני/יציב הזמין (למשל `ds4-rocm-7.2.4`) ולחץ על **Create/Update**. פעולה זו מושכת את תמונת המיכל ויוצרת את סביבת ה-toolbox.\n\n\n<p align=\"center\">\n <img src=\"assets/ds4-cockpit-toolboxes.png\" alt=\"Selecting the ds4 toolbox in ds4-cockpit\" width=\"800\"/>\n</p>\n\n<!-- @test:id=ds4-toolbox-image-linux timeout=120 hidden=True -->\n```bash\nset -euo pipefail\nexport PATH=\"$HOME/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH\"\n\n# The toolbox version changes over time, so match the image family, not a fixed tag.\nif ! podman images --format '{{.Repository}}:{{.Tag}}' | grep -i 'strix-halo-ds4-toolbox'; then\n echo \"No strix-halo-ds4-toolbox image found. Create the toolbox in ds4-cockpit (Interactive Toolboxes tab) first.\"\n exit 1\nfi\necho \"OK: ds4 toolbox container image is present\"\n```\n<!-- @test:end -->\n\n## הורדת המודל\n\nעבור לכרטיסייה **Model Manager**. בחר **IQ2_XXS imatrix (~80.8 GB)** מהתפריט הנפתח ולחץ על **Download**. קבצי המודל יישמרו ב-`~/ds4` כברירת מחדל (ניתן לשנות את נתיב האחסון).\n\n> **הערה:** מודל ה-IQ2_XXS גודלו כ-80 GB, כך שההורדה עשויה להימשך זמן מה בהתאם לחיבור שלך. תוכל להמשיך לאחר סיומה.\n\n<p align=\"center\">\n <img src=\"assets/ds4-cockpit-model-manager.png\" alt=\"Selecting and downloading the IQ2_XXS model\" width=\"800\"/>\n</p>\n\n<!-- @test:id=ds4-model-downloaded-linux timeout=60 hidden=True -->\n```bash\nset -euo pipefail\n\n# ds4-cockpit saves model weights to ~/ds4 by default\nmodel_dir=\"$HOME/ds4\"\n\nif [ ! -d \"$model_dir\" ]; then\n echo \"Model directory $model_dir does not exist. Download the model in ds4-cockpit (Model Manager tab) first.\"\n exit 1\nfi\n\nif ! find \"$model_dir\" -maxdepth 2 -iname '*.gguf' | grep -q .; then\n echo \"No .gguf model files found under $model_dir. Download the IQ2_XXS imatrix model in ds4-cockpit first.\"\n exit 1\nfi\n\n# Prefer to confirm the recommended IQ2_XXS imatrix quantization is present.\nif find \"$model_dir\" -maxdepth 2 -iname '*IQ2*imatrix*.gguf' | grep -q .; then\n echo \"OK: IQ2_XXS imatrix model is downloaded\"\nelse\n echo \"OK: a GGUF model is present (recommended IQ2_XXS imatrix file not detected by name)\"\nfi\n```\n<!-- @test:end -->\n\n## הפעלת השרת\n\nעבור לכרטיסייה **Server Mode**. בחר את המודל שהורדת ואת ה-toolbox, ולאחר מכן הגדר את גודל ההקשר, המארח, והפורט. כשאתה מוכן, לחץ על **Start ds4-server**.\n\n> **טיפ** גודל הקשר של `126000` הוא ערך התחלתי סביר שאמור להתאים למפרק יחיד — ניתן להגדיר אותו גבוה יותר אם יש לך זיכרון פנוי, או נמוך יותר אם אתה נתקל בשגיאות חוסר זיכרון. הפורט (`8000` במדריך זה) הוא שרירותי; בחר כל פורט פנוי.\n\n> **מטמון דיסק KV (אופציונלי).** הפעלת **KV Disk Cache** מעבירה את מטמון ה-KV לדיסק (ב-**Host Cache Dir**, ברירת המחדל `~/.cache/ds4-kv`) כך שהוראות מערכת חוזרות משוחזרות מ-SSD במקום להיחשב מחדש. זוהי אופטימיזציית ביצועים עבור זרימות עבודה של סוכני קידוד עם הוראות ארוכות וחוזרות, ו**אינה נדרשת** להפעלת השרת.\n\n<p align=\"center\">\n <img src=\"assets/ds4-cockpit-server-mode.png\" alt=\"Configuring and starting the ds4 server\" width=\"800\"/>\n</p>\n\nהשרת יופעל ויאזין בפורט 8000, ויחשוף נקודת קצה API תואמת OpenAI בכתובת `http://localhost:8000/v1`.\n\n**בדיקה מהירה:**\n```bash\ncurl http://127.0.0.1:8000/v1/chat/completions \\\n -H 'Content-Type: application/json' \\\n -d '{\n \"model\": \"deepseek-v4-flash\",\n \"messages\": [{\"role\": \"user\", \"content\": \"Hello!\"}],\n \"stream\": false\n }'\n```\n\n<!-- @test:id=ds4-server-chat-linux timeout=1200 hidden=True -->\n```bash\nset -euo pipefail\n\n# This runner is shared with other playbooks, and ds4 at a 126k context consumes almost the entire GPU memory pool.\n# So rather than keeping ds4 resident, CI starts the server, verifies a chat completion, then stops it again.\n# This frees the memory for the next job.\n# ds4 has no separate \"unload\"; stopping the server process is what releases the ~80 GB model.\n\nCONTAINER=\"ds4-ci-server\"\nMODEL_DIR=\"$HOME/ds4\"\n\n# Locate the downloaded model (prefer the recommended IQ2_XXS imatrix file).\nmodel_file=\"$(find \"$MODEL_DIR\" -maxdepth 2 -iname '*IQ2*imatrix*.gguf' 2>/dev/null | head -1)\"\nif [ -z \"$model_file\" ]; then\n model_file=\"$(find \"$MODEL_DIR\" -maxdepth 2 -iname '*.gguf' 2>/dev/null | head -1)\"\nfi\nif [ -z \"$model_file\" ]; then\n echo \"No .gguf model found under $MODEL_DIR. Download it in ds4-cockpit first.\"\n exit 1\nfi\nmodel_name=\"$(basename \"$model_file\")\"\n\n# Pick the toolbox image (version-agnostic).\nimage=\"$(podman images --format '{{.Repository}}:{{.Tag}}' | grep -i 'strix-halo-ds4-toolbox' | head -1)\"\nif [ -z \"$image\" ]; then\n echo \"No strix-halo-ds4-toolbox image found. Create the toolbox in ds4-cockpit first.\"\n exit 1\nfi\n\n# Always stop/remove the server on exit so it never holds GPU memory afterwards.\ncleanup() {\n podman stop -t 10 \"$CONTAINER\" >/dev/null 2>&1 || true\n podman rm -f \"$CONTAINER\" >/dev/null 2>&1 || true\n}\ntrap cleanup EXIT\n\n# Remove any stale instance, then start ds4-server detached (same flags ds4-cockpit uses, with -d instead of -it).\npodman rm -f \"$CONTAINER\" >/dev/null 2>&1 || true\npodman run -d --name \"$CONTAINER\" \\\n --device /dev/dri --device /dev/kfd \\\n --group-add keep-groups \\\n --security-opt seccomp=unconfined \\\n --ipc=host \\\n --cap-add=SYS_PTRACE \\\n --security-opt label=disable \\\n --userns=keep-id \\\n -p 127.0.0.1:8000:8000 \\\n -v \"$MODEL_DIR\":/models:ro \\\n \"$image\" \\\n ds4-server -m \"/models/$model_name\" --ctx 126000 --host 0.0.0.0 --port 8000\n\n# Wait for readiness; the ~80 GB model can take a few minutes to load.\nup=false\nfor i in $(seq 1 240); do\n code=\"$(curl -s -o /dev/null -w '%{http_code}' --max-time 3 http://127.0.0.1:8000/v1/models || true)\"\n if [ -n \"$code\" ] && [ \"$code\" != \"000\" ]; then\n up=true\n break\n fi\n if ! podman inspect -f '{{.State.Running}}' \"$CONTAINER\" 2>/dev/null | grep -q true; then\n echo \"ds4-server container exited during startup:\"\n podman logs \"$CONTAINER\" 2>&1 | tail -40 || true\n exit 1\n fi\n sleep 2\ndone\n\nif [ \"$up\" != \"true\" ]; then\n echo \"ds4 server did not become ready on http://127.0.0.1:8000\"\n podman logs \"$CONTAINER\" 2>&1 | tail -40 || true\n exit 1\nfi\necho \"OK: ds4 server is responding on :8000\"\n\nbody='{\n \"model\": \"deepseek-v4-flash\",\n \"messages\": [{\"role\": \"user\", \"content\": \"Reply with exactly: OK\"}],\n \"temperature\": 0,\n \"max_tokens\": 32,\n \"stream\": false\n}'\n\nout=\"$(curl -sS --fail-with-body --max-time 300 http://127.0.0.1:8000/v1/chat/completions \\\n -H 'Content-Type: application/json' \\\n -d \"$body\")\"\n\nif [ -z \"$out\" ]; then\n echo \"Empty response from ds4 /v1/chat/completions\"\n exit 1\nfi\n\nexport DS4_OUT=\"$out\"\npython3 - <<'PY'\nimport json, os, sys\n\ndata = json.loads(os.environ[\"DS4_OUT\"])\nchoices = data.get(\"choices\")\nif not choices:\n print(\"Response has no 'choices':\")\n print(json.dumps(data, indent=2)[:2000])\n sys.exit(1)\n\nmessage = choices[0].get(\"message\", {}) or {}\ncontent = message.get(\"content\") or message.get(\"reasoning_content\")\nif not content:\n print(\"Response choice has empty content:\")\n print(json.dumps(data, indent=2)[:2000])\n sys.exit(1)\n\nprint(\"OK: ds4 chat/completions returned content\")\nPY\n\necho \"OK: ds4 server test complete; server stopped and GPU memory released\"\n```\n<!-- @test:end -->\n\n## חיבור ממשק Web UI\n\nניתן לחבר כל ממשק צ'אט התומך בפורמט OpenAI API. לדוגמה, כדי להשתמש ב-HuggingFace ChatUI:\n\n```bash\ndocker run -p 3000:3000 \\\n --add-host=host.docker.internal:host-gateway \\\n -e OPENAI_BASE_URL=http://host.docker.internal:8000/v1 \\\n -e OPENAI_API_KEY=dummy \\\n -v chat-ui-data:/data \\\n ghcr.io/huggingface/chat-ui-db\n```\n\nפתח את `http://localhost:3000` בדפדפן שלך כדי להתחיל לשוחח.\n## חיבור סוכן קידוד\n\nשרת ds4 חושף נקודות קצה תואמות גם ל-OpenAI וגם ל-Anthropic, כך שרוב סוכני הקידוד יכולים להתחבר אליו ישירות. לדוגמה, כדי להוסיף אותו לסוכן הקידוד `pi`, הוסיפו את הבלוק הבא ל-`~/.pi/agent/models.json`:\n\n```json\n\"ds4\": {\n \"name\": \"ds4.c local\",\n \"baseUrl\": \"http://localhost:8000/v1\",\n \"api\": \"openai-completions\",\n \"apiKey\": \"dsv4-local\",\n \"compat\": {\n \"supportsStore\": false,\n \"supportsDeveloperRole\": false,\n \"supportsReasoningEffort\": true,\n \"supportsUsageInStreaming\": true,\n \"maxTokensField\": \"max_tokens\",\n \"supportsStrictMode\": false,\n \"thinkingFormat\": \"deepseek\",\n \"requiresReasoningContentOnAssistantMessages\": true\n },\n \"models\": [\n {\n \"id\": \"deepseek-v4-flash\",\n \"name\": \"DeepSeek V4 Flash (ds4.c local)\",\n \"reasoning\": true,\n \"thinkingLevelMap\": {\n \"off\": null,\n \"minimal\": \"low\",\n \"low\": \"low\",\n \"medium\": \"medium\",\n \"high\": \"high\",\n \"xhigh\": \"xhigh\"\n },\n \"input\": [\"text\"],\n \"contextWindow\": 131072,\n \"maxTokens\": 65536,\n \"cost\": { \"input\": 0, \"output\": 0, \"cacheRead\": 0, \"cacheWrite\": 0 }\n }\n ]\n}\n```\n\n> **טיפ**: אם סוכן הקידוד או ה-Web UI שלכם רץ על מכונה שונה מפלטפורמת Halo, תצטרכו להעביר (forward) את פורט 8000 דרך SSH:\n> ```bash\n> ssh -L 0.0.0.0:8000:localhost:8000 <halo-host-ip>\n> ```\n\n## הצעדים הבאים\n\n- **אשכולות (clustering) מרובי-צמתים**: אם יש לכם שני מכשירי Halo, ds4 תומך בפיזור מודל Q4 (‏~153GB) על פני שתי המכונות באמצעות מקביליות צנרת (pipeline parallelism). ראו את [תיעוד ds4-toolbox](https://github.com/kyuz0/strix-halo-ds4-toolbox#distributed-inference-pipeline-parallelism) להוראות הגדרה.\n- **פענוח ספקולטיבי (MTP)**: הורידו את משקלי ה-MTP (‏~3.6GB) והעבירו `--mtp` לשרת לצורך מהירות יצירה מהירה יותר.\n- **פריקת מטמון KV לדיסק**: עבור זרימות עבודה של סוכני קידוד, הפעילו את `--kv-disk-dir` כדי שהנחיות מערכת (system prompts) חוזרות יושחזרו מה-SSD במקום להיות מחושבות מחדש בכל פעם.\n\nלמידע נוסף, ראו את [מאגר ds4](https://github.com/antirez/ds4) ואת [ארגז הכלים ds4-cockpit](https://github.com/kyuz0/strix-halo-ds4-toolbox)."}}, "auto-translations/uk-UA/supplemental/deepseek-v4-flash-ds4/README.md": {"e7630fd3d6e6665d69df2a80a26f8f5c73a764fe": {"t": 1786068577.301855, "n": 16049, "h": "93485298701f0a13", "c": "<!--\nCopyright Advanced Micro Devices, Inc.\n\nSPDX-License-Identifier: MIT\n-->\n\n<!-- auto-translated-disclaimer v2 -->\n> [!WARNING]\n> **Машинний переклад.** Цю сторінку було автоматично перекладено з англійської мови, і вона не була перевірена людиною. Вона може містити помилки, а певні інструкції, команди, завантаження, доступність продукту чи інший вміст можуть відрізнятися залежно від мови чи регіону. У разі будь-яких невідповідностей чи розбіжностей переважну силу має оригінальна англомовна версія playbook.\n<!-- auto-translated-disclaimer:end -->\n\n<!-- @github-only -->\n> [!IMPORTANT]\n> This playbook uses special tags that GitHub cannot render. Please visit [amd.com/playbooks](https://amd.com/playbooks) to correctly preview this content.\n<!-- @github-only:end -->\n\n## Огляд\n\n[DeepSeek V4 Flash](https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash) — це орієнтований на ефективність варіант родини DeepSeek V4 — модель Mixture of Experts зі 284 мільярдами параметрів, з яких 13 мільярдів активних. Згідно з [технічним звітом DeepSeek](https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash), вона показує 79% на SWE-bench Verified та 91.6% на LiveCodeBench.\n\n[ds4 (Dwarf Star 4)](https://github.com/antirez/ds4) — це спеціалізований інференс-двигун, створений саме для цієї архітектури моделі. На відміну від рушіїв загального призначення, ds4 орієнтований безпосередньо на родину DeepSeek V4 з оптимізаціями ядер, специфічними для архітектури, для програмного забезпечення AMD ROCm™. Наразі це одна з найпродуктивніших реалізацій DeepSeek V4 Flash на Strix Halo.\n\nЦей навчальний посібник показує, як використовувати `ds4-cockpit`, термінальний інтерфейс користувача, для налаштування ds4, завантаження вагових коефіцієнтів моделі та запуску локального обслуговування DeepSeek V4 Flash на платформі розробника AMD Ryzen™ AI Halo.\n\n## Що ви дізнаєтеся\n\n- Як встановити та запустити термінальний інтерфейс `ds4-cockpit`\n- Як створити ROCm-контейнер toolbox для ds4\n- Завантаження рекомендованого квантування для одного вузла Halo\n- Запуск сервера інференсу ds4 та надання доступу до сумісної з OpenAI кінцевої точки\n- Підключення веб-інтерфейсу або кодового агента до локального сервера\n\n## Налаштування конфігурації пам'яті\n\n<!-- @require:memory-config -->\n\n## Встановлення необхідного програмного забезпечення\n\n> **Системні вимоги для цієї конфігурації (однодвузлова IQ2_XXS з контекстом 126k):**\n> - Система Strix Halo з **щонайменше 128 ГБ уніфікованої пам'яті**.\n> - **Виділена VRAM у BIOS (UMA frame buffer) встановлена на мінімум**, щоб пул спільної пам'яті міг бути якомога більшим.\n> - Пул спільної пам'яті GPU **встановлений щонайменше на 110 ГБ**: виконайте `amd-ttm --set 110` (див. крок налаштування пам'яті вище) і перезавантажте систему. Менші значення можуть спричинити помилки нестачі пам'яті при завантаженні моделі з контекстом 126k. Якщо у вашій системі менше доступної пам'яті, замість цього зменшіть значення **Context** у режимі сервера.\n>\n> **Примітка:** Спробуйте встановити **пул спільної пам'яті GPU** на **110 ГБ** як початкове значення. Якщо ви зіткнетеся з помилками нестачі пам'яті, збільшіть пул спільної пам'яті або зменшіть розмір контексту.\n\nds4-cockpit використовує контейнери toolbox для запуску двигуна ds4. Встановіть `podman`, `distrobox` і `pipx`:\n\n```bash\nsudo apt update\nsudo apt install -y podman distrobox pipx\n```\n\n<!-- @test:id=ds4-prereqs-linux timeout=60 hidden=True -->\n```bash\nset -euo pipefail\nexport PATH=\"$HOME/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH\"\npodman --version\ndistrobox version 2>/dev/null || distrobox --version\npipx --version\necho \"OK: podman, distrobox, and pipx are installed\"\n```\n<!-- @test:end -->\n\n## Доступні квантування\n\nАвтор ds4 надає кілька квантованих версій DeepSeek V4 Flash у форматі GGUF. Усі моделі нижче використовують калібрування importance matrix (imatrix), яке зберігає вищу точність для тих частин моделі, що найважливіші для завдань програмування та міркування.\n\n| Квантування | Розмір | Опис |\n|-------------|------|-------------|\n| [IQ2_XXS imatrix](https://huggingface.co/antirez/deepseek-v4-gguf) | ~80.8 ГБ | Рекомендовано для одного вузла на 128 ГБ |\n| [Hybrid Q2/Q4 imatrix](https://huggingface.co/antirez/deepseek-v4-gguf) | ~97 ГБ | Зберігає шари 37–42 з точністю Q4 для кращої якості. Вміщується в 128 ГБ, але залишає менше місця для контексту |\n| [Q4 imatrix](https://huggingface.co/antirez/deepseek-v4-gguf) | ~153 ГБ | Вища якість. Потребує два вузли Halo через мультивузлову кластеризацію |\n| [MTP Speculative Decoding](https://huggingface.co/antirez/deepseek-v4-gguf) | ~3.6 ГБ | Додатковий модуль для спекулятивного декодування, щоб пришвидшити генерацію |\n\nМодель **IQ2_XXS imatrix** — хороша відправна точка. Вона комфортно вміщується на одному вузлі та залишає достатньо пам'яті для розумного розміру контекстного вікна.\n\n## Встановлення ds4-cockpit\n\n[ds4-cockpit](https://github.com/kyuz0/strix-halo-ds4-toolbox) — це легкий термінальний інтерфейс, який спрощує запуск та роботу з ds4 на Strix Halo. Він керує створенням контейнерів toolbox, завантаженням вагових коефіцієнтів моделі та запуском серверів. Встановіть його за допомогою `pipx`:\n\n```bash\npipx install \"git+https://github.com/kyuz0/strix-halo-ds4-toolbox.git#subdirectory=ds4-strix-halo-cockpit\"\n```\n\nЗапустіть cockpit:\n```bash\nds4-cockpit\n```\n\n<!-- @test:id=ds4-cockpit-linux timeout=60 hidden=True -->\n```bash\nset -euo pipefail\nexport PATH=\"$HOME/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH\"\n# Verify the pipx-installed cockpit entry point is on PATH (do NOT launch the TUI).\ncommand -v ds4-cockpit\necho \"OK: ds4-cockpit is installed and on PATH\"\n```\n<!-- @test:end -->\n\n## Створення Toolbox\n\nНа вкладці **Interactive Toolboxes** виберіть останній доступний/стабільний toolbox (наприклад, `ds4-rocm-7.2.4`) і натисніть **Create/Update**. Це завантажить образ контейнера та створить середовище toolbox.\n\n\n<p align=\"center\">\n <img src=\"assets/ds4-cockpit-toolboxes.png\" alt=\"Selecting the ds4 toolbox in ds4-cockpit\" width=\"800\"/>\n</p>\n\n<!-- @test:id=ds4-toolbox-image-linux timeout=120 hidden=True -->\n```bash\nset -euo pipefail\nexport PATH=\"$HOME/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH\"\n\n# The toolbox version changes over time, so match the image family, not a fixed tag.\nif ! podman images --format '{{.Repository}}:{{.Tag}}' | grep -i 'strix-halo-ds4-toolbox'; then\n echo \"No strix-halo-ds4-toolbox image found. Create the toolbox in ds4-cockpit (Interactive Toolboxes tab) first.\"\n exit 1\nfi\necho \"OK: ds4 toolbox container image is present\"\n```\n<!-- @test:end -->\n\n## Завантаження моделі\n\nПерейдіть на вкладку **Model Manager**. Виберіть **IQ2_XXS imatrix (~80.8 ГБ)** у випадаючому списку та натисніть **Download**. Файли моделі буде збережено в `~/ds4` за замовчуванням (шлях зберігання можна змінити).\n\n> **Примітка:** Модель IQ2_XXS має розмір приблизно 80 ГБ, тому завантаження може тривати деякий час залежно від вашого з'єднання. Продовжите, коли воно завершиться.\n\n<p align=\"center\">\n <img src=\"assets/ds4-cockpit-model-manager.png\" alt=\"Selecting and downloading the IQ2_XXS model\" width=\"800\"/>\n</p>\n\n<!-- @test:id=ds4-model-downloaded-linux timeout=60 hidden=True -->\n```bash\nset -euo pipefail\n\n# ds4-cockpit saves model weights to ~/ds4 by default\nmodel_dir=\"$HOME/ds4\"\n\nif [ ! -d \"$model_dir\" ]; then\n echo \"Model directory $model_dir does not exist. Download the model in ds4-cockpit (Model Manager tab) first.\"\n exit 1\nfi\n\nif ! find \"$model_dir\" -maxdepth 2 -iname '*.gguf' | grep -q .; then\n echo \"No .gguf model files found under $model_dir. Download the IQ2_XXS imatrix model in ds4-cockpit first.\"\n exit 1\nfi\n\n# Prefer to confirm the recommended IQ2_XXS imatrix quantization is present.\nif find \"$model_dir\" -maxdepth 2 -iname '*IQ2*imatrix*.gguf' | grep -q .; then\n echo \"OK: IQ2_XXS imatrix model is downloaded\"\nelse\n echo \"OK: a GGUF model is present (recommended IQ2_XXS imatrix file not detected by name)\"\nfi\n```\n<!-- @test:end -->\n\n## Запуск сервера\n\nПерейдіть на вкладку **Server Mode**. Виберіть завантажену модель і toolbox, потім налаштуйте розмір контексту, хост і порт. Коли будете готові, натисніть **Start ds4-server**.\n\n> **Порада** Розмір контексту `126000` є розумним початковим значенням, яке має вміститися на одному вузлі — ви можете встановити більше значення, якщо у вас є запас пам'яті, або зменшити його, якщо виникають помилки нестачі пам'яті. Порт (`8000` у цьому посібнику) довільний; виберіть будь-який вільний порт.\n\n> **KV Disk Cache (опціонально).** Увімкнення **KV Disk Cache** вивантажує KV-кеш на диск (у **Host Cache Dir**, за замовчуванням `~/.cache/ds4-kv`), щоб повторювані системні підказки відновлювалися з SSD замість повторного обчислення. Це оптимізація продуктивності для робочих процесів кодових агентів з довгими, повторюваними підказками, і **не обов'язкова** для запуску сервера.\n\n<p align=\"center\">\n <img src=\"assets/ds4-cockpit-server-mode.png\" alt=\"Configuring and starting the ds4 server\" width=\"800\"/>\n</p>\n\nСервер запуститься та слухатиме порт 8000, надаючи доступ до сумісної з OpenAI кінцевої точки API за адресою `http://localhost:8000/v1`.\n\n**Швидка перевірка:**\n```bash\ncurl http://127.0.0.1:8000/v1/chat/completions \\\n -H 'Content-Type: application/json' \\\n -d '{\n \"model\": \"deepseek-v4-flash\",\n \"messages\": [{\"role\": \"user\", \"content\": \"Hello!\"}],\n \"stream\": false\n }'\n```\n\n<!-- @test:id=ds4-server-chat-linux timeout=1200 hidden=True -->\n```bash\nset -euo pipefail\n\n# This runner is shared with other playbooks, and ds4 at a 126k context consumes almost the entire GPU memory pool.\n# So rather than keeping ds4 resident, CI starts the server, verifies a chat completion, then stops it again.\n# This frees the memory for the next job.\n# ds4 has no separate \"unload\"; stopping the server process is what releases the ~80 GB model.\n\nCONTAINER=\"ds4-ci-server\"\nMODEL_DIR=\"$HOME/ds4\"\n\n# Locate the downloaded model (prefer the recommended IQ2_XXS imatrix file).\nmodel_file=\"$(find \"$MODEL_DIR\" -maxdepth 2 -iname '*IQ2*imatrix*.gguf' 2>/dev/null | head -1)\"\nif [ -z \"$model_file\" ]; then\n model_file=\"$(find \"$MODEL_DIR\" -maxdepth 2 -iname '*.gguf' 2>/dev/null | head -1)\"\nfi\nif [ -z \"$model_file\" ]; then\n echo \"No .gguf model found under $MODEL_DIR. Download it in ds4-cockpit first.\"\n exit 1\nfi\nmodel_name=\"$(basename \"$model_file\")\"\n\n# Pick the toolbox image (version-agnostic).\nimage=\"$(podman images --format '{{.Repository}}:{{.Tag}}' | grep -i 'strix-halo-ds4-toolbox' | head -1)\"\nif [ -z \"$image\" ]; then\n echo \"No strix-halo-ds4-toolbox image found. Create the toolbox in ds4-cockpit first.\"\n exit 1\nfi\n\n# Always stop/remove the server on exit so it never holds GPU memory afterwards.\ncleanup() {\n podman stop -t 10 \"$CONTAINER\" >/dev/null 2>&1 || true\n podman rm -f \"$CONTAINER\" >/dev/null 2>&1 || true\n}\ntrap cleanup EXIT\n\n# Remove any stale instance, then start ds4-server detached (same flags ds4-cockpit uses, with -d instead of -it).\npodman rm -f \"$CONTAINER\" >/dev/null 2>&1 || true\npodman run -d --name \"$CONTAINER\" \\\n --device /dev/dri --device /dev/kfd \\\n --group-add keep-groups \\\n --security-opt seccomp=unconfined \\\n --ipc=host \\\n --cap-add=SYS_PTRACE \\\n --security-opt label=disable \\\n --userns=keep-id \\\n -p 127.0.0.1:8000:8000 \\\n -v \"$MODEL_DIR\":/models:ro \\\n \"$image\" \\\n ds4-server -m \"/models/$model_name\" --ctx 126000 --host 0.0.0.0 --port 8000\n\n# Wait for readiness; the ~80 GB model can take a few minutes to load.\nup=false\nfor i in $(seq 1 240); do\n code=\"$(curl -s -o /dev/null -w '%{http_code}' --max-time 3 http://127.0.0.1:8000/v1/models || true)\"\n if [ -n \"$code\" ] && [ \"$code\" != \"000\" ]; then\n up=true\n break\n fi\n if ! podman inspect -f '{{.State.Running}}' \"$CONTAINER\" 2>/dev/null | grep -q true; then\n echo \"ds4-server container exited during startup:\"\n podman logs \"$CONTAINER\" 2>&1 | tail -40 || true\n exit 1\n fi\n sleep 2\ndone\n\nif [ \"$up\" != \"true\" ]; then\n echo \"ds4 server did not become ready on http://127.0.0.1:8000\"\n podman logs \"$CONTAINER\" 2>&1 | tail -40 || true\n exit 1\nfi\necho \"OK: ds4 server is responding on :8000\"\n\nbody='{\n \"model\": \"deepseek-v4-flash\",\n \"messages\": [{\"role\": \"user\", \"content\": \"Reply with exactly: OK\"}],\n \"temperature\": 0,\n \"max_tokens\": 32,\n \"stream\": false\n}'\n\nout=\"$(curl -sS --fail-with-body --max-time 300 http://127.0.0.1:8000/v1/chat/completions \\\n -H 'Content-Type: application/json' \\\n -d \"$body\")\"\n\nif [ -z \"$out\" ]; then\n echo \"Empty response from ds4 /v1/chat/completions\"\n exit 1\nfi\n\nexport DS4_OUT=\"$out\"\npython3 - <<'PY'\nimport json, os, sys\n\ndata = json.loads(os.environ[\"DS4_OUT\"])\nchoices = data.get(\"choices\")\nif not choices:\n print(\"Response has no 'choices':\")\n print(json.dumps(data, indent=2)[:2000])\n sys.exit(1)\n\nmessage = choices[0].get(\"message\", {}) or {}\ncontent = message.get(\"content\") or message.get(\"reasoning_content\")\nif not content:\n print(\"Response choice has empty content:\")\n print(json.dumps(data, indent=2)[:2000])\n sys.exit(1)\n\nprint(\"OK: ds4 chat/completions returned content\")\nPY\n\necho \"OK: ds4 server test complete; server stopped and GPU memory released\"\n```\n<!-- @test:end -->\n\n## Підключення веб-інтерфейсу\n\nВи можете підключити будь-який чат-інтерфейс, що підтримує формат OpenAI API. Наприклад, щоб використати HuggingFace ChatUI:\n\n```bash\ndocker run -p 3000:3000 \\\n --add-host=host.docker.internal:host-gateway \\\n -e OPENAI_BASE_URL=http://host.docker.internal:8000/v1 \\\n -e OPENAI_API_KEY=dummy \\\n -v chat-ui-data:/data \\\n ghcr.io/huggingface/chat-ui-db\n```\n\nВідкрийте `http://localhost:3000` у вашому браузері, щоб почати спілкування.\n## Підключення агента для кодування\n\nСервер ds4 надає сумісні кінцеві точки як OpenAI, так і Anthropic, тому більшість агентів для кодування можуть підключатися до нього напряму. Наприклад, щоб додати його до агента для кодування `pi`, додайте наступний блок до `~/.pi/agent/models.json`:\n\n```json\n\"ds4\": {\n \"name\": \"ds4.c local\",\n \"baseUrl\": \"http://localhost:8000/v1\",\n \"api\": \"openai-completions\",\n \"apiKey\": \"dsv4-local\",\n \"compat\": {\n \"supportsStore\": false,\n \"supportsDeveloperRole\": false,\n \"supportsReasoningEffort\": true,\n \"supportsUsageInStreaming\": true,\n \"maxTokensField\": \"max_tokens\",\n \"supportsStrictMode\": false,\n \"thinkingFormat\": \"deepseek\",\n \"requiresReasoningContentOnAssistantMessages\": true\n },\n \"models\": [\n {\n \"id\": \"deepseek-v4-flash\",\n \"name\": \"DeepSeek V4 Flash (ds4.c local)\",\n \"reasoning\": true,\n \"thinkingLevelMap\": {\n \"off\": null,\n \"minimal\": \"low\",\n \"low\": \"low\",\n \"medium\": \"medium\",\n \"high\": \"high\",\n \"xhigh\": \"xhigh\"\n },\n \"input\": [\"text\"],\n \"contextWindow\": 131072,\n \"maxTokens\": 65536,\n \"cost\": { \"input\": 0, \"output\": 0, \"cacheRead\": 0, \"cacheWrite\": 0 }\n }\n ]\n}\n```\n\n> **Порада**: Якщо ваш агент для кодування або Web UI працює на іншій машині, ніж платформа Halo, вам потрібно буде переспрямувати порт 8000 через SSH:\n> ```bash\n> ssh -L 0.0.0.0:8000:localhost:8000 <halo-host-ip>\n> ```\n\n## Наступні кроки\n\n- **Кластеризація з кількох вузлів**: Якщо у вас є два пристрої Halo, ds4 підтримує розподіл моделі Q4 (~153 ГБ) між обома машинами за допомогою пайплайн-паралелізму. Дивіться [документацію ds4-toolbox](https://github.com/kyuz0/strix-halo-ds4-toolbox#distributed-inference-pipeline-parallelism) для отримання інструкцій із налаштування.\n- **Спекулятивне декодування (MTP)**: Завантажте ваги MTP (~3,6 ГБ) і передайте `--mtp` серверу для швидшої швидкості генерації.\n- **Вивантаження кешу KV на диск**: Для робочих процесів агентів для кодування увімкніть `--kv-disk-dir`, щоб повторювані системні запити відновлювалися з SSD замість повторного обчислення щоразу.\n\nДля отримання додаткової інформації дивіться [репозиторій ds4](https://github.com/antirez/ds4) та [набір інструментів ds4-cockpit](https://github.com/kyuz0/strix-halo-ds4-toolbox)."}}}}