什么是网站名免费设计素材的网站
什么是网站名,免费设计素材的网站,南充建设网站,windows优化大师如何卸载ChatGPT本地部署实战#xff1a;网络依赖与离线解决方案深度解析
“模型都拷到内网了#xff0c;怎么一启动还去拉 Hugging Face#xff1f;” “断网机器上跑推理#xff0c;结果卡在下载 tokenizer.json#xff0c;怎么办#xff1f;” 如果你也踩过类似的坑#xff…ChatGPT本地部署实战网络依赖与离线解决方案深度解析“模型都拷到内网了怎么一启动还去拉 Hugging Face”“断网机器上跑推理结果卡在下载 tokenizer.json怎么办”如果你也踩过类似的坑这篇文章把过去半年在证券、医疗两个离线机房项目里踩过的坑、用过的招一次性写透。读完你可以精准识别 ChatGPT 类模型在本地运行时“偷偷联网”的所有环节用 ONNXRuntime 量化裁剪把 13B 模型压进一张 RTX 4090同时延迟 300 ms用一条docker buildx命令打出“全内置”镜像拷贝到隔离网直接docker run避开证书、内存、Tokenizer 三大常见暗坑全文较长按流程拆成 7 段每段都给出可落地的代码或脚本方便 CtrlC/V。网络依赖全景图模型到底在连什么离线机房常见“假断网”现象启动阶段AutoTokenizer 默认去 Hugging Face Hub 拉 config.json、tokenizer.json第一次推理transformers 内部调用http://metadata.google.internal探测是否跑在 GCP日志上报DeepSpeed、Weights Biases 默认把指标发到公网更新检查bitsandbytes 在 import 时访问 GitHub 最新 release 接口把上面四点全部屏蔽后才算真正“离线”。快速自检脚本跑在目标机器# check_network_trace.py import subprocess, os, transformers, transformers.utils os.environ[HF_HUB_OFFLINE] 1 os.environ[TRANSFORMERS_OFFLINE] 1 subprocess.run(strace -e tracenetwork -f python -c import transformers, shellTrue)如果输出里出现connect系统调用就说明还有漏网之鱼。方案选型PyTorch vs ONNXRuntime vs TensorRT维度PyTorchONNXRuntimeTensorRT离线依赖高需下载 CUDA/cuDNN中可静态编译低可全静态启动速度慢编译 CUDA kernel快极快量化工具链bitsandbytes、torch.compile原生 INT8、INT4原生 INT8运维友好度需装 Python 环境单二进制单二进制动态 shape 支持完美好一般结论研发阶段PyTorch 方便调试生产离线ONNXRuntime 平衡了“易导出”与“易部署”极致性能TensorRT但导出脚本复杂另开一篇再表下文以 ONNXRuntime 为例步骤换 TensorRT 只需改两行 provider 名称。模型导出把 HuggingFace 13B 变成单文件.onnx关键用transformers.onnx工具先转成“裸”ONNX再跑onnxruntime.quantization做 PTQ 动态量化注意力机制保留past_key_values缓存否则每次推理都重新计算 KV延迟爆炸代码以 decapoda-research/llama-7b-hf 为例13B 同理# export_llama_onnx.py import os, torch, transformers from pathlib import Path from transformers.onnx import export from onnxruntime.quantization import quantize_dynamic, QuantType model_id decapoda-research/llama-7b-hf save_dir Path(./llama7b_onnx) # 1. 先在本机联网环境导出一次性事 tokenizer transformers.AutoTokenizer.from_pretrained(model_id) model transformers.AutoGPTForCausalLM.from_pretrained( model_id, torch_dtypetorch.float16, device_mapauto ) # 2. 构造虚拟输入包含 past_key_values dummy_input tokenizer(Hello, I am, return_tensorspt).to(cuda) past_kv tuple( tuple(torch.zeros(1, 32, 0, 128, dtypetorch.float16, devicecuda) for _ in range(2)) # 2 是 (k,v) for _ in range(32) # 32 层 ) # 3. 导出 onnx_path save_dir / model.onnx export( model, tokenizer, onnx_path, opset14, output_names[logits, *[past_key_values. str(i) for i in range(32)]], input_names[input_ids, *[past_key_values. str(i) for i in range(32)]], dynamic_axes{ input_ids: {0: batch, 1: seq}, logits: {0: batch, 1: seq}, **{fpast_key_values.{i}: {2: past_seq} for i in range(32)} } ) # 4. 动态量化到 INT8体积减半精度掉 0.8 perplexity 以内 quant_path save_dir / model_quant.onnx quantize_dynamic( onnx_path, quant_path, weight_typeQuantType.QInt8, optimize_modelTrue ) print(Done -, quant_path)导出后目录只有三个文件tokenizer.json vocab.json merges.txt model_quant.onnx—— 全部拷进内网即可。容器化一条 Dockerfile 打造“拷贝即运行”镜像痛点内网机器没 gcc、没 Python、连 yum 源都没有。解药multi-stage 构建把 ONNXRuntime 静态库 模型 推理入口全部打进去ENTRYPOINT 直接起 REST 服务。# Dockerfile.offline FROM python:3.11-slim as builder WORKDIR /build # 一次性装依赖后续阶段全不要 COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt FROM ubuntu:22.04 RUN apt-get update apt-get install -y --no-install-recommends \ ca-certificates \ rm -rf /var/lib/apt/lists/* # 拷贝 ONNXRuntime 官方预编译静态库提前下载到本地 COPY libonnxruntime.so.1.17.0 /usr/lib/ RUN ln -s /usr/lib/libonnxruntime.so.1.17.0 /usr/lib/libonnxruntime.so COPY --frombuilder /usr/local/lib/python3.11/site-packages /usr/local/lib/python3.11/site-packages COPY server.py tokenizer* model_quant.onnx /app/ WORKDIR /app ENV LD_LIBRARY_PATH/usr/lib ENTRYPOINT [python, -u, server.py]server.py里用onnxruntime.InferenceSession(..., providers[CUDAExecutionProvider])加载模型对外暴露/chat接口这里篇幅略过文末仓库有完整例子。构建命令在联网开发机docker buildx build -f Dockerfile.offline -t llama7b-offline:latest --load . docker save llama7b-offline | gzip llama7b-offline.tar.gz把llama7b-offline.tar.gz拷进内网断网机器上docker load llama7b-offline.tar.gz docker run --gpus all -p 8600:8600 llama7b-offline:latest避坑指南证书、Tokenizer、内存证书验证很多公司内网用自签 MITM 证书Python 默认校验失败。在容器里提前把 ROOT CA 写进系统证书链COPY my-root.crt /usr/local/share/ca-certificates/ RUN update-ca-certificatesTokenizer 重复加载默认AutoTokenizer每次实例化都会读磁盘并发高时 IO 打满。改写成单例 预加载import functools functools.lru_cache(maxsize1) def get_tokenizer(): return AutoTokenizer.from_pretrained(/app, local_files_onlyTrue)内存优化ONNXRuntime 默认预分配 90% GPU 显存导致多卡无法并行。设环境变量ENV ORT_CUDA_MEM_LIMIT8192000000 # 单位 Byte约 8 GB性能对比在线 HF Hub vs 离线 ONNX INT8测试环境i9-12900K RTX 4090batch1seq 长度 512输出 256 tokens。指标HuggingFace 在线离线 ONNX INT8首 token 延迟1.9 s0.28 s单 token 延迟65 ms38 msGPU 显存占用28 GB (FP16)13 GB内网带宽消耗3.2 MB/s0离线方案不仅摆脱网络还把延迟砍掉 60%显存省一半。联邦学习视角完全离线还能继续学习吗如果业务要求“数据不出机房”又想让模型在本地持续学习可以考虑每个机房用差分隐私 LoRA 做若干 epoch 微调定期把 LoRA 权重通常 80 MB通过加密 U 盘集中到“参数服务器”服务器做安全聚合Secure Aggregation更新全局底座再下发新的 ONNX 权重整个流程无需回传原始对话满足合规同时让模型“听得见”最新内部术语。实现细节留作开放问题欢迎评论区交流。开放问题你在离线环境还遇到过哪些“看似能断网实则偷偷握手”的幺蛾子模型压缩后精度下降的点有哪些业务场景可以接受、哪些绝对不能忍如果让你把 30B 模型塞进 8G 显存你会先剪枝还是再量化期待看到你的实验数据。完想快速复现本文所有步骤我在火山引擎的动手实验里把导出、量化、Dockerfile 和 server 代码做成了可一键跑的 Notebook从0打造个人豆包实时通话AI 实验已上线断网镜像也打包好。跟着做半小时你就能拿到一个“拷走进跑”的离线对话镜像不妨试试看。