{"id":481904,"date":"2026-06-01T11:48:18","date_gmt":"2026-06-01T11:48:18","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=481904"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=481904","title":{"rendered":"Qwen3.5 \u043d\u0430 \u0434\u0432\u0443\u0445 V100, reverse SSH \u0432\u043c\u0435\u0441\u0442\u043e Cloudflare \u0432 Telegram Mini App: \u0441\u043e\u0431\u0438\u0440\u0430\u044e AI-\u0440\u0435\u043f\u0435\u0442\u0438\u0442\u043e\u0440\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u0433\u043e"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2><\/h2>\n<p>\u0423 \u043c\u0435\u043d\u044f \u0432 \u0443\u0433\u043b\u0443 \u043a\u043e\u043c\u043d\u0430\u0442\u044b \u0441\u0442\u043e\u0438\u0442 \u0441\u0435\u0440\u0432\u0435\u0440 \u0441 \u0434\u0432\u0443\u043c\u044f Tesla V100 32GB. \u041e\u043d\u0438 \u0434\u043ec\u0442\u0430\u043b\u0438\u0441\u044c \u043c\u043d\u0435 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0442\u0432\u0430\u043b\u0438\u043b\u0430\u0441\u044c, \u0438 \u043f\u043e\u043b\u0433\u043e\u0434\u0430 \u0441\u0442\u043e\u044f\u043b\u0438 \u043c\u0451\u0440\u0442\u0432\u044b\u043c \u0433\u0440\u0443\u0437\u043e\u043c. \u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0440\u0430\u0437 \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u043c \u2014 Simpler, Doalingo, \u0435\u0449\u0451 \u043f\u0430\u0440\u0430 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432. \u0425\u043e\u0440\u043e\u0448\u0438\u0435, \u043d\u043e \u043c\u043d\u0435 \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u043b \u0444\u043e\u0440\u043c\u0430\u0442: \u044f \u0445\u043e\u0442\u0435\u043b \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u00ab\u043e\u0442\u043a\u0440\u044b\u043b \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u0434\u043e\u043c\u0430 \u043d\u0430 \u0441\u0435\u043c\u044c \u043c\u0438\u043d\u0443\u0442, \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043b, \u0437\u0430\u043a\u0440\u044b\u043b\u00bb. \u0411\u0435\u0437 \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044f, \u0431\u0435\u0437 \u043a\u0430\u043c\u0435\u0440\u044b, \u0431\u0435\u0437 \u043f\u043e\u0438\u0441\u043a\u0430 \u0442\u044c\u044e\u0442\u043e\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442 \u043c\u043e\u0439 \u0430\u043a\u0446\u0435\u043d\u0442 \u0441 \u043f\u044f\u0442\u043e\u0433\u043e \u0440\u0430\u0437\u0430.<\/p>\n<p>\u0421\u043e\u0448\u043b\u043e\u0441\u044c.<\/p>\n<p>\u0418\u0434\u0435\u044f: Telegram Mini App, \u0432 \u043d\u0451\u043c \u043a\u043d\u043e\u043f\u043a\u0430 \u00ab\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c\u00bb, \u0437\u0430 \u043d\u0435\u0439 \u2014 AI-\u0440\u0435\u043f\u0435\u0442\u0438\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043b\u044b\u0448\u0438\u0442, \u0447\u0442\u043e \u044f \u0441\u043a\u0430\u0437\u0430\u043b, \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0433\u043e\u043b\u043e\u0441\u043e\u043c, \u043f\u043e\u043c\u043d\u0438\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0430, \u0442\u044b\u043a\u0430\u0435\u0442 \u0432 \u043c\u043e\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 \u043f\u043e\u0434\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u043b\u043e\u0432\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u043f\u044b\u0442\u0430\u044e\u0441\u044c \u0432\u044b\u0443\u0447\u0438\u0442\u044c. \u041f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e.<\/p>\n<p><strong>\u041c\u043e\u0434\u0435\u043b\u044c Qwen3.5 \u0432\u044b\u0448\u043b\u0430 25 \u0444\u0435\u0432\u0440\u0430\u043b\u044f , \u044f \u0435\u0451 \u0433\u043e\u043d\u044f\u044e \u0432\u0441\u0435\u0433\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0434\u0435\u043b\u044c, \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0441\u044b\u0440\u043e\u0439.<\/strong> \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u2014 \u043f\u0440\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u043e \u0442\u043e, \u043d\u0430 \u043a\u0430\u043a\u0438\u0435 \u0433\u0440\u0430\u0431\u043b\u0438 \u044f \u0443\u0436\u0435 \u0443\u0441\u043f\u0435\u043b \u043d\u0430\u0441\u0442\u0443\u043f\u0438\u0442\u044c.<\/p>\n<h3>TL;DR<\/h3>\n<ul>\n<li>\n<p><strong>\u0427\u0442\u043e:<\/strong> Telegram Mini App \u0434\u043b\u044f \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u043d\u043e\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u0433\u043e. \u0414\u0432\u0430 \u0440\u0435\u0436\u0438\u043c\u0430 \u0433\u043e\u043b\u043e\u0441\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>Local-\u0440\u0435\u0436\u0438\u043c:<\/strong> vLLM \u0441 <code>QuantTrio\/Qwen3.5-35B-A3B-AWQ<\/code> (35B total \/ 3B active, MoE, 25 GiB AWQ INT4) \u043d\u0430 2\u00d7 Tesla V100 32GB + faster-whisper + Kokoro-82M, \u0432\u0441\u0451 \u043d\u0430 \u0442\u0435\u0445 \u0436\u0435 \u043a\u0430\u0440\u0442\u0430\u0445.<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u0435\u0442\u0435\u0432\u043e\u0439 \u0441\u0442\u044b\u043a:<\/strong> \u0434\u043e\u043c\u0430\u0448\u043d\u0438\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u2194 VPS \u0447\u0435\u0440\u0435\u0437 reverse SSH (autossh + systemd, restricted user \u0441 <code>permitopen=localhost:23333<\/code>). \u041d\u0438\u043a\u0430\u043a\u043e\u0433\u043e Cloudflare Tunnel, \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e Tailscale.<\/p>\n<\/li>\n<li>\n<p><strong>\u0413\u043b\u0430\u0432\u043d\u044b\u0435 \u043c\u0438\u043d\u044b:<\/strong> FlashAttention 2 \u043d\u0430 Volta \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 (\u043d\u0443\u0436\u0435\u043d XFORMERS backend); bf16 \u043d\u0430 Volta \u0442\u043e\u0436\u0435 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 (\u043d\u0443\u0436\u0435\u043d <code>--dtype float16<\/code>); QuantTrio AWQ-\u0441\u0431\u043e\u0440\u043a\u0430 Qwen3.5 \u043c\u043e\u043b\u0447\u0430 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 <code>enable_thinking=false<\/code> \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 (\u043d\u0443\u0436\u043d\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0444\u043b\u0430\u0433\u0438 vLLM); macOS Chrome \u043d\u0435 \u0434\u0430\u0451\u0442 \u0432\u0442\u043e\u0440\u043e\u0439 AudioContext \u043d\u0430 16 kHz \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 \u043d\u0430 24 kHz (\u043d\u0443\u0436\u043d\u043e \u0440\u0443\u0447\u043d\u043e\u0439 downsampling \u0432 AudioWorklet)<\/p>\n<\/li>\n<\/ul>\n<h3>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043e\u0434\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u043e\u0439<\/h3>\n<pre><code>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510                \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u2502 \u0414\u043e\u043c (V100 server)            \u2502                \u2502 VPS (public IP)                    \u2502\u2502                              \u2502                \u2502                                    \u2502\u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u2502  reverse SSH   \u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u2502\u2502  \u2502 vLLM :23333            \u2502\u25c0\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u25b6\u2502 FastAPI backend              \u2502  \u2502\u2502  \u2502 Qwen3.5-35B-A3B-AWQ    \u2502  \u2502  autossh +     \u2502  \u2502  \/api\/* + \/ws\/voice          \u2502  \u2502\u2502  \u2502 tensor-parallel = 4    \u2502  \u2502  systemd       \u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2502\u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2502                \u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u2502\u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u2502                \u2502  \u2502 aiogram 3 bot (long poll)    \u2502  \u2502\u2502  \u2502 faster-whisper :23334  \u2502\u25c0\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2502\u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2502                \u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u2502\u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u2502                \u2502  \u2502 Mini App (React+Vite SPA)    \u2502  \u2502\u2502  \u2502 Kokoro TTS :23335      \u2502\u25c0\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2502\u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2502                \u2502       \u25b2                            \u2502\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518                \u2502       \u2502  Nginx + Let's Encrypt     \u2502                                                \u2502       \u2502                            \u2502                                                \u2502  \u250c\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u2502                                                \u2502  \u2502  MySQL 8  +  Redis 7         \u2502  \u2502                                                \u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2502                                                \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518                                                        \u2502  HTTPS \/ WSS                                                        \u25bc                                                \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510                                                \u2502   Telegram    \u2502                                                \u2502   client      \u2502                                                \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0440\u0438 \u043f\u043e\u0434\u0434\u043e\u043c\u0435\u043d\u0430 \u0437\u0430 \u043e\u0431\u0449\u0438\u043c Nginx \u043d\u0430 VPS:<\/p>\n<pre><code>englishbot.&lt;\u043c\u043e\u0439 \u0434\u043e\u043c\u0435\u043d&gt;      \u2192 Mini App (React SPA \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 \u0441 nginx \u0432\u043d\u0443\u0442\u0440\u0438)api.&lt;\u043c\u043e\u0439 \u0434\u043e\u043c\u0435\u043d&gt;     \u2192 FastAPI backend (\/api\/* + \/ws\/*)admin.&lt;\u043c\u043e\u0439 \u0434\u043e\u043c\u0435\u043d&gt;   \u2192 Admin Panel (React SPA)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\">\n<\/td>\n<th data-colwidth=\"50\" width=\"50\">\n<p align=\"left\">\n<\/th>\n<td>\n<p align=\"left\">\n<\/td>\n<td>\n<p align=\"left\">\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>\u0411\u044d\u043a\u0435\u043d\u0434, \u0431\u043e\u0442, Mini App \u0438 \u0430\u0434\u043c\u0438\u043d\u043a\u0430 \u2014 \u0447\u0435\u0442\u044b\u0440\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0432 \u043e\u0434\u043d\u043e\u043c <code>docker-compose.yml<\/code> \u043d\u0430 VPS. MySQL \u0438 Redis \u043f\u043e\u043a\u0430 \u0436\u0438\u0432\u0443\u0442 \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u0445\u043e\u0441\u0442\u0435 VPS. LLM, STT \u0438 TTS \u2014 \u043d\u0430 \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0441 GPU. \u041c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u2014 reverse SSH-\u0442\u0443\u043d\u043d\u0435\u043b\u044c.<\/p>\n<h3>\u041f\u043e\u0447\u0435\u043c\u0443 \u0447\u0435\u0442\u044b\u0440\u0435 V100 \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 Qwen3.5-35B-A3B-AWQ<\/h3>\n<p>V100 \u2014 \u044d\u0442\u043e Volta, compute capability 7.0, \u0440\u0435\u043b\u0438\u0437 2017. \u041f\u043e \u043c\u0435\u0440\u043a\u0430\u043c 2026 \u0433\u043e\u0434\u0430 \u2014 \u043e\u043b\u0434\u0441\u043a\u0443\u043b. \u041d\u0438\u043a\u0430\u043a\u043e\u0433\u043e FlashAttention 2, \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e bf16, \u043d\u0430 ROCm \u0438 Triton-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u0445 \u0438\u0445 \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u044e\u0442 \u043a\u0430\u043a \u043a\u043b\u0430\u0441\u0441.<\/p>\n<p>\u0418\u0437 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430 E2E Networks (\u0432\u044b\u0448\u0435\u043b \u0432 \u043c\u0430\u0440\u0442\u0435 2026, sweep \u043f\u043e vLLM\/TGI\/TensorRT-LLM \u043d\u0430 7B\u201370B):<\/p>\n<blockquote>\n<p>\u00abV100 is vLLM-only. TGI, TensorRT-LLM, and Triton&#8217;s latest containers reject Volta GPUs entirely.\u00bb<\/p>\n<\/blockquote>\n<p>\u042d\u0442\u043e, \u043a\u0441\u0442\u0430\u0442\u0438, \u0438 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441 \u00ab\u043f\u043e\u0447\u0435\u043c\u0443 vLLM, \u0430 \u043d\u0435 TGI\u00bb \u2014 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0432\u044b\u0431\u043e\u0440\u0430 \u0443 \u043c\u0435\u043d\u044f \u0438 \u043d\u0435 \u0431\u044b\u043b\u043e. \u041d\u0430 2\u00d7V100 PCIe \u0432 FP16 \u0430\u0432\u0442\u043e\u0440\u044b \u0442\u043e\u0433\u043e \u0436\u0435 \u043e\u0442\u0447\u0451\u0442\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 <strong>400,2 tok\/s \u043d\u0430 Llama-2-7B<\/strong> (p50 latency 2 559 \u043c\u0441, gen_len 256) \u0438 <strong>228,8 tok\/s \u043d\u0430 Llama-2-13B<\/strong> (p50 latency 4 475 \u043c\u0441). \u0414\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e-\u0434\u0432\u0443\u0445 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u044b\u0445 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u043e\u0432 \u2014 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0434\u0435\u043b\u044c. \u042f \u0447\u0435\u0441\u0442\u043d\u043e \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b Llama-3.1-8B \u0438 Qwen2.5-14B; \u043e\u0431\u0435 \u0434\u043b\u044f \u0442\u044c\u044e\u0442\u043e\u0440\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u0433\u043e \u043e\u0449\u0443\u0449\u0430\u043b\u0438\u0441\u044c \u00ab\u0432\u0435\u0436\u043b\u0438\u0432\u044b\u043c\u0438, \u043d\u043e \u043f\u043b\u043e\u0441\u043a\u043e\u0432\u0430\u0442\u044b\u043c\u0438\u00bb. \u041a\u043e\u0433\u0434\u0430 \u0432\u044b\u0448\u0435\u043b Qwen3.5, \u044f \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0448\u0451\u043b \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0432 AWQ \u2014 \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043a\u043b\u0430\u0441\u0442\u044c 70B \u0432 FP16 \u043d\u0430 4\u00d732 GB \u043f\u043e\u0441\u043b\u0435 KV-cache \u0438 \u043e\u0432\u0435\u0440\u0445\u0435\u0434\u0430 vLLM \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442.<\/p>\n<p><code>QuantTrio\/Qwen3.5-35B-A3B-AWQ<\/code>\u043b\u0451\u0433 \u043a\u0430\u043a \u0440\u043e\u0434\u043d\u043e\u0439. \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u2014 \u044d\u0442\u043e, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u0432 Qwen3.5. \u0414\u043e\u0441\u043b\u043e\u0432\u043d\u043e \u0438\u0437 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u043c\u043e\u0434\u0435\u043b\u0438:<\/p>\n<blockquote>\n<p>\u00abNumber of Parameters: 35B in total and 3B activated. Number of Layers: 40. Hidden Layout: 10 \u00d7 (3 \u00d7 (Gated DeltaNet \u2192 MoE) \u2192 1 \u00d7 (Gated Attention \u2192 MoE)). Mixture Of Experts: Number of Experts: 256. Number of Activated Experts: 8 Routed + 1 Shared. Context Length: 262,144 natively and extensible up to 1,010,000 tokens.\u00bb<\/p>\n<\/blockquote>\n<p>\u041f\u0435\u0440\u0435\u0432\u043e\u0436\u0443: <strong>\u0438\u0437 40 \u0441\u043b\u043e\u0451\u0432 \u0442\u043e\u043b\u044c\u043a\u043e 10 \u2014 \u044d\u0442\u043e \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0435 Gated Attention. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 30 \u2014 Gated DeltaNet, \u043b\u0438\u043d\u0435\u0439\u043d\u0430\u044f attention.<\/strong> KV-cache \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0442\u0435\u0445 \u0441\u0430\u043c\u044b\u0445 \u0434\u0435\u0441\u044f\u0442\u0438, \u0438 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u0447\u043d\u043e \u043f\u043e \u0434\u043b\u0438\u043d\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430. \u0413\u0440\u0443\u0431\u043e: \u043f\u0440\u0438 16 query-\u0433\u043e\u043b\u043e\u0432\u0430\u0445 \u0438 2 KV-\u0433\u043e\u043b\u043e\u0432\u0430\u0445 \u0441 head_dim=256 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u043b\u043e\u0439 full-attention \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u043e\u043a\u043e\u043b\u043e <code>2 \u00d7 2 \u00d7 256 \u00d7 2 \u0431\u0430\u0439\u0442 = 2 KB \u043d\u0430 \u0442\u043e\u043a\u0435\u043d \u043d\u0430 \u0441\u043b\u043e\u0439<\/code>, \u0432\u0441\u0435\u0433\u043e ~20 KB\/\u0442\u043e\u043a\u0435\u043d \u043d\u0430 \u0434\u0435\u0441\u044f\u0442\u044c \u0441\u043b\u043e\u0451\u0432. \u041d\u0430 262 144 \u0442\u043e\u043a\u0435\u043d\u0430 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u2014 \u043e\u043a\u043e\u043b\u043e 5,4 GB \u043d\u0430 \u0441\u0435\u0441\u0441\u0438\u044e \u0432 FP16. \u041f\u0440\u0438 <code>tensor-parallel-size=2<\/code> \u044d\u0442\u043e ~2,7 GB \u043d\u0430 \u043a\u0430\u0440\u0442\u0443 \u043d\u0430 \u043e\u0434\u043d\u0443 \u0441\u0435\u0441\u0441\u0438\u044e. \u041d\u0430 32 GB V100 \u2014 \u0440\u0435\u0430\u043b\u044c\u043d\u043e.<\/p>\n<h3>\u0413\u0440\u0430\u0431\u043b\u044f \u21161: FlashAttention \u0438 Volta<\/h3>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a vLLM \u043d\u0430 V100 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043b \u043c\u0435\u043d\u044f \u043b\u043e\u0433\u043e\u043c:<\/p>\n<pre><code>Cannot use FlashAttention-2 backend for Volta and Turing GPUs.Using XFormers backend.<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u042d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e. \u042d\u0442\u043e \u0434\u0430\u0436\u0435 \u043d\u0435 \u0432\u0430\u0440\u043d\u0438\u043d\u0433 \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0444\u0430\u043a\u0442 \u0436\u0438\u0437\u043d\u0438. \u0418\u0437 \u0430\u043f\u0441\u0442\u0440\u0438\u043c\u0430 Dao-AILab\/flash-attention, issue #1760:<\/p>\n<blockquote>\n<p>\u00abI understand that FlashAttention 2+ requires SM80+, which V100s don&#8217;t support.\u00bb<\/p>\n<\/blockquote>\n<p>\u0418 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, vLLM issue #6173:<\/p>\n<blockquote>\n<p>\u00abRuntimeError: FlashAttention only supports Ampere GPUs or newer.\u00bb<\/p>\n<\/blockquote>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435: \u044f\u0432\u043d\u043e \u0441\u0442\u0430\u0432\u0438\u043c \u0431\u044d\u043a\u0435\u043d\u0434 <strong>XFORMERS<\/strong>. \u041d\u0435 FLASH_ATTN, \u043d\u0435 FLASHINFER, \u043d\u0435 FLASHMLA. \u041d\u0430 Volta \u0438\u0437 \u0436\u0438\u0432\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u2014 <code>XFORMERS<\/code> \u0438 <code>TORCH_SDPA<\/code>. <code>TRITON_ATTN<\/code> \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u043d\u043e \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u0438\u0434\u0451\u0442 \u043d\u0430 AMD ROCm \u0438 Intel XPU; \u043d\u0430 Volta \u044d\u0442\u043e untested path, \u044f \u0442\u0443\u0434\u0430 \u043d\u0435 \u043f\u043e\u043b\u0435\u0437. \u0418\u0437 \u0431\u043b\u043e\u0433\u0430 vLLM \u043f\u043e Triton-backend (\u043c\u0430\u0440\u0442 2026):<\/p>\n<blockquote>\n<p>\u00abSince the Triton attention backend is always present, it also serves as a fallback backend, if FlashAttention, FlashInfer, or other dependencies are unavailable or fail to import.\u00bb<\/p>\n<\/blockquote>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u043e\u043d fallback, \u043d\u0435 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440. \u041d\u0430 V100 \u2014 XFORMERS.<\/p>\n<h3>\u0413\u0440\u0430\u0431\u043b\u044f \u21162: bf16 \u043d\u0430 Volta \u0442\u043e\u0436\u0435 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c vLLM \u0431\u0435\u0437 \u044f\u0432\u043d\u043e\u0433\u043e <code>--dtype<\/code>, \u043d\u0430 V100 \u043f\u043e\u043b\u0443\u0447\u0438\u0448\u044c:<\/p>\n<pre><code>Bfloat16 is only supported on GPUs with compute capability of at least 8.0.Your Tesla V100-SXM2-32GB GPU has compute capability 7.0.You can use float16 instead by explicitly setting the dtype flag in CLI,for example: --dtype=half<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 <a href=\"http:\/\/start.sh\" rel=\"noopener noreferrer nofollow\"><code>start.sh<\/code><\/a> \u0441\u0442\u043e\u0438\u0442 <code>--dtype float16<\/code>. \u041d\u0438\u043a\u0430\u043a\u0438\u0445 \u0441\u044e\u0440\u043f\u0440\u0438\u0437\u043e\u0432 \u043e\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0431\u043e\u0440\u0430 dtype.<\/p>\n<h3>\u0413\u0440\u0430\u0431\u043b\u044f \u21163: AWQ + concurrency \u2014 \u0440\u0435\u0437\u043a\u043e\u0435 \u043f\u0430\u0434\u0435\u043d\u0438\u0435 throughput<\/h3>\n<p>\u042d\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0435 \u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u0435\u043c\u043e\u0435. vLLM issue #20469, \u043f\u043e AWQ-\u0441\u0431\u043e\u0440\u043a\u0435 Qwen3-14B \u043d\u0430 \u043e\u0434\u043d\u043e\u043c A100 80GB:<\/p>\n<blockquote>\n<p>\u00abWe observed a significant drop in output tokens per second when serving Qwen\/Qwen3-14B-AWQ on a single A100 80GB GPU using vLLM v0.9.1 with <code>--max-model-len 16384<\/code>. At concurrency=1, the model achieves ~52 output tokens per second. However, this drops sharply to ~12 at concurrency=5 and ~3 at concurrency=25.\u00bb<\/p>\n<\/blockquote>\n<p>\u041f\u0435\u0440\u0435\u0432\u043e\u0436\u0443: \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0442\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0448\u044c 52 tok\/s, \u043d\u0430 \u043f\u044f\u0442\u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u2014 12, \u043d\u0430 25 \u2014 \u0442\u0440\u0438. \u042d\u0442\u043e AWQ Marlin-\u044f\u0434\u0440\u0430 \u0432\u0435\u0434\u0443\u0442 \u0441\u0435\u0431\u044f \u043f\u043b\u043e\u0445\u043e \u043f\u043e\u0434 concurrency. \u041d\u0430 Volta \u0441 tensor-parallel=4 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0434\u0440\u0443\u0433\u0430\u044f (TP \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442), \u043d\u043e \u0438\u043b\u043b\u044e\u0437\u0438\u0439 \u043f\u0440\u043e \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e.<\/p>\n<p>\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0432\u044b\u0432\u043e\u0434 \u0434\u043b\u044f \u0431\u043e\u0442\u0430: \u043d\u0430 free-tier \u0441 10 \u043c\u0438\u043d\u0443\u0442\u0430\u043c\u0438 \u0432 \u0434\u0435\u043d\u044c \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f\u0449\u0438\u0445 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e. \u0415\u0441\u043b\u0438 \u043f\u043e\u0439\u0434\u0451\u0442 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u2014 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043b\u0438\u0431\u043e \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0442\u043e\u0440\u0443\u044e \u0438\u043d\u0441\u0442\u0430\u043d\u0446\u0438\u044e vLLM \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u043a\u0430\u0440\u0442, \u043b\u0438\u0431\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0432 FP16 \u0431\u0435\u0437 \u043a\u0432\u0430\u043d\u0442\u0438\u0437\u0430\u0446\u0438\u0438 (\u043d\u043e \u0442\u043e\u0433\u0434\u0430 35B \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u0432\u043b\u0435\u0437\u0435\u0442). \u042d\u0442\u043e \u0442\u0430 \u0441\u0430\u043c\u0430\u044f \u00ab\u0437\u043d\u0430\u044e, \u0447\u0442\u043e \u043d\u0435\u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u00bb \u0442\u043e\u0447\u043a\u0430.<\/p>\n<h3>vLLM start.sh \u2014 \u0431\u0435\u0437 \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0439<\/h3>\n<p><code>\/home\/user\/1Cat-vLLM\/start_<\/code><a href=\"http:\/\/vllm.sh\" rel=\"noopener noreferrer nofollow\"><code>vllm.sh<\/code><\/a>:<\/p>\n<pre><code class=\"bash\">#!\/usr\/bin\/env bashset -ecd \"$(dirname \"$0\")\"source venv\/bin\/activateexec python -m vllm.entrypoints.openai.api_server \\    --model QuantTrio\/Qwen3.5-35B-A3B-AWQ \\    --quantization awq \\    --dtype float16 \\    --gpu-memory-utilization 0.90 \\    --max-model-len 262144 \\    --tensor-parallel-size 4 \\    --max-num-seqs 8 \\    --max-num-batched-tokens 65536 \\    --attention-backend XFORMERS \\    --skip-mm-profiling \\    --limit-mm-per-prompt '{\"image\":0,\"video\":0}' \\    --compilation-config '{\"cudagraph_mode\":\"full_and_piecewise\",\"cudagraph_capture_sizes\":[1,2,4,8,16,32]}' \\    --disable-custom-all-reduce \\    --reasoning-parser qwen3 \\    --default-chat-template-kwargs '{\"enable_thinking\": false}' \\    --host 0.0.0.0 \\    --port 23333<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u043e:<\/p>\n<ul>\n<li>\n<p><code>--quantization awq --dtype float16<\/code> \u2014 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043d\u0430 Volta.<\/p>\n<\/li>\n<li>\n<p><code>--gpu-memory-utilization 0.90<\/code> \u2014 \u0434\u0435\u0441\u044f\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u0431\u0443\u0444\u0435\u0440\u043e\u043c, \u0432\u0441\u0451 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u0434 \u0432\u0435\u0441\u0430 \u0438 KV-cache.<\/p>\n<\/li>\n<li>\n<p><code>--max-model-len 262144<\/code> \u2014 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 Qwen3.5. \u041c\u043e\u0436\u043d\u043e \u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0434\u043e 32 768 \u2014 \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u0430\u044f \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430 \u043c\u043e\u0434\u0435\u043b\u0438 \u043f\u0440\u044f\u043c\u043e \u044d\u0442\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442 \u0434\u043b\u044f \u0441\u043a\u0440\u043e\u043c\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u0432 (\u00ab<code>--max-model-len 32768 --tensor-parallel-size 4 --enable-expert-parallel<\/code>\u00bb). \u042f \u0434\u0435\u0440\u0436\u0443 262K, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430 \u0431\u043e\u0442\u0430-\u0440\u0435\u043f\u0435\u0442\u0438\u0442\u043e\u0440\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043d\u0435 \u0447\u0430\u0441\u0442\u043e, \u0430 \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u2014 \u043e\u043d \u043e\u0447\u0435\u043d\u044c \u043d\u0443\u0436\u0435\u043d.<\/p>\n<\/li>\n<li>\n<p><code>--tensor-parallel-size 4<\/code> \u2014 \u0432\u0441\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u043a\u0430\u0440\u0442\u044b \u0432 \u043e\u0434\u0438\u043d pipeline. \u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0433\u0430\u0439\u0434 Qwen Team \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442 TP=8, \u043d\u043e \u0443 \u043c\u0435\u043d\u044f \u0438\u0445 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u0447\u0435\u0442\u044b\u0440\u0435.<\/p>\n<\/li>\n<li>\n<p><code>--max-num-seqs 8 --max-num-batched-tokens 65536<\/code> \u2014 \u043a\u0440\u044b\u0448\u0430 \u043f\u043e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u043c \u0441\u0435\u0441\u0441\u0438\u044f\u043c \u0438 \u0442\u043e\u043a\u0435\u043d\u0430\u043c \u0432 \u043e\u0434\u043d\u043e\u043c \u0431\u0430\u0442\u0447\u0435.<\/p>\n<\/li>\n<li>\n<p><code>--attention-backend XFORMERS<\/code> \u2014 \u0441\u043c. \u0433\u0440\u0430\u0431\u043b\u044e \u21161.<\/p>\n<\/li>\n<li>\n<p><code>--limit-mm-per-prompt '{\"image\":0,\"video\":0}' --skip-mm-profiling<\/code> \u2014 multimodal \u044f \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e, \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u044e \u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<\/li>\n<li>\n<p><code>--disable-custom-all-reduce<\/code> \u2014 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 all-reduce \u043d\u0430 \u0441\u0442\u0430\u0440\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u043a\u043e\u043d\u043d\u0435\u043a\u0442\u0430\u0445 PCIe Gen3 \u0432\u0435\u0434\u0451\u0442 \u0441\u0435\u0431\u044f \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e, \u0440\u043e\u0434\u043d\u043e\u0439 NCCL \u043d\u0430\u0434\u0451\u0436\u043d\u0435\u0435.<\/p>\n<\/li>\n<li>\n<p><code>--compilation-config<\/code> \u2014 \u0437\u0430\u0445\u0432\u0430\u0442 CUDA-graphs \u0434\u043b\u044f \u0442\u0438\u043f\u043e\u0432\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0431\u0430\u0442\u0447\u0430. \u0425\u043e\u043b\u043e\u0434\u043d\u044b\u0439 \u0441\u0442\u0430\u0440\u0442 \u0447\u0443\u0442\u044c \u0434\u043e\u043b\u044c\u0448\u0435, hot path \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435.<\/p>\n<\/li>\n<li>\n<p><code>--reasoning-parser qwen3 --default-chat-template-kwargs '{\"enable_thinking\": false}'<\/code> \u2014 \u043f\u0440\u043e \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0433\u0440\u0430\u0431\u043b\u044f, \u0441\u043c. \u043d\u0438\u0436\u0435.<\/p>\n<\/li>\n<\/ul>\n<h3>\u0413\u0440\u0430\u0431\u043b\u044f \u21164: enable_thinking=false \u0432 QuantTrio \u043c\u043e\u043b\u0447\u0430 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f<\/h3>\n<p>Qwen3.5 \u2014 reasoning-\u043c\u043e\u0434\u0435\u043b\u044c. \u0412 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u043c \u0431\u043e\u0442\u0435 \u044d\u0442\u043e \u043a\u0430\u0442\u0430\u0441\u0442\u0440\u043e\u0444\u0430: TTS \u043e\u0437\u0432\u0443\u0447\u0438\u0442 \u0445\u043e\u0434 \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f \u0446\u0435\u043b\u0438\u043a\u043e\u043c. \u00abHmm, let me think. The user asked me about&#8230; well, in English we usually say&#8230;\u00bb \u2014 \u0438 \u043f\u044f\u0442\u044c \u0441\u0435\u043a\u0443\u043d\u0434 \u0442\u0438\u0448\u0438\u043d\u044b \u043f\u043e\u043a\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u043e\u0434\u0443\u043c\u0430\u0435\u0442.<\/p>\n<p>\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f Qwen \u0433\u043e\u0432\u043e\u0440\u0438\u0442: \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0439 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441 <code>chat_template_kwargs.enable_thinking=false<\/code> \u0438 \u0432\u0441\u0451. \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f vLLM \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442: \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043a\u0438\u043d\u0443\u0442\u044c \u0447\u0435\u0440\u0435\u0437 <code>extra_body<\/code>. \u041f\u043e \u0444\u0430\u043a\u0442\u0443 \u0432 QuantTrio AWQ-\u0441\u0431\u043e\u0440\u043a\u0435 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442.<\/p>\n<p>vLLM issue #35574 (\u0437\u0430\u043a\u0440\u044b\u0442 \u043f\u043e\u0441\u043b\u0435 \u0444\u0438\u043a\u0441\u0430 \u0432 \u0430\u043f\u0441\u0442\u0440\u0438\u043c\u0435):<\/p>\n<blockquote>\n<p>\u00abThe vllm\/vllm-openai:qwen3_5 image is deployed. Describe the bug: Adding <code>\"chat_template_kwargs\": {\"enable_thinking\": false}<\/code> to the HTTP body does not disable the thinking process.\u00bb<\/p>\n<\/blockquote>\n<p>HuggingFace discussion \u043f\u043e Qwen3.5-27B:<\/p>\n<blockquote>\n<p>\u00ab<code>WARNING 02-25 15:46:28 [protocol.py:51] The following fields were present in the request but ignored: {'enable_thinking', 'extra_body'}<\/code>\u00bb<\/p>\n<\/blockquote>\n<p>\u0418 \u0432\u0438\u0448\u0435\u043d\u043a\u0430 \u043f\u0440\u044f\u043c\u043e \u0438\u0437 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 QuantTrio:<\/p>\n<blockquote>\n<p>\u00abQwen3.5 does not officially support the soft switch of Qwen3, i.e., <code>\/think<\/code> and <code>\/nothink<\/code>. Qwen3.5 will think by default before response.\u00bb<\/p>\n<\/blockquote>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c soft-switch \u0447\u0435\u0440\u0435\u0437 <code>\/no_think<\/code> \u0432 \u043f\u0440\u043e\u043c\u043f\u0442\u0435 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0447\u0435\u0440\u0435\u0437 <code>extra_body<\/code> \u0442\u043e\u0436\u0435 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0434\u0443\u043c\u0430\u0435\u0442.<\/p>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432 \u0438\u0442\u043e\u0433\u0435 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u043d\u0430\u0434\u0451\u0436\u043d\u043e: \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0444\u043b\u0430\u0433\u0438 vLLM <code>--reasoning-parser qwen3<\/code> \u043f\u043b\u044e\u0441 <code>--default-chat-template-kwargs '{\"enable_thinking\": false}'<\/code>. \u042d\u0442\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0430 \u043d\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u2014 vLLM \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u0438\u0445 \u043a\u043e \u0432\u0441\u0435\u043c\u0443 \u0442\u0440\u0430\u0444\u0438\u043a\u0443, \u0438 <code>&lt;think&gt;...&lt;\/think&gt;<\/code> \u0442\u0435\u0433\u0438 \u043b\u0438\u0431\u043e \u043d\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432\u043e\u0432\u0441\u0435, \u043b\u0438\u0431\u043e \u043e\u0442\u0440\u0435\u0437\u0430\u044e\u0442\u0441\u044f \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u043c \u043f\u0435\u0440\u0435\u0434 \u043e\u0442\u0434\u0430\u0447\u0435\u0439 \u0432 <code>content<\/code>.<\/p>\n<p>Defense in depth: \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0431\u044d\u043a\u0435\u043d\u0434\u0430 \u044f \u0435\u0449\u0451 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u044e \u043e\u0442\u0432\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 regex, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0433\u0440\u044b\u0437\u0430\u0435\u0442 <code>&lt;think&gt;...&lt;\/think&gt;<\/code>. \u0415\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043f\u0440\u043e\u0442\u0435\u043a\u043b\u043e \u2014 TTS \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442. \u042d\u0442\u043e \u043f\u0430\u0440\u0430\u043d\u043e\u0439\u044f, \u043d\u043e \u0446\u0435\u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432\u044b\u0448\u0435 \u0446\u0435\u043d\u044b \u0442\u0440\u0451\u0445 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430.<\/p>\n<h3>Reverse SSH \u0432\u043c\u0435\u0441\u0442\u043e Cloudflare Tunnel<\/h3>\n<p>\u0412 2026 \u0433\u043e\u0434\u0443, \u0435\u0441\u043b\u0438 \u0442\u044b \u0445\u043e\u0447\u0435\u0448\u044c \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u043e\u043c\u0430\u0448\u043d\u0438\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u043d\u0430\u0440\u0443\u0436\u0443 \u0447\u0435\u0440\u0435\u0437 VPS, \u0442\u0435\u0431\u0435 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0443\u0433\u043b\u0443 \u0441\u043e\u0432\u0435\u0442\u0443\u044e\u0442 Cloudflare Tunnel \u0438\u043b\u0438 Tailscale Funnel. \u042f \u0432\u044b\u0431\u0440\u0430\u043b reverse SSH, \u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u043e\u0431\u044a\u044f\u0441\u043d\u044e \u043f\u043e\u0447\u0435\u043c\u0443.<\/p>\n<p><strong>Cloudflare Tunnel.<\/strong> \u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041d\u043e: \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u0442\u0430\u0440\u0438\u0444 \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u0442 streaming-\u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443, \u0430 \u0443 \u043c\u0435\u043d\u044f \u043f\u043e \u0442\u0443\u043d\u043d\u0435\u043b\u044e \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u0435\u0442\u0441\u044f \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0439 WebSocket. \u041f\u043b\u044e\u0441 Cloudflare \u0434\u0435\u043a\u0440\u0438\u043f\u0442\u0438\u0442 HTTPS \u043d\u0430 edge \u2014 \u0442\u043e \u0435\u0441\u0442\u044c \u0432 plaintext \u0432\u0438\u0434\u0438\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441:<\/p>\n<blockquote>\n<p>\u00abWhen you use Cloudflare Tunnel, Cloudflare decrypts your HTTPS traffic at their edge servers, inspects it, and then re-encrypts it before forwarding to your origin. This means Cloudflare can see the plaintext content of every request and response passing through your tunnel.\u00bb<\/p>\n<\/blockquote>\n<p>\u0414\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u0414\u043b\u044f \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0441 initData-\u0442\u043e\u043a\u0435\u043d\u0430\u043c\u0438 Telegram \u2014 \u043c\u043d\u0435 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f.<\/p>\n<p><strong>Tailscale Funnel.<\/strong> \u041f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 Tailscale-\u0440\u0435\u043b\u0435\u044f. \u0425\u043e\u0440\u043e\u0448\u043e \u0434\u043b\u044f \u043d\u0435-\u043a\u0440\u0438\u0442\u0438\u0447\u043d\u044b\u0445 \u0432\u0435\u0449\u0435\u0439, \u043d\u043e \u044d\u0442\u043e \u0435\u0449\u0451 \u043e\u0434\u043d\u0430 \u0442\u0440\u0435\u0442\u044c\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u0432 \u043f\u0443\u0442\u0438 \u043e\u0442 Telegram \u043a \u043c\u043e\u0435\u0439 V100.<\/p>\n<p><strong>Reverse SSH \u0447\u0435\u0440\u0435\u0437 autossh + systemd.<\/strong> \u0421\u0442\u0430\u0440\u043e, \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043e, \u043f\u043e\u043d\u044f\u0442\u043d\u043e. V100 \u0441\u0430\u043c\u0430 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u0438\u0442\u0441\u044f \u043d\u0430\u0440\u0443\u0436\u0443 \u043a VPS \u043f\u043e\u0434 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c <code>tunnel<\/code>, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435\u0442 shell (<code>command=\"\/bin\/false\"<\/code>), \u043d\u0435\u0442 TTY, \u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0440\u0430\u0437\u0440\u0435\u0448\u0451\u043d \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u0438\u043d port-forward (<code>permitopen=\"localhost:23333\"<\/code>). \u0415\u0441\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u0443\u043a\u0440\u0430\u0434\u0451\u0442 \u043a\u043b\u044e\u0447 \u2014 \u043e\u043d \u0441\u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0440\u043e\u0432\u043d\u043e \u044d\u0442\u043e\u0442 \u043e\u0434\u0438\u043d \u043f\u043e\u0440\u0442 \u043d\u0430 VPS, \u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u0447\u0435\u0433\u043e.<\/p>\n<p>VPS-side <code>\/home\/tunnel\/.ssh\/authorized_keys<\/code>:<\/p>\n<pre><code>command=\"\/bin\/false\",no-agent-forwarding,no-X11-forwarding,no-pty,permitopen=\"localhost:23333\" \\  ssh-ed25519 AAAA...KEY... v100-to-vps-tunnel<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412 <code>\/etc\/ssh\/sshd_config<\/code>:<\/p>\n<pre><code>AllowTcpForwarding yesClientAliveInterval 30ClientAliveCountMax 3<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>V100-side <code>\/etc\/systemd\/system\/vllm-tunnel.service<\/code>:<\/p>\n<pre><code>[Unit]Description=Reverse SSH tunnel V100 -&gt; VPS (vLLM :23333)After=network-online.targetWants=network-online.target[Service]Type=simpleUser=userEnvironment=\"AUTOSSH_GATETIME=0\"Environment=\"AUTOSSH_PORT=0\"ExecStart=\/usr\/bin\/autossh -M 0 -N -T \\  -o \"ServerAliveInterval=30\" \\  -o \"ServerAliveCountMax=3\" \\  -o \"ExitOnForwardFailure=yes\" \\  -o \"StrictHostKeyChecking=accept-new\" \\  -o \"TCPKeepAlive=yes\" \\  -i \/home\/user\/.ssh\/vps_tunnel \\  -R 23333:localhost:23333 \\  tunnel@&lt;vps-ip&gt;Restart=alwaysRestartSec=10[Install]WantedBy=multi-user.target<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0427\u0442\u043e \u0442\u0443\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442:<\/p>\n<ul>\n<li>\n<p><code>autossh -M 0<\/code> \u2014 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 monitor port autossh, \u043f\u043e\u043b\u0430\u0433\u0430\u0435\u043c\u0441\u044f \u043d\u0430 \u0440\u043e\u0434\u043d\u043e\u0439 <code>ServerAliveInterval<\/code> openssh. \u041d\u0430 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 ssh \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430\u0434\u0451\u0436\u043d\u0435\u0435.<\/p>\n<\/li>\n<li>\n<p><code>AUTOSSH_GATETIME=0<\/code> \u2014 \u043a\u043e\u043d\u043d\u0435\u043a\u0442 \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435, \u043d\u0435 \u0436\u0434\u0451\u043c \u00ab\u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e\u00bb \u043f\u0435\u0440\u0438\u043e\u0434\u0430.<\/p>\n<\/li>\n<li>\n<p><code>ServerAliveInterval=30, ServerAliveCountMax=3<\/code> \u2014 \u0435\u0441\u043b\u0438 \u0442\u0440\u0438 heartbeat-\u0430 \u043f\u043e\u0434\u0440\u044f\u0434 \u043d\u0435 \u043e\u0442\u0432\u0435\u0442\u0438\u043b\u0438 (90 \u0441\u0435\u043a\u0443\u043d\u0434), \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0443\u043c\u0438\u0440\u0430\u0435\u0442.<\/p>\n<\/li>\n<li>\n<p><code>ExitOnForwardFailure=yes<\/code> \u2014 \u0435\u0441\u043b\u0438 VPS-\u043f\u043e\u0440\u0442 \u0437\u0430\u043d\u044f\u0442 \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c, \u043c\u044b \u0433\u0440\u043e\u043c\u043a\u043e \u043f\u0430\u0434\u0430\u0435\u043c, \u0430 \u043d\u0435 \u0432\u0438\u0441\u0438\u043c \u043c\u043e\u043b\u0447\u0430. systemd \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442.<\/p>\n<\/li>\n<li>\n<p><code>Restart=always, RestartSec=10<\/code> \u2014 \u043f\u043e\u0441\u043b\u0435 \u0441\u043c\u0435\u0440\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0436\u0434\u0451\u043c 10 \u0441\u0435\u043a\u0443\u043d\u0434 \u0438 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u043c\u0441\u044f \u0441\u043d\u043e\u0432\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u0411\u044d\u043a\u0435\u043d\u0434 \u043d\u0430 VPS \u0432\u0438\u0434\u0438\u0442 vLLM \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u0430\u043a <a href=\"http:\/\/localhost:23333\/v1\" rel=\"noopener noreferrer nofollow\"><code>http:\/\/localhost:23333\/v1<\/code><\/a>. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0431\u044d\u043a\u0435\u043d\u0434 \u0436\u0438\u0432\u0451\u0442 \u0432 Docker, \u0432 <code>docker-compose.yml<\/code> \u0435\u043c\u0443 \u043d\u0443\u0436\u0435\u043d <code>extra_hosts<\/code> \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0445\u043e\u0441\u0442\u0430:<\/p>\n<pre><code class=\"yaml\">backend:  build: .\/backend  extra_hosts:    - \"host.docker.internal:host-gateway\"  # ...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0418 \u0432 <code>.env<\/code>:<\/p>\n<pre><code>LLM_PROVIDER=vllmVLLM_BASE_URL=http:\/\/host.docker.internal:23333\/v1VLLM_MODEL_NAME=QuantTrio\/Qwen3.5-35B-A3B-AWQ<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0438\u043a\u0430\u043a\u0438\u0445 TLS-\u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 V100 \u0438 VPS \u2014 \u0432\u0441\u0451 \u0432\u043d\u0443\u0442\u0440\u0438 SSH-\u0442\u0443\u043d\u043d\u0435\u043b\u044f \u0438 \u0442\u0430\u043a \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043e. \u041d\u0438\u043a\u0430\u043a\u0438\u0445 DNS-\u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0434\u043b\u044f V100 \u2014 \u0443 \u043d\u0435\u0451 \u043d\u0435\u0442 \u043d\u0438 \u043e\u0434\u043d\u043e\u0439 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0432\u0445\u043e\u0434\u0430.<\/p>\n<p>\u0427\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0430: \u044d\u0442\u043e single point of failure. \u0415\u0441\u043b\u0438 V100 \u0443\u043f\u0430\u043b\u0430, \u0438\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0434\u043e\u043c\u0430 \u043c\u043e\u0440\u0433\u043d\u0443\u043b, \u0438\u043b\u0438 autossh \u043f\u043e\u0434\u0432\u0438\u0441 \u043d\u0430 \u0434\u0435\u0441\u044f\u0442\u044c \u0441\u0435\u043a\u0443\u043d\u0434 \u2014 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 voice-\u0440\u0435\u0436\u0438\u043c \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d. \u0414\u043b\u044f pet-\u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 \u0440\u0430\u043d\u043d\u0435\u0439 \u0441\u0442\u0430\u0434\u0438\u0438 \u044f \u0441\u0447\u0438\u0442\u0430\u044e \u044d\u0442\u043e \u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u044b\u043c; \u043d\u0430 \u043f\u0440\u043e\u0434\u0435 \u044f \u0431\u044b \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0432\u0442\u043e\u0440\u0443\u044e \u0438\u043d\u0441\u0442\u0430\u043d\u0446\u0438\u044e \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0438 \u0431\u0430\u043b\u0430\u043d\u0441\u0435\u0440. \u041d\u043e \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043a\u0430 \u0434\u0430\u043b\u0435\u043a\u043e.<\/p>\n<p>\u041e\u0434\u0438\u043d \u043a\u043e\u043d\u0442\u0440\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043d\u0435 \u043f\u0440\u0438\u0441\u044b\u043b\u0430\u043b\u0438: \u00abautossh \u0440\u0435\u0434\u0443\u043d\u0434\u0430\u043d\u0442\u0435\u043d, \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 openssh \u0441\u0430\u043c \u0443\u043c\u0435\u0435\u0442 heartbeat\u00bb. \u042d\u0442\u043e \u043f\u0440\u0430\u0432\u0434\u0430 \u2014 \u0435\u0441\u043b\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c <code>ServerAliveInterval<\/code>, openssh \u0443\u043f\u0430\u0434\u0451\u0442 \u0441\u0430\u043c, \u0438 systemd \u0435\u0433\u043e \u043f\u043e\u0434\u043d\u0438\u043c\u0435\u0442. autossh \u0434\u0430\u0451\u0442 \u0431\u043e\u043b\u0435\u0435 \u044f\u0432\u043d\u044b\u0439 exit code \u0438 \u043f\u0430\u0440\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u043f\u0446\u0438\u0439 \u0434\u043b\u044f retry \u2014 \u043c\u043d\u0435 \u0441 \u043d\u0438\u043c \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u0435\u0435, \u043d\u043e systemd-only \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0442\u043e\u0436\u0435 \u0432\u0430\u043b\u0438\u0434\u0435\u043d.<\/p>\n<h3>\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 voice-\u0440\u0435\u0436\u0438\u043c: faster-whisper + Kokoro-82M<\/h3>\n<p><strong>STT \u2014 faster-whisper.<\/strong> \u042d\u0442\u043e \u043e\u0431\u0451\u0440\u0442\u043a\u0430 \u043d\u0430\u0434 CTranslate2 \u043d\u0430\u0434 OpenAI Whisper. \u041f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 whisper.cpp (winner \u043d\u0430 CPU\/edge) faster-whisper \u043d\u0430 GPU \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0438 \u043f\u0440\u043e\u0449\u0435 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 Python-\u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f INT8 \u043a\u0432\u0430\u043d\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043b\u044f economy \u0438\u043b\u0438 FP16 \u0434\u043b\u044f \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u2014 \u044f \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u0441\u0442\u0430\u0432\u0438\u043b FP16.<\/p>\n<p><strong>TTS \u2014 Kokoro-82M.<\/strong> \u042d\u0442\u043e \u0441\u0435\u0439\u0447\u0430\u0441, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u043b\u0443\u0447\u0448\u0438\u0439 open-weight TTS \u0434\u043e \u043c\u0438\u043b\u043b\u0438\u0430\u0440\u0434\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432. \u041d\u0430 19 \u043c\u0430\u044f 2026 \u043d\u0430 Artificial Analysis TTS Leaderboard Kokoro v1.0 \u0438\u043c\u0435\u0435\u0442 ELO 1056 \u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 5-\u0435 \u043c\u0435\u0441\u0442\u043e \u0441\u0440\u0435\u0434\u0438 open-weight \u043c\u043e\u0434\u0435\u043b\u0435\u0439 (\u0442\u043e\u043f-1 \u2014 Fish Audio S2 Pro \u0441 ELO 1128). 82M \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u044f Apache 2.0, \u043e\u0431\u0443\u0447\u0435\u043d\u0430 \u043d\u0430 ~100 \u0447\u0430\u0441\u0430\u0445 \u0440\u0430\u0437\u0440\u0435\u0448\u0451\u043d\u043d\u043e\u0433\u043e \u0430\u0443\u0434\u0438\u043e \u2014 \u0434\u043b\u044f \u043c\u043e\u0434\u0435\u043b\u0438 \u0442\u0430\u043a\u043e\u0433\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u044d\u0442\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435.<\/p>\n<p>\u041b\u0430\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c: \u043f\u043e \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u0437\u0430\u043c\u0435\u0440\u0430\u043c \u0430\u0432\u0442\u043e\u0440\u043e\u0432 CodeSOTA \u043d\u0430 NVIDIA A100 \u2014 RTF 0.03 (10 \u0441\u0435\u043a\u0443\u043d\u0434 \u0430\u0443\u0434\u0438\u043e \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0437\u0430 0,3 \u0441\u0435\u043a\u0443\u043d\u0434\u044b). \u041d\u0430 V100 \u044f \u043e\u0436\u0438\u0434\u0430\u044e \u0432 \u0440\u0430\u0439\u043e\u043d\u0435 RTF 0.05\u20130.10, \u043d\u043e \u043f\u0440\u044f\u043c\u044b\u0445 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u043e\u0432 \u0434\u043b\u044f Kokoro \u043d\u0430 V100 \u043d\u0435\u0442 \u2014 \u044d\u0442\u043e extrapolated \u0446\u0438\u0444\u0440\u0430, \u043d\u0435 \u0432\u0435\u0440\u044c\u0442\u0435 \u043d\u0430 \u0441\u043b\u043e\u0432\u043e, \u044f \u0431\u0443\u0434\u0443 \u043c\u0435\u0440\u0438\u0442\u044c \u0438 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u0443\u044e.<\/p>\n<p>\u0413\u043e\u043b\u043e\u0441 \u2014 <code>af_heart<\/code>, sample rate 24 kHz, \u043c\u043e\u043d\u043e, PCM s16le. \u041c\u0435\u0436\u0434\u0443 \u043c\u043e\u0438\u043c \u0431\u044d\u043a\u0435\u043d\u0434\u043e\u043c \u0438 Kokoro-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u2014 WebSocket \u0441 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u043c \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u043c:<\/p>\n<pre><code>client \u2192 server:  {\"type\": \"config\", \"voice\": \"af_heart\", \"speed\": 1.0, \"lang\": \"a\"}server \u2192 client:  {\"type\": \"ready\"}client \u2192 server:  {\"type\": \"text\", \"text\": \"How was your weekend?\"}server \u2192 client:  {\"type\": \"audio\", \"data\": \"&lt;base64 PCM chunk&gt;\"}   # 40 ms \u043a\u0430\u0436\u0434\u044b\u0439server \u2192 client:  {\"type\": \"audio\", \"data\": \"...\"}...server \u2192 client:  {\"type\": \"done\"}client \u2192 server:  {\"type\": \"close\"}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0427\u0430\u043d\u043a\u0438 \u043f\u043e 40 \u043c\u0441 (960 \u0441\u0435\u043c\u043f\u043b\u043e\u0432 \u043f\u0440\u0438 24 kHz) \u2014 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441 \u043c\u0435\u0436\u0434\u0443 frequency message-passing \u0438 \u043f\u043b\u0430\u0432\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435. \u0421\u0430\u043c Kokoro \u043d\u0435 \u0441\u0442\u0440\u0438\u043c\u0438\u0442 (\u044d\u0442\u043e offline-\u043c\u043e\u0434\u0435\u043b\u044c), \u043d\u043e \u044f \u0440\u0435\u0436\u0443 \u0435\u0451 \u0432\u044b\u0432\u043e\u0434 \u043d\u0430 \u0447\u0430\u043d\u043a\u0438 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u2014 \u044d\u0442\u043e \u0434\u0430\u0451\u0442 \u0444\u0440\u043e\u043d\u0442\u0443 \u0447\u0442\u043e-\u0442\u043e \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u043a\u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f.<\/p>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u2014 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 FastAPI + KPipeline + \u043e\u0434\u0438\u043d <code>asyncio.Lock<\/code> \u043d\u0430 \u0434\u043e\u0441\u0442\u0443\u043f \u043a pipeline. \u041b\u043e\u043a \u043d\u0443\u0436\u0435\u043d \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e KPipeline \u043d\u0435 thread-safe; \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u043e\u0434\u043d\u0443 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u2014 \u044d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u0441\u0438\u043d\u0442\u0435\u0437 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435 realtime \u0434\u0430\u0436\u0435 \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u0435.<\/p>\n<h3>Telegram initData \u0438 WebSocket-\u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f<\/h3>\n<p>\u041a\u0430\u0436\u0434\u043e\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 Mini App \u043a <code>\/ws\/voice<\/code> \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u044c Telegram initData. \u0421\u0445\u0435\u043c\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f (<a href=\"https:\/\/core.telegram.org\/bots\/webapps\" rel=\"noopener noreferrer nofollow\">https:\/\/core.telegram.org\/bots\/webapps<\/a>), \u043d\u043e \u0432 \u043d\u0435\u0451 \u043c\u043d\u043e\u0433\u0438\u0435 \u043d\u0435 \u0432\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u043e\u0434\u043d\u0443 \u0432\u0430\u0436\u043d\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443.<\/p>\n<p>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c:<\/p>\n<ol>\n<li>\n<p><code>data_check_string<\/code> = \u0432\u0441\u0435 \u043a\u043b\u044e\u0447\u0438 initData \u043a\u0440\u043e\u043c\u0435 <code>hash<\/code>, \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u043a\u043b\u044e\u0447\u0443, \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 <code>key=value<\/code>, \u0441\u043a\u043b\u0435\u0435\u043d\u043d\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 <code>\\n<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>secret_key<\/code> = <code>HMAC_SHA256(bot_token, \"WebAppData\")<\/code> (\u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u0430\u0436\u0435\u043d: bot_token \u2014 \u044d\u0442\u043e data, &#171;WebAppData&#187; \u2014 \u044d\u0442\u043e key).<\/p>\n<\/li>\n<li>\n<p><code>computed_hash<\/code> = <code>HMAC_SHA256(data_check_string, secret_key).hex()<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c <code>computed_hash<\/code> \u0441 <code>hash<\/code> \u0438\u0437 initData. \u041d\u0435 \u0441\u043e\u0432\u043f\u0430\u043b\u043e \u2014 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043d\u043d\u0435\u043a\u0442 \u0441 \u043a\u043e\u0434\u043e\u043c 4001.<\/p>\n<\/li>\n<\/ol>\n<p>\u0418, \u0447\u0442\u043e \u0437\u0430\u0431\u044b\u0432\u0430\u044e\u0442:<\/p>\n<ol start=\"5\">\n<li>\n<p><strong>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c <\/strong><code><strong>auth_date<\/strong><\/code><strong> \u2014 \u043d\u0435 \u0441\u0442\u0430\u0440\u0448\u0435 5 \u043c\u0438\u043d\u0443\u0442.<\/strong> \u0411\u0435\u0437 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u0442\u044c initData \u0438 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0447\u043d\u043e.<\/p>\n<\/li>\n<\/ol>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432 FastAPI Depends, \u043e\u043a\u043e\u043b\u043e 20 \u0441\u0442\u0440\u043e\u043a:<\/p>\n<pre><code class=\"python\">import hashlibimport hmacimport timefrom urllib.parse import parse_qslBOT_TOKEN = settings.BOT_TOKEN.encode(\"utf-8\")SECRET_KEY = hmac.new(b\"WebAppData\", BOT_TOKEN, hashlib.sha256).digest()INIT_DATA_TTL_SEC = 300def validate_init_data(init_data: str) -&gt; dict | None:    \"\"\"\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0435\u043d\u043d\u044b\u0439 initData \u0438\u043b\u0438 None \u0435\u0441\u043b\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u044c\/\u0432\u0440\u0435\u043c\u044f \u043d\u0435 \u0441\u043e\u0448\u043b\u0438\u0441\u044c.\"\"\"    parsed = dict(parse_qsl(init_data, strict_parsing=True))    received_hash = parsed.pop(\"hash\", None)    if not received_hash:        return None    # \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438    auth_date = int(parsed.get(\"auth_date\", 0))    if abs(time.time() - auth_date) &gt; INIT_DATA_TTL_SEC:        return None    # \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u0438    data_check_string = \"\\n\".join(        f\"{k}={v}\" for k, v in sorted(parsed.items())    )    computed = hmac.new(        SECRET_KEY, data_check_string.encode(\"utf-8\"), hashlib.sha256    ).hexdigest()    if not hmac.compare_digest(computed, received_hash):        return None    return parsed<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0418 \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435:<\/p>\n<pre><code class=\"python\">@app.websocket(\"\/ws\/voice\")async def voice_ws(websocket: WebSocket):    init_data = websocket.query_params.get(\"init_data\", \"\")    parsed = validate_init_data(init_data)    if parsed is None and settings.ENVIRONMENT == \"production\":        await websocket.close(code=4001)        return    await websocket.accept()    # ... \u0434\u0430\u043b\u044c\u0448\u0435 run_gemini_session \u0438\u043b\u0438 run_local_session<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412 <code>development<\/code>-\u0440\u0435\u0436\u0438\u043c\u0435 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u2014 \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f wscat\/websocat-\u0442\u0435\u0441\u0442\u043e\u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e. \u0412 <code>production<\/code> \u2014 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0430\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0440\u043e\u0447\u0435\u043d\u043d\u044b\u0439 <code>auth_date<\/code> = 4001.<\/p>\n<h3>\u0427\u0442\u043e \u044f \u0437\u043d\u0430\u044e, \u0447\u0442\u043e \u043d\u0435\u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e<\/h3>\n<p>\u0421\u043f\u0438\u0441\u043e\u043a \u0444\u0435\u0439\u043b\u043e\u0432 \u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u043c\u0438\u043d, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u044f\u0442\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u0440\u0438\u0442\u0438\u043a\u0443 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445:<\/p>\n<ul>\n<li>\n<p><strong>Reverse SSH = single point of failure.<\/strong> \u0423\u043f\u0430\u043b\u0430 V100 \u2014 \u0443\u043f\u0430\u043b \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 voice-\u0440\u0435\u0436\u0438\u043c.<\/p>\n<\/li>\n<li>\n<p><strong>vLLM \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0435.<\/strong> \u041d\u0435\u0442 \u0440\u0435\u043f\u043b\u0438\u043a, \u043d\u0435\u0442 \u0431\u0430\u043b\u0430\u043d\u0441\u0435\u0440\u0430. \u041f\u0440\u0438 concurrency &gt;5 \u043d\u0430 AWQ-\u0441\u0431\u043e\u0440\u043a\u0435 throughput \u0440\u0435\u0437\u043a\u043e \u043f\u0430\u0434\u0430\u0435\u0442 (\u0441\u043c. \u0433\u0440\u0430\u0431\u043b\u044e \u21163).<\/p>\n<\/li>\n<li>\n<p><strong>MySQL 8 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0435.<\/strong> \u041d\u0435\u0442 master-replica, \u043d\u0435\u0442 PITR-\u0431\u044d\u043a\u0430\u043f\u043e\u0432, \u0442\u043e\u043b\u044c\u043a\u043e nightly dumps.<\/p>\n<\/li>\n<li>\n<p><strong>\u041d\u0435\u0442 E2E voice-\u0442\u0435\u0441\u0442\u043e\u0432.<\/strong> \u0422\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e: STT, LLM, TTS, WS. \u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0443\u043a\u0430\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>Kokoro RTF \u043d\u0430 V100 \u2014 \u043e\u0446\u0435\u043d\u043e\u0447\u043d\u044b\u0439<\/strong>, \u043f\u0440\u044f\u043c\u044b\u0445 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445 \u0437\u0430\u043c\u0435\u0440\u043e\u0432 \u043d\u0435\u0442, \u044f \u0431\u0443\u0434\u0443 \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>\u041d\u0435\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 throughput-\u043c\u0435\u0442\u0440\u0438\u043a Qwen3.5-35B-A3B-AWQ \u043d\u0430 2\u00d7V100<\/strong>, \u043f\u043e\u043a\u0430. \u041c\u043e\u0434\u0435\u043b\u044c \u0441\u0432\u0435\u0436\u0430\u044f, \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0435\u0442 \u2014 \u043c\u0435\u0440\u0438\u0442\u044c \u043d\u0435\u0447\u0435\u0433\u043e; \u043e\u0436\u0438\u0434\u0430\u044e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0437\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0434\u0435\u043b\u044c \u0431\u043e\u0435\u0432\u043e\u0439 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0438 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e.<\/p>\n<\/li>\n<\/ul>\n<h3>\u0427\u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435<\/h3>\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 \u044f \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u00ab\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0434\u0430\u043b\u044c\u0448\u0435 \u043a\u043e\u043f\u0438\u043c \u0436\u0438\u0432\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0438 \u043c\u0435\u0442\u0440\u0438\u043a\u0438\u00bb.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u043e\u0442\u0440\u043e\u0433\u0430\u0442\u044c \u0440\u0443\u043a\u0430\u043c\u0438 \u2014 \u0431\u043e\u0442: <a class=\"mention\" href=\"\/users\/kmo_ai_english_bot\">@kmo_ai_english_bot<\/a><\/p>\n<p>\u0411\u0443\u0434\u0443 \u0440\u0430\u0434 \u0436\u0451\u0441\u0442\u043a\u0438\u043c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u043e \u0433\u0440\u0430\u0431\u043b\u044f\u043c.<\/p>\n<p><strong>\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0441\u0441\u044b\u043b\u0430\u043b\u0441\u044f \u043f\u043e \u0445\u043e\u0434\u0443 \u0441\u0442\u0430\u0442\u044c\u0438:<\/strong><\/p>\n<ul>\n<li>\n<p><code>QuantTrio\/Qwen3.5-35B-A3B-AWQ<\/code> model card \u2014 huggingface.co\/QuantTrio\/Qwen3.5-35B-A3B-AWQ<\/p>\n<\/li>\n<li>\n<p>E2E Networks LLM Inference Benchmark \u2014 e2enetworks.com (vLLM, TGI, TensorRT-LLM \u043d\u0430 A30 vs V100)<\/p>\n<\/li>\n<li>\n<p>vLLM Recipes \u2014 Qwen3.5 &amp; Qwen3.6 Usage Guide \u2014 <a href=\"http:\/\/docs.vllm.ai\" rel=\"noopener noreferrer nofollow\">docs.vllm.ai<\/a><\/p>\n<\/li>\n<li>\n<p>vLLM issues #20469 (AWQ concurrency drop), #35574 (enable_thinking \u0438\u0433\u043d\u043e\u0440\u0438\u0442\u0441\u044f), #6173 (FlashAttention on Volta)<\/p>\n<\/li>\n<li>\n<p><a href=\"http:\/\/0110.be\" rel=\"noopener noreferrer nofollow\">0110.be<\/a> \u2014 Resampling audio via a Web Audio API Audio Worklet<\/p>\n<\/li>\n<li>\n<p>DeepWiki \/ marcinmatys\/whisper_streaming \u2014 audio processing chapter<\/p>\n<\/li>\n<li>\n<p>Artificial Analysis TTS Leaderboard \u2014 artificialanalysis.ai\/text-to-speech\/leaderboard<\/p>\n<\/li>\n<li>\n<p>Telegram Mini Apps initData spec \u2014 core.telegram.org\/bots\/webapps<\/p>\n<\/li>\n<li>\n<p>vLLM Triton Attention Backend Deep Dive \u2014 vllm.ai\/blog\/2026-03-04<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1042166\/\">https:\/\/habr.com\/ru\/articles\/1042166\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0423 \u043c\u0435\u043d\u044f \u0432 \u0443\u0433\u043b\u0443 \u043a\u043e\u043c\u043d\u0430\u0442\u044b \u0441\u0442\u043e\u0438\u0442 \u0441\u0435\u0440\u0432\u0435\u0440 \u0441 \u0434\u0432\u0443\u043c\u044f Tesla V100 32GB. \u041e\u043d\u0438 \u0434\u043ec\u0442\u0430\u043b\u0438\u0441\u044c \u043c\u043d\u0435 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0442\u0432\u0430\u043b\u0438\u043b\u0430\u0441\u044c, \u0438 \u043f\u043e\u043b\u0433\u043e\u0434\u0430 \u0441\u0442\u043e\u044f\u043b\u0438 \u043c\u0451\u0440\u0442\u0432\u044b\u043c \u0433\u0440\u0443\u0437\u043e\u043c. \u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0440\u0430\u0437 \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u043c \u2014 Simpler, Doalingo, \u0435\u0449\u0451 \u043f\u0430\u0440\u0430 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432. \u0425\u043e\u0440\u043e\u0448\u0438\u0435, \u043d\u043e \u043c\u043d\u0435 \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u043b \u0444\u043e\u0440\u043c\u0430\u0442: \u044f \u0445\u043e\u0442\u0435\u043b \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u00ab\u043e\u0442\u043a\u0440\u044b\u043b \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u0434\u043e\u043c\u0430 \u043d\u0430 \u0441\u0435\u043c\u044c \u043c\u0438\u043d\u0443\u0442, \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043b, \u0437\u0430\u043a\u0440\u044b\u043b\u00bb. \u0411\u0435\u0437 \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044f, \u0431\u0435\u0437 \u043a\u0430\u043c\u0435\u0440\u044b, \u0431\u0435\u0437 \u043f\u043e\u0438\u0441\u043a\u0430 \u0442\u044c\u044e\u0442\u043e\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442 \u043c\u043e\u0439 \u0430\u043a\u0446\u0435\u043d\u0442 \u0441 \u043f\u044f\u0442\u043e\u0433\u043e \u0440\u0430\u0437\u0430.\u0421\u043e\u0448\u043b\u043e\u0441\u044c.\u0418\u0434\u0435\u044f: Telegram Mini App, \u0432 \u043d\u0451\u043c \u043a\u043d\u043e\u043f\u043a\u0430 \u00ab\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c\u00bb, \u0437\u0430 \u043d\u0435\u0439 \u2014 AI-\u0440\u0435\u043f\u0435\u0442\u0438\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043b\u044b\u0448\u0438\u0442, \u0447\u0442\u043e \u044f \u0441\u043a\u0430\u0437\u0430\u043b, \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0433\u043e\u043b\u043e\u0441\u043e\u043c, \u043f\u043e\u043c\u043d\u0438\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0430, \u0442\u044b\u043a\u0430\u0435\u0442 \u0432 \u043c\u043e\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 \u043f\u043e\u0434\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u043b\u043e\u0432\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u043f\u044b\u0442\u0430\u044e\u0441\u044c \u0432\u044b\u0443\u0447\u0438\u0442\u044c. \u041f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e.\u041c\u043e\u0434\u0435\u043b\u044c Qwen3.5 \u0432\u044b\u0448\u043b\u0430 25 \u0444\u0435\u0432\u0440\u0430\u043b\u044f , \u044f \u0435\u0451 \u0433\u043e\u043d\u044f\u044e \u0432\u0441\u0435\u0433\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0434\u0435\u043b\u044c, \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0441\u044b\u0440\u043e\u0439. \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u2014 \u043f\u0440\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u043e \u0442\u043e, \u043d\u0430 \u043a\u0430\u043a\u0438\u0435 \u0433\u0440\u0430\u0431\u043b\u0438 \u044f \u0443\u0436\u0435 \u0443\u0441\u043f\u0435\u043b \u043d\u0430\u0441\u0442\u0443\u043f\u0438\u0442\u044c.TL;DR\u0427\u0442\u043e: Telegram Mini App \u0434\u043b\u044f \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u043d\u043e\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u0433\u043e. \u0414\u0432\u0430 \u0440\u0435\u0436\u0438\u043c\u0430 \u0433\u043e\u043b\u043e\u0441\u0430.Local-\u0440\u0435\u0436\u0438\u043c: vLLM \u0441 QuantTrio\/Qwen3.5-35B-A3B-AWQ (35B total \/ 3B active, MoE, 25 GiB AWQ INT4) \u043d\u0430 2\u00d7 Tesla V100 32GB + faster-whisper + Kokoro-82M, \u0432\u0441\u0451 \u043d\u0430 \u0442\u0435\u0445 \u0436\u0435 \u043a\u0430\u0440\u0442\u0430\u0445.\u0421\u0435\u0442\u0435\u0432\u043e\u0439 \u0441\u0442\u044b\u043a: \u0434\u043e\u043c\u0430\u0448\u043d\u0438\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u2194 VPS \u0447\u0435\u0440\u0435\u0437 reverse SSH (autossh + systemd, restricted user \u0441 permitopen=localhost:23333). \u041d\u0438\u043a\u0430\u043a\u043e\u0433\u043e Cloudflare Tunnel, \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e Tailscale.\u0413\u043b\u0430\u0432\u043d\u044b\u0435 \u043c\u0438\u043d\u044b: FlashAttention 2 \u043d\u0430 Volta \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 (\u043d\u0443\u0436\u0435\u043d XFORMERS backend); bf16 \u043d\u0430 Volta \u0442\u043e\u0436\u0435 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 (\u043d\u0443\u0436\u0435\u043d &#8212;dtype float16); QuantTrio AWQ-\u0441\u0431\u043e\u0440\u043a\u0430 Qwen3.5 \u043c\u043e\u043b\u0447\u0430 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 enable_thinking=false \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 (\u043d\u0443\u0436\u043d\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0444\u043b\u0430\u0433\u0438 vLLM); macOS Chrome \u043d\u0435 \u0434\u0430\u0451\u0442 \u0432\u0442\u043e\u0440\u043e\u0439 AudioContext \u043d\u0430 16 kHz \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 \u043d\u0430 24 kHz (\u043d\u0443\u0436\u043d\u043e \u0440\u0443\u0447\u043d\u043e\u0439 downsampling \u0432 AudioWorklet)\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043e\u0434\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u043e\u0439\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510                \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u2502 \u0414\u043e\u043c (V100 server)            \u2502                \u2502 VPS (public IP)                    \u2502\u2502                              \u2502                \u2502                                    \u2502\u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u2502  reverse SSH   \u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u2502\u2502  \u2502 vLLM :23333            \u2502\u25c0\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u25b6\u2502 FastAPI backend              \u2502  \u2502\u2502  \u2502 Qwen3.5-35B-A3B-AWQ    \u2502  \u2502  autossh +     \u2502  \u2502  \/api\/* + \/ws\/voice          \u2502  \u2502\u2502  \u2502 tensor-parallel = 4    \u2502  \u2502  systemd       \u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2502\u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2502                \u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u2502\u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u2502                \u2502  \u2502 aiogram 3 bot (long poll)    \u2502  \u2502\u2502  \u2502 faster-whisper :23334  \u2502\u25c0\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2502\u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2502                \u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u2502\u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u2502                \u2502  \u2502 Mini App (React+Vite SPA)    \u2502  \u2502\u2502  \u2502 Kokoro TTS :23335      \u2502\u25c0\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2502\u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2502                \u2502       \u25b2                            \u2502\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518                \u2502       \u2502  Nginx + Let&#8217;s Encrypt     \u2502                                                \u2502       \u2502                            \u2502                                                \u2502  \u250c\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u2502                                                \u2502  \u2502  MySQL 8  +  Redis 7         \u2502  \u2502                                                \u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2502                                                \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518                                                        \u2502  HTTPS \/ WSS                                                        \u25bc                                                \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510                                                \u2502   Telegram    \u2502                                                \u2502   client      \u2502                                                \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\u0422\u0440\u0438 \u043f\u043e\u0434\u0434\u043e\u043c\u0435\u043d\u0430 \u0437\u0430 \u043e\u0431\u0449\u0438\u043c Nginx \u043d\u0430 VPS:englishbot.&lt;\u043c\u043e\u0439 \u0434\u043e\u043c\u0435\u043d&gt;      \u2192 Mini App (React SPA \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 \u0441 nginx \u0432\u043d\u0443\u0442\u0440\u0438)api.&lt;\u043c\u043e\u0439 \u0434\u043e\u043c\u0435\u043d&gt;     \u2192 FastAPI backend (\/api\/* + \/ws\/*)admin.&lt;\u043c\u043e\u0439 \u0434\u043e\u043c\u0435\u043d&gt;   \u2192 Admin Panel (React SPA)\u0411\u044d\u043a\u0435\u043d\u0434, \u0431\u043e\u0442, Mini App \u0438 \u0430\u0434\u043c\u0438\u043d\u043a\u0430 \u2014 \u0447\u0435\u0442\u044b\u0440\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0432 \u043e\u0434\u043d\u043e\u043c docker-compose.yml \u043d\u0430 VPS. MySQL \u0438 Redis \u043f\u043e\u043a\u0430 \u0436\u0438\u0432\u0443\u0442 \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u0445\u043e\u0441\u0442\u0435 VPS. LLM, STT \u0438 TTS \u2014 \u043d\u0430 \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0441 GPU. \u041c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u2014 reverse SSH-\u0442\u0443\u043d\u043d\u0435\u043b\u044c.\u041f\u043e\u0447\u0435\u043c\u0443 \u0447\u0435\u0442\u044b\u0440\u0435 V100 \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 Qwen3.5-35B-A3B-AWQV100 \u2014 \u044d\u0442\u043e Volta, compute capability 7.0, \u0440\u0435\u043b\u0438\u0437 2017. \u041f\u043e \u043c\u0435\u0440\u043a\u0430\u043c 2026 \u0433\u043e\u0434\u0430 \u2014 \u043e\u043b\u0434\u0441\u043a\u0443\u043b. \u041d\u0438\u043a\u0430\u043a\u043e\u0433\u043e FlashAttention 2, \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e bf16, \u043d\u0430 ROCm \u0438 Triton-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u0445 \u0438\u0445 \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u044e\u0442 \u043a\u0430\u043a \u043a\u043b\u0430\u0441\u0441.\u0418\u0437 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430 E2E Networks (\u0432\u044b\u0448\u0435\u043b \u0432 \u043c\u0430\u0440\u0442\u0435 2026, sweep \u043f\u043e vLLM\/TGI\/TensorRT-LLM \u043d\u0430 7B\u201370B):\u00abV100 is vLLM-only. TGI, TensorRT-LLM, and Triton&#8217;s latest containers reject Volta GPUs entirely.\u00bb\u042d\u0442\u043e, \u043a\u0441\u0442\u0430\u0442\u0438, \u0438 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441 \u00ab\u043f\u043e\u0447\u0435\u043c\u0443 vLLM, \u0430 \u043d\u0435 TGI\u00bb \u2014 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0432\u044b\u0431\u043e\u0440\u0430 \u0443 \u043c\u0435\u043d\u044f \u0438 \u043d\u0435 \u0431\u044b\u043b\u043e. \u041d\u0430 2\u00d7V100 PCIe \u0432 FP16 \u0430\u0432\u0442\u043e\u0440\u044b \u0442\u043e\u0433\u043e \u0436\u0435 \u043e\u0442\u0447\u0451\u0442\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 400,2 tok\/s \u043d\u0430 Llama-2-7B (p50 latency 2 559 \u043c\u0441, gen_len 256) \u0438 228,8 tok\/s \u043d\u0430 Llama-2-13B (p50 latency 4 475 \u043c\u0441). \u0414\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e-\u0434\u0432\u0443\u0445 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u044b\u0445 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u043e\u0432 \u2014 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c.\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0434\u0435\u043b\u044c. \u042f \u0447\u0435\u0441\u0442\u043d\u043e \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b Llama-3.1-8B \u0438 Qwen2.5-14B; \u043e\u0431\u0435 \u0434\u043b\u044f \u0442\u044c\u044e\u0442\u043e\u0440\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u0433\u043e \u043e\u0449\u0443\u0449\u0430\u043b\u0438\u0441\u044c \u00ab\u0432\u0435\u0436\u043b\u0438\u0432\u044b\u043c\u0438, \u043d\u043e \u043f\u043b\u043e\u0441\u043a\u043e\u0432\u0430\u0442\u044b\u043c\u0438\u00bb. \u041a\u043e\u0433\u0434\u0430 \u0432\u044b\u0448\u0435\u043b Qwen3.5, \u044f \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0448\u0451\u043b \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0432 AWQ \u2014 \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043a\u043b\u0430\u0441\u0442\u044c 70B \u0432 FP16 \u043d\u0430 4\u00d732 GB \u043f\u043e\u0441\u043b\u0435 KV-cache \u0438 \u043e\u0432\u0435\u0440\u0445\u0435\u0434\u0430 vLLM \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442.QuantTrio\/Qwen3.5-35B-A3B-AWQ\u043b\u0451\u0433 \u043a\u0430\u043a \u0440\u043e\u0434\u043d\u043e\u0439. \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u2014 \u044d\u0442\u043e, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u0432 Qwen3.5. \u0414\u043e\u0441\u043b\u043e\u0432\u043d\u043e \u0438\u0437 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u043c\u043e\u0434\u0435\u043b\u0438:\u00abNumber of Parameters: 35B in total and 3B activated. Number of Layers: 40. Hidden Layout: 10 \u00d7 (3 \u00d7 (Gated DeltaNet \u2192 MoE) \u2192 1 \u00d7 (Gated Attention \u2192 MoE)). Mixture Of Experts: Number of Experts: 256. Number of Activated Experts: 8 Routed + 1 Shared. Context Length: 262,144 natively and extensible up to 1,010,000 tokens.\u00bb\u041f\u0435\u0440\u0435\u0432\u043e\u0436\u0443: \u0438\u0437 40 \u0441\u043b\u043e\u0451\u0432 \u0442\u043e\u043b\u044c\u043a\u043e 10 \u2014 \u044d\u0442\u043e \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0435 Gated Attention. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 30 \u2014 Gated DeltaNet, \u043b\u0438\u043d\u0435\u0439\u043d\u0430\u044f attention. KV-cache \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0442\u0435\u0445 \u0441\u0430\u043c\u044b\u0445 \u0434\u0435\u0441\u044f\u0442\u0438, \u0438 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u0447\u043d\u043e \u043f\u043e \u0434\u043b\u0438\u043d\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430. \u0413\u0440\u0443\u0431\u043e: \u043f\u0440\u0438 16 query-\u0433\u043e\u043b\u043e\u0432\u0430\u0445 \u0438 2 KV-\u0433\u043e\u043b\u043e\u0432\u0430\u0445 \u0441 head_dim=256 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u043b\u043e\u0439 full-attention \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u043e\u043a\u043e\u043b\u043e 2 \u00d7 2 \u00d7 256 \u00d7 2 \u0431\u0430\u0439\u0442 = 2 KB \u043d\u0430 \u0442\u043e\u043a\u0435\u043d \u043d\u0430 \u0441\u043b\u043e\u0439, \u0432\u0441\u0435\u0433\u043e ~20 KB\/\u0442\u043e\u043a\u0435\u043d \u043d\u0430 \u0434\u0435\u0441\u044f\u0442\u044c \u0441\u043b\u043e\u0451\u0432. \u041d\u0430 262 144 \u0442\u043e\u043a\u0435\u043d\u0430 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u2014 \u043e\u043a\u043e\u043b\u043e 5,4 GB \u043d\u0430 \u0441\u0435\u0441\u0441\u0438\u044e \u0432 FP16. \u041f\u0440\u0438 tensor-parallel-size=2 \u044d\u0442\u043e ~2,7 GB \u043d\u0430 \u043a\u0430\u0440\u0442\u0443 \u043d\u0430 \u043e\u0434\u043d\u0443 \u0441\u0435\u0441\u0441\u0438\u044e. \u041d\u0430 32 GB V100 \u2014 \u0440\u0435\u0430\u043b\u044c\u043d\u043e.\u0413\u0440\u0430\u0431\u043b\u044f \u21161: FlashAttention \u0438 Volta\u041f\u0435\u0440\u0432\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a vLLM \u043d\u0430 V100 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043b \u043c\u0435\u043d\u044f \u043b\u043e\u0433\u043e\u043c:Cannot use FlashAttention-2 backend for Volta and Turing GPUs.Using XFormers backend.\u042d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e. \u042d\u0442\u043e \u0434\u0430\u0436\u0435 \u043d\u0435 \u0432\u0430\u0440\u043d\u0438\u043d\u0433 \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0444\u0430\u043a\u0442 \u0436\u0438\u0437\u043d\u0438. \u0418\u0437 \u0430\u043f\u0441\u0442\u0440\u0438\u043c\u0430 Dao-AILab\/flash-attention, issue #1760:\u00abI understand that FlashAttention 2+ requires SM80+, which V100s don&#8217;t support.\u00bb\u0418 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, vLLM issue #6173:\u00abRuntimeError: FlashAttention only supports Ampere GPUs or newer.\u00bb\u0420\u0435\u0448\u0435\u043d\u0438\u0435: \u044f\u0432\u043d\u043e \u0441\u0442\u0430\u0432\u0438\u043c \u0431\u044d\u043a\u0435\u043d\u0434 XFORMERS. \u041d\u0435 FLASH_ATTN, \u043d\u0435 FLASHINFER, \u043d\u0435 FLASHMLA. \u041d\u0430 Volta \u0438\u0437 \u0436\u0438\u0432\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u2014 XFORMERS \u0438 TORCH_SDPA. TRITON_ATTN \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u043d\u043e \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u0438\u0434\u0451\u0442 \u043d\u0430 AMD ROCm \u0438 Intel XPU; \u043d\u0430 Volta \u044d\u0442\u043e untested path, \u044f \u0442\u0443\u0434\u0430 \u043d\u0435 \u043f\u043e\u043b\u0435\u0437. \u0418\u0437 \u0431\u043b\u043e\u0433\u0430 vLLM \u043f\u043e Triton-backend (\u043c\u0430\u0440\u0442 2026):\u00abSince the Triton attention backend is always present, it also serves as a fallback backend, if FlashAttention, FlashInfer, or other dependencies are unavailable or fail to import.\u00bb\u0422\u043e \u0435\u0441\u0442\u044c \u043e\u043d fallback, \u043d\u0435 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440. \u041d\u0430 V100 \u2014 XFORMERS.\u0413\u0440\u0430\u0431\u043b\u044f \u21162: bf16 \u043d\u0430 Volta \u0442\u043e\u0436\u0435 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0415\u0441\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c vLLM \u0431\u0435\u0437 \u044f\u0432\u043d\u043e\u0433\u043e &#8212;dtype, \u043d\u0430 V100 \u043f\u043e\u043b\u0443\u0447\u0438\u0448\u044c:Bfloat16 is only supported on GPUs with compute capability of at least 8.0.Your Tesla V100-SXM2-32GB GPU has compute capability 7.0.You can use float16 instead by explicitly setting the dtype flag in CLI,for example: &#8212;dtype=half\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 start.sh \u0441\u0442\u043e\u0438\u0442 &#8212;dtype float16. \u041d\u0438\u043a\u0430\u043a\u0438\u0445 \u0441\u044e\u0440\u043f\u0440\u0438\u0437\u043e\u0432 \u043e\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0431\u043e\u0440\u0430 dtype.\u0413\u0440\u0430\u0431\u043b\u044f \u21163: AWQ + concurrency \u2014 \u0440\u0435\u0437\u043a\u043e\u0435 \u043f\u0430\u0434\u0435\u043d\u0438\u0435 throughput\u042d\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0435 \u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u0435\u043c\u043e\u0435. vLLM issue #20469, \u043f\u043e AWQ-\u0441\u0431\u043e\u0440\u043a\u0435 Qwen3-14B \u043d\u0430 \u043e\u0434\u043d\u043e\u043c A100 80GB:\u00abWe observed a significant drop in output tokens per second when serving Qwen\/Qwen3-14B-AWQ on a single A100 80GB GPU using vLLM v0.9.1 with &#8212;max-model-len 16384. At concurrency=1, the model achieves ~52 output tokens per second. However, this drops sharply to ~12 at concurrency=5 and ~3 at concurrency=25.\u00bb\u041f\u0435\u0440\u0435\u0432\u043e\u0436\u0443: \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0442\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0448\u044c 52 tok\/s, \u043d\u0430 \u043f\u044f\u0442\u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u2014 12, \u043d\u0430 25 \u2014 \u0442\u0440\u0438. \u042d\u0442\u043e AWQ Marlin-\u044f\u0434\u0440\u0430 \u0432\u0435\u0434\u0443\u0442 \u0441\u0435\u0431\u044f \u043f\u043b\u043e\u0445\u043e \u043f\u043e\u0434 concurrency. \u041d\u0430 Volta \u0441 tensor-parallel=4 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0434\u0440\u0443\u0433\u0430\u044f (TP \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442), \u043d\u043e \u0438\u043b\u043b\u044e\u0437\u0438\u0439 \u043f\u0440\u043e \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e.\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0432\u044b\u0432\u043e\u0434 \u0434\u043b\u044f \u0431\u043e\u0442\u0430: \u043d\u0430 free-tier \u0441 10 \u043c\u0438\u043d\u0443\u0442\u0430\u043c\u0438 \u0432 \u0434\u0435\u043d\u044c \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f\u0449\u0438\u0445 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e. \u0415\u0441\u043b\u0438 \u043f\u043e\u0439\u0434\u0451\u0442 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u2014 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043b\u0438\u0431\u043e \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0442\u043e\u0440\u0443\u044e \u0438\u043d\u0441\u0442\u0430\u043d\u0446\u0438\u044e vLLM \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u043a\u0430\u0440\u0442, \u043b\u0438\u0431\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0432 FP16 \u0431\u0435\u0437 \u043a\u0432\u0430\u043d\u0442\u0438\u0437\u0430\u0446\u0438\u0438 (\u043d\u043e \u0442\u043e\u0433\u0434\u0430 35B \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u0432\u043b\u0435\u0437\u0435\u0442). \u042d\u0442\u043e \u0442\u0430 \u0441\u0430\u043c\u0430\u044f \u00ab\u0437\u043d\u0430\u044e, \u0447\u0442\u043e \u043d\u0435\u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u00bb \u0442\u043e\u0447\u043a\u0430.vLLM start.sh \u2014 \u0431\u0435\u0437 \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0439\/home\/user\/1Cat-vLLM\/start_vllm.sh:#!\/usr\/bin\/env bashset -ecd &#171;$(dirname &#171;$0&#187;)&#187;source venv\/bin\/activateexec python -m vllm.entrypoints.openai.api_server \\    &#8212;model QuantTrio\/Qwen3.5-35B-A3B-AWQ \\    &#8212;quantization awq \\    &#8212;dtype float16 \\    &#8212;gpu-memory-utilization 0.90 \\    &#8212;max-model-len 262144 \\    &#8212;tensor-parallel-size 4 \\    &#8212;max-num-seqs 8 \\    &#8212;max-num-batched-tokens 65536 \\    &#8212;attention-backend XFORMERS \\    &#8212;skip-mm-profiling \\    &#8212;limit-mm-per-prompt &#8216;{&#171;image&#187;:0,&#187;video&#187;:0}&#8217; \\    &#8212;compilation-config &#8216;{&#171;cudagraph_mode&#187;:&#187;full_and_piecewise&#187;,&#187;cudagraph_capture_sizes&#187;:[1,2,4,8,16,32]}&#8217; \\    &#8212;disable-custom-all-reduce \\    &#8212;reasoning-parser qwen3 \\    &#8212;default-chat-template-kwargs &#8216;{&#171;enable_thinking&#187;: false}&#8217; \\    &#8212;host 0.0.0.0 \\    &#8212;port 23333\u041f\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u043e:&#8212;quantization awq &#8212;dtype float16 \u2014 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043d\u0430 Volta.&#8212;gpu-memory-utilization 0.90 \u2014 \u0434\u0435\u0441\u044f\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u0431\u0443\u0444\u0435\u0440\u043e\u043c, \u0432\u0441\u0451 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u0434 \u0432\u0435\u0441\u0430 \u0438 KV-cache.&#8212;max-model-len 262144 \u2014 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 Qwen3.5. \u041c\u043e\u0436\u043d\u043e \u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0434\u043e 32 768 \u2014 \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u0430\u044f \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0430 \u043c\u043e\u0434\u0435\u043b\u0438 \u043f\u0440\u044f\u043c\u043e \u044d\u0442\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442 \u0434\u043b\u044f \u0441\u043a\u0440\u043e\u043c\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u0432 (\u00ab&#8212;max-model-len 32768 &#8212;tensor-parallel-size 4 &#8212;enable-expert-parallel\u00bb). \u042f \u0434\u0435\u0440\u0436\u0443 262K, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430 \u0431\u043e\u0442\u0430-\u0440\u0435\u043f\u0435\u0442\u0438\u0442\u043e\u0440\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u0439&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-481904","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/481904","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=481904"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/481904\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=481904"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=481904"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=481904"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}