资讯动态

Qwen3.8-27B本地部署实战:4×RTX 5090D + vLLM接入Claude Code,262K上下文、MTP3与并发优化

发布时间:2026/10/17 9:36:43 来源:尧图企业网站定制
1. 从四张 5090D 说起为什么要在本地跑 Qwen3.8-27B 接入 Claude CodeQwen3.8-27B 是通义千问系列里一个很特别的尺寸27B 参数、原生 262K 上下文、支持 MTP 多 token 预测官方模型卡还给出了 YaRN 扩展到约 1M 的口径。它不像 7B 那样“能跑但不够用”也不像 72B 那样单机四卡都吃力。放在 4 张 RTX 5090D每张 32GBBlackwell SM 12.0上做 4bit 量化 Tensor Parallel4刚好能把权重、KV Cache、激活预算都塞进显存还能留出并发余量。我这次的目标不是“让模型回一句话”而是把它做成 Claude Code 的本地 Agent 后端Claude Code 通过 Anthropic Messages API 发请求vLLM 用 SSE 逐 token 返回工具调用走 qwen3_coder parser长上下文靠 FP8 KV Cache Prefix Caching 撑住并发靠 Continuous Batching 调度。整条链路短到只有三层Claude Code ↓ Anthropic Messages API SSE vLLM (TP4, MTP3, 262K) ↓ 4 × RTX 5090D 32GB真正花时间的不是写接口而是 Blackwell 环境下的 CUDA 工具链对齐、FlashInfer JIT、Torch Inductor 重复注册、KV Cache 容量估算、effort 枚举不兼容、多模态上限这些坑。这篇就按“能复制、能验收、能排错”的顺序把 4×RTX 5090D vLLM 部署 Qwen3.8-27B 并接入 Claude Code 的完整链路写清楚覆盖 262K 上下文开启、MTP3 投机解码与并发参数调优。适合谁看手上有多卡 Blackwell 机器、想跑本地 Coding Agent 的工程师正在评估本地模型替代云端 API 成本的架构师以及被duplicate template name、SM 12.x requires CUDA 12.9、At most 0 image(s)这类报错卡住的部署同学。2. 部署前置TaoToken 与本地 vLLM 的分工以及环境快照在动手之前先把一个概念理清本地 vLLM 负责“算”TaoToken 负责“连”。如果你只是单机自测Claude Code 直接指向127.0.0.1:6006就行但如果你想让 Claude Code 在多个环境、多个模型之间切换或者需要一套统一的 API Key 管理和模型路由那用 TaoToken 做统一入口会省很多事。它的官网是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 入口是 https://taotoken.net/api 不加 UTM。我这次的实测环境快照如下它是一个带日期的具体实例不代表所有机器都必须用同一版本项目本次环境GPU4 × RTX 5090D每张 32GBBlackwell SM 12.0模型Qwen3.8-27B 4bit 本地 checkpoint量化路径compressed-tensors MarlinLinearKernel / WNA16激活/计算 dtypeBF16checkpoint 体积19.57 GiB单卡权重占用约 5.13 GiB / GPUTP4推理框架vLLM 0.27.1PyTorch2.13.0FlashInfer0.6.16.post3Claude Code2.1.234API 端口127.0.0.1:6006Tensor Parallel4上下文原生 262,144 tokensKV CacheFP8由 gpu_memory_utilization0.94 自动定容每卡 KV Cache21.73 GiBKV token 容量2,453,023 tokens262K 理论并发9.36× 完整窗口并发上限max_num_seqs20单轮 batch token 上限max_num_batched_tokens16384推测解码Qwen MTPnum_speculative_tokens3工具调用qwen3_coder parser思考解析qwen3 parserreasoning_effortxhigh这里要特别说清 4bit 的精度口径避免把三个层次混为一谈4bit 权重日志确认 vLLM 通过 compressed-tensors 加载线性层用 Marlin WNA16 kernelBF16 激活/主计算 dtype引擎配置dtypetorch.bfloat16不等于权重仍是 BF16FP8 KV Cache用float8_e4m3fn存储长上下文状态。所以更精确的表述是Qwen3.8-27B compressed-tensors 4bit 权重 BF16 激活 FP8 KV Cache TP4 MTP3。如果你打算把本地模型和云端模型混用TaoToken 的模型对话入口可以先用小流量验证协议兼容性https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite 。长期跑 Coding Agent 的话Coding Plan 更适合做统一调度https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。API Key 在控制台生成https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。Claude Code 相关的 Anthropic 兼容说明可以看 https://taotoken.net/ClaudeCodeAnthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaudecodeutm_campaignrewrite 。注意本地 vLLM 和 TaoToken 不是替代关系。本地负责推理算力TaoToken 负责统一入口、Key 管理和多模型路由。两者可以同时存在Claude Code 的ANTHROPIC_BASE_URL指向哪个就用哪条链路。3. 可复制配置vLLM 启动命令、deployment.env 与 Claude Code settings.json这一节是全文最核心的可复制部分。我先把最终跑通的 vLLM 启动命令贴出来再拆成deployment.envload_env.shstart_vllm_262k.sh三个文件最后给 Claude Code 的settings.json。3.1 最终 vLLM 启动命令vllm serve /root/autodl-tmp/Qwen3.8-27B-4bit \ --served-model-name qwen3.8-27b \ --host 127.0.0.1 \ --port 6006 \ --tensor-parallel-size 4 \ --limit-mm-per-prompt {image:100,video:0} \ --max-model-len 262144 \ --gpu-memory-utilization 0.94 \ --kv-cache-dtype fp8 \ --enable-prefix-caching \ --max-num-seqs 20 \ --max-num-batched-tokens 16384 \ --speculative-config {method:mtp,num_speculative_tokens:3} \ --reasoning-parser qwen3 \ --enable-auto-tool-choice \ --tool-call-parser qwen3_coder \ --default-chat-template-kwargs {reasoning_effort:xhigh}几个参数的作用--tensor-parallel-size 4把同一层参数分片到四张卡--max-model-len 262144开启原生 262K--gpu-memory-utilization 0.94让 vLLM 自动把剩余预算划给 KV Cache--kv-cache-dtype fp8用 FP8 存 KV--enable-prefix-caching复用 Claude Code 每轮重复发送的系统提示和工具定义--speculative-config开启 MTP3--reasoning-parser qwen3和--tool-call-parser qwen3_coder分别处理思考内容和工具调用。3.2 deployment.envMODEL_DIR/root/autodl-tmp/Qwen3.8-27B-4bit VLLM_BIN/root/miniconda3/bin/vllm CUDA_TOOLKIT_HOME/root/miniconda3/lib/python3.12/site-packages/nvidia/cu13 SERVED_MODEL_NAMEqwen3.8-27b VLLM_HOST127.0.0.1 VLLM_PORT6006 TENSOR_PARALLEL_SIZE4 KV_CACHE_DTYPEfp8 MAX_NUM_SEQS20 MAX_NUM_BATCHED_TOKENS16384 REASONING_EFFORTxhigh KV_CACHE_MEMORY_BYTES_262K KV_CACHE_MEMORY_BYTES_1M GPU_MEMORY_UTILIZATION0.94 ANTHROPIC_BASE_URLhttp://127.0.0.1:6006 LOCAL_API_TOKENlocal-qwen3.3 load_env.sh#!/usr/bin/env bash scripts_dir$( cd -- $(dirname -- ${BASH_SOURCE[0]}) pwd ) deployment_env${scripts_dir}/deployment.env if [[ ! -f ${deployment_env} ]]; then echo 未找到同目录配置文件${deployment_env} 2 return 1 2/dev/null || exit 1 fi source ${deployment_env} if [[ -n ${CUDA_VISIBLE_DEVICES:-} ]]; then export CUDA_VISIBLE_DEVICES; fi if [[ -n ${CUDA_TOOLKIT_HOME:-} ]]; then cuda_nvcc${CUDA_TOOLKIT_HOME}/bin/nvcc if [[ ! -x ${cuda_nvcc} ]]; then echo CUDA_TOOLKIT_HOME 中未找到可执行 nvcc${cuda_nvcc} 2 return 1 2/dev/null || exit 1 fi export CUDA_HOME${CUDA_TOOLKIT_HOME} export PATH${CUDA_TOOLKIT_HOME}/bin:${PATH} fi unset cuda_nvcc if [[ ${OMP_NUM_THREADS:-0} 0 ]]; then unset OMP_NUM_THREADS; fi : ${MODEL_DIR:?请在 deployment.env 中设置 MODEL_DIR} SERVED_MODEL_NAME${SERVED_MODEL_NAME:-qwen3.8-27b} VLLM_HOST${VLLM_HOST:-127.0.0.1} VLLM_PORT${VLLM_PORT:-6006} TENSOR_PARALLEL_SIZE${TENSOR_PARALLEL_SIZE:-4} KV_CACHE_DTYPE${KV_CACHE_DTYPE:-fp8} MAX_NUM_SEQS${MAX_NUM_SEQS:-20} MAX_NUM_BATCHED_TOKENS${MAX_NUM_BATCHED_TOKENS:-16384} REASONING_EFFORT${REASONING_EFFORT:-xhigh} case ${REASONING_EFFORT} in low | medium | xhigh) ;; *) echo REASONING_EFFORT 只支持 low、medium、xhigh 2; return 1 2/dev/null || exit 1 ;; esac KV_CACHE_MEMORY_BYTES_262K${KV_CACHE_MEMORY_BYTES_262K-} GPU_MEMORY_UTILIZATION${GPU_MEMORY_UTILIZATION:-} ANTHROPIC_BASE_URL${ANTHROPIC_BASE_URL:-http://127.0.0.1:6006} LOCAL_API_TOKEN${LOCAL_API_TOKEN:-local-qwen} VLLM_BIN${VLLM_BIN:-vllm}3.4 start_vllm_262k.sh#!/usr/bin/env bash set -euo pipefail scripts_dir$( cd -- $(dirname -- ${BASH_SOURCE[0]}) pwd ) source ${scripts_dir}/load_env.sh readonly kv_cache_memory_bytes${KV_CACHE_MEMORY_BYTES_262K} readonly max_num_seqs${MAX_NUM_SEQS} readonly max_num_batched_tokens${MAX_NUM_BATCHED_TOKENS} readonly speculative_config{method:mtp,num_speculative_tokens:3} if [[ ! -f ${MODEL_DIR}/config.json ]] || \ [[ ! -f ${MODEL_DIR}/model.safetensors.index.json ]]; then echo 模型目录无效或尚未下载完成${MODEL_DIR} 2 exit 1 fi declare -a memory_args() if [[ -n ${kv_cache_memory_bytes} ]]; then memory_args( --kv-cache-memory-bytes ${kv_cache_memory_bytes} ) memory_description每张 GPU 固定 KV Cache${kv_cache_memory_bytes} else if [[ -z ${GPU_MEMORY_UTILIZATION} ]]; then echo KV Cache 固定容量和 GPU 显存比例不能同时为空。 2 exit 1 fi memory_args( --gpu-memory-utilization ${GPU_MEMORY_UTILIZATION} ) memory_description每张 GPU 自动显存利用率${GPU_MEMORY_UTILIZATION} fi echo vLLM 推理配置 echo 模型${MODEL_DIR} echo Tensor Parallel${TENSOR_PARALLEL_SIZE} echo ${memory_description} echo 最大并发序列${max_num_seqs} echo 最大批处理 Token${max_num_batched_tokens} echo MTP 推测 Token3 echo 推理强度${REASONING_EFFORT} exec ${VLLM_BIN} serve ${MODEL_DIR} \ --served-model-name ${SERVED_MODEL_NAME} \ --host ${VLLM_HOST} \ --port ${VLLM_PORT} \ --tensor-parallel-size ${TENSOR_PARALLEL_SIZE} \ --limit-mm-per-prompt {image:100,video:0} \ --max-model-len 262144 \ ${memory_args[]} \ --kv-cache-dtype ${KV_CACHE_DTYPE} \ --enable-prefix-caching \ --max-num-seqs ${max_num_seqs} \ --max-num-batched-tokens ${max_num_batched_tokens} \ --speculative-config ${speculative_config} \ --reasoning-parser qwen3 \ --enable-auto-tool-choice \ --tool-call-parser qwen3_coder \ --default-chat-template-kwargs \ {\reasoning_effort\:\${REASONING_EFFORT}\}3.5 Claude Code settings.json{ $schema: https://json.schemastore.org/claude-code-settings.json, model: qwen3.8-27b, effortLevel: xhigh, env: { ANTHROPIC_BASE_URL: http://127.0.0.1:6006, ANTHROPIC_API_KEY: local-qwen, ANTHROPIC_AUTH_TOKEN: local-qwen, ANTHROPIC_MODEL: qwen3.8-27b, ANTHROPIC_DEFAULT_FABLE_MODEL: qwen3.8-27b, ANTHROPIC_DEFAULT_OPUS_MODEL: qwen3.8-27b, ANTHROPIC_DEFAULT_SONNET_MODEL: qwen3.8-27b, ANTHROPIC_DEFAULT_HAIKU_MODEL: qwen3.8-27b, ANTHROPIC_CUSTOM_MODEL_OPTION: qwen3.8-27b, ANTHROPIC_CUSTOM_MODEL_OPTION_NAME: Qwen3.8-27B Local, CLAUDE_CODE_SUBAGENT_MODEL: qwen3.8-27b, CLAUDE_CODE_EFFORT_LEVEL: xhigh, CLAUDE_CODE_MAX_CONTEXT_TOKENS: 262144, CLAUDE_CODE_AUTO_COMPACT_WINDOW: 220000, CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: 1 } }写入后执行chmod 600 ~/.claude/settings.json再用python -m json.tool ~/.claude/settings.json校验。注意ANTHROPIC_BASE_URL不要带/v1Claude Code 会在该地址后请求/v1/messages。如果你用 TaoToken 做统一入口把ANTHROPIC_BASE_URL换成 TaoToken 的 API 地址ANTHROPIC_API_KEY换成控制台生成的 Key 即可其余字段不变。这样本地 vLLM 和云端模型可以共用同一份 Claude Code 配置切换时只改 Base URL。4. 验证请求四道验收门与成功结果配置写完不代表跑通。我习惯用四道验收门从模型目录到 SSE 流式逐层确认。4.1 模型目录接口curl -s http://127.0.0.1:6006/v1/models | python -m json.tool应看到id: qwen3.8-27b。如果这里就失败说明服务没起来先去看启动日志。4.2 健康检查curl -i http://127.0.0.1:6006/health返回 200 即可。这一步只证明 HTTP 服务活着不证明模型能推理。4.3 Anthropic SSE 流式验收curl \ --no-buffer \ --silent \ --show-error \ --fail-with-body \ http://127.0.0.1:6006/v1/messages \ --header Content-Type: application/json \ --header x-api-key: local-qwen \ --header anthropic-version: 2023-06-01 \ --data-binary - JSON { model: qwen3.8-27b, max_tokens: 128, stream: true, messages: [ { role: user, content: 只回复连接成功 } ] } JSON应持续出现event:和data:而不是等到最后一次性返回。这一步是 Claude Code 能用的关键因为 Claude Code 依赖 SSE 逐 token 显示。4.4 OpenAI 推理验收curl -s http://127.0.0.1:6006/v1/chat/completions \ -H Content-Type: application/json \ -d { model: qwen3.8-27b, messages: [ { role: user, content: 只回答11等于几 } ], max_tokens: 128 } | python -m json.tool4.5 工具调用验收不要只问“你好”。我用下面这类任务验收读取当前目录的 README.md总结项目结构 然后新建 test_local_model.txt写入 Claude Code tool calling works 再读取并确认文件内容。这一步同时验证文件读取、文件写入、Bash/编辑工具、多轮 tool loop、工具结果回传、qwen3_coder parser 和 SSE 流式输出。4.6 实测成功结果我这次跑通后完整日志约 1800 行、337KB给出的关键数据指标实测checkpoint 大小19.57 GiB模型加载时间16.33 s单卡模型加载占用5.13 GiB每卡 KV Cache21.73 GiBKV Cache token 容量2,453,023完整 262K 理论并发9.36×从进程启动到 HTTP Server started约 242 sPOST /v1/messages688 次全部 200POST /v1/messages/count_tokens91 次全部 200HTTP 5000 次Traceback0 次OOM0 次preemption0 次Prefix Cache 最终命中率约 86.6%MM Cache 最终命中率约 95.2%MTP 平均接受长度3.11Draft acceptance rate 平均70.33%对一套 Claude Code 本地 Agent 后端来说688 次请求全部 200、零 500、零 OOM、零 preemption比某一个峰值 tokens/s 更关键。它证明协议、工具循环、计数接口、并发调度和长时间运行都没有出现引擎级崩溃。MTP3 的接受率会随任务、思考内容、工具 JSON 和生成阶段显著变化。日志中也明确警告当num_speculative_tokens 1时会对同一 MTP layer 执行多次 forward可能降低后续位置的接受率。所以要证明 MTP3 的净收益还需在同一数据集上做 MTP 关闭 / 1 token / 2 tokens / 3 tokens 的 A/B 测试不能只看当前最高吞吐。5. 本篇常见错排查401、local proxy failed、reading choices、OAuth 与 Blackwell 报错这一节按真实报错来对照都是我这次踩过的坑。5.1 401 Unauthorized现象Claude Code 启动后请求/v1/messages返回 401。根因通常是ANTHROPIC_API_KEY和ANTHROPIC_AUTH_TOKEN不一致或者 vLLM 端没配--api-key。本地自测时两者都设成local-qwen即可。如果你用 TaoTokenKey 从控制台生成注意不要和本地 token 混用。5.2 local proxy failed现象Claude Code 报local proxy failed或连接被拒绝。先确认 vLLM 是否真的在监听curl -i http://127.0.0.1:6006/health如果这里失败问题在 vLLM 不在 Claude Code。常见原因是VLLM_HOST写成了0.0.0.0但防火墙拦截或者端口被占用。日志里出现Port 6006 is already in use, trying port 6007时说明对外 API 端口没起来最终要以/health和日志中的 Uvicorn 监听地址为准。5.3 reading choices 报错现象日志出现reading choices相关异常通常和 OpenAI 兼容接口的响应结构有关。如果你用/v1/chat/completions测试返回体里choices字段是标准结构。如果客户端期望 Anthropic 格式却打到了 OpenAI 端点就会解析失败。Claude Code 走的是/v1/messages不要混用。5.4 OAuth 相关报错现象Claude Code 提示 OAuth 或登录失败。本地模型不需要 OAuth。确保CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC1并且没有残留的官方登录态。如果之前登录过官方账号先清理~/.claude下的凭据文件再用本地 Base URL 启动。5.5 duplicate template name现象启动 vLLM 时报AssertionError: duplicate template name。触发路径是vLLM env_override → torch._inductor.lowering → flex_attention TritonTemplate → duplicate template name。这是 PyTorch 2.13.0 Blackwell/CUDA 13 的已知问题同一个 Triton template 在单进程内被重复注册。现场 workaround 是把两处硬断言改成幂等注册修改文件/root/miniconda3/lib/python3.12/site-packages/torch/_inductor/select_algorithm.py把assert name not in self.all_templates改成if name in self.all_templates: return把assert not hasattr(extern_kernels, name)改成if hasattr(extern_kernels, name): return。注意这是本次 Torch 2.13.0 环境的现场 workaround不要盲目复制到其他版本。升级或重装 Torch 会覆盖修改。长期方案是选 upstream 已修复且与 vLLM 明确兼容的版本组合。5.6 SM 12.x requires CUDA 12.9现象FlashInfer 报Failed to get device capability: SM 12.x requires CUDA 12.9。真实情况不是 GPU 低于 sm75而是环境里存在多套 CUDA 口径Driver 支持到 13.2PyTorch runtime 是 13.0PATH 里的系统 nvcc 是 12.8pip 安装的新 nvcc 是 13.3。FlashInfer JIT 调用的是 PATH 里的 nvcc12.8 不认识 SM 12.0。解决方式是在load_env.sh里把正确的 pip CUDA 工具链放到 PATH 前面_pip_cuda_bin/root/miniconda3/lib/python3.12/site-packages/nvidia/cu13/bin if [[ -x ${_pip_cuda_bin}/nvcc ]]; then export CUDA_HOME/root/miniconda3/lib/python3.12/site-packages/nvidia/cu13 export PATH${_pip_cuda_bin}:${PATH} fi unset _pip_cuda_bin验证which nvcc、nvcc --version、echo ${CUDA_HOME}。5.7 CUDA compiler and CUDA toolkit headers are incompatible现象JIT 继续运行后报CUDA compiler and CUDA toolkit headers are incompatible。原因是 nvcc 是 13.3但cuda.h里CUDA_VERSION是 1300013.0。解决方式是把 pip CUDA 组件对齐到 13.3python -m pip install -U \ nvidia-cuda-nvcc13.3.73 \ nvidia-cuda-crt13.3.73 \ nvidia-cuda-runtime13.3.29 \ nvidia-cuda-nvrtc13.3.33 \ nvidia-cuda-cupti13.3.75验证头文件和编译器版本一致。5.8 cannot find -lcudart现象FlashInfer JIT 链接阶段报cannot find -lcudart。pip CUDA 包目录只有lib/libcudart.so.13但 FlashInfer 构建脚本找lib64/libcudart.so。修复方式CUDA_HOME/root/miniconda3/lib/python3.12/site-packages/nvidia/cu13 if [[ ! -e ${CUDA_HOME}/lib64 ]]; then ln -s ${CUDA_HOME}/lib ${CUDA_HOME}/lib64 fi cd ${CUDA_HOME}/lib for library in *.so.*; do link_name${library%%.so.*}.so if [[ ! -e ${link_name} ]]; then ln -s ${library} ${link_name} fi done mkdir -p ${CUDA_HOME}/lib/stubs ln -sf /usr/lib/x86_64-linux-gnu/libcuda.so ${CUDA_HOME}/lib/stubs/libcuda.so工具链修改后清理失败的 JIT 缓存rm -rf ~/.cache/flashinfer。这是可重建缓存不是模型权重。5.9 OMP_NUM_THREADS0现象libgomp: Invalid value for environment variable OMP_NUM_THREADS。检查发现变量为 0而 OpenMP 要求正整数。处理方式if [[ ${OMP_NUM_THREADS:-0} 0 ]]; then unset OMP_NUM_THREADS; fi5.10 Unexpected reasoning effort high现象Claude Code 请求返回 500报Unexpected reasoning effort high. Supported types are xhigh (default), medium, and low.根因不在 vLLM 启动参数而在客户端显式覆盖。vLLM 启动时配的--default-chat-template-kwargs {reasoning_effort:xhigh}只是请求未提供该字段时的默认值。Claude Code 2.1.234 会保存自己的 effort 等级对某些模型默认用 high显式发送时覆盖了服务端默认值。最稳定的修复是同时约束服务端与客户端deployment.env里REASONING_EFFORTxhighClaude Code 启动脚本同时导出CLAUDE_CODE_EFFORT_LEVEL${REASONING_EFFORT}。CLAUDE_CODE_EFFORT_LEVEL的优先级高于/effort、用户 settings 和模型默认值能覆盖之前会话持久化的 high。5.11 At most 0 image(s) may be provided现象Claude Code 粘贴截图后返回At most 0 image(s) may be provided in one prompt.这是--language-model-only导致的它等价于把所有多模态上限设为零。如果不需要图片理解继续保留需要分析截图时删掉--language-model-only改成--limit-mm-per-prompt {image:1,video:0}并重启 vLLM。如果又遇到At most 1 image(s)说明图片功能已开启但完整对话中至少有两张图片。limit-mm-per-prompt统计的是整个请求/对话历史中的图片总数不是当前这一轮新粘贴了几张。需要多张时改成{image:4,video:0}或者/clear后重新粘贴。5.12 排错原则找第一个可操作的根因vLLM 最后常常只显示RuntimeError: Engine core initialization failed. See root cause above.这个错误没有诊断价值。真正根因通常在前面几十到几百行。我的做法是把完整日志写到文件再搜索第一处真实异常bash start_vllm_262k.sh /tmp/vllm_full.log 21 rg -n Traceback|ERROR|RuntimeError|AssertionError|FAILED /tmp/vllm_full.log这次从重复模板、GPU 架构误判、headers 不一致到-lcudart都是沿着“第一处真实异常”逐层找出来的。不要被无害警告和真正根因混在一起。6. 语义一致 CTA本地 vLLM 与 TaoToken 的接入路径如果你已经按上面的步骤把本地 vLLM 跑起来Claude Code 也验收通过那接下来可以考虑把本地模型和云端模型统一到一套入口。TaoToken 的接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 里面有 Anthropic 兼容接口的说明。API Key 在 https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 生成。模型对话入口可以用来快速验证协议兼容性https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite 。长期跑 Coding Agent 或需要多模型调度的话Coding Plan 更适合https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。Claude Code 相关的 Anthropic 接入说明在 https://taotoken.net/ClaudeCodeAnthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaudecodeutm_campaignrewrite 。切换方式很简单把 Claude Codesettings.json里的ANTHROPIC_BASE_URL从http://127.0.0.1:6006换成 TaoToken 的 API 地址ANTHROPIC_API_KEY换成控制台生成的 Key其余字段不变。这样本地 vLLM 和云端模型可以共用同一份 Claude Code 配置需要本地算力时指向本机需要云端模型时指向 TaoToken。最后留一个我实测下来最实用的技巧把/root/.cache/vllm持久化。日志已经确认 AOT 编译产物、FlashInfer autotune 和 torch compile cache 被写入该目录。如果容器每次重建都丢失该目录就会反复支付冷启动成本。这套服务应当按长驻进程运行用 tmux 托管只监听 localhost端口、配置和客户端保持同一个事实源。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑