共计 2826 个字符,预计需要花费 8 分钟才能阅读完成。
为什么要在 VSCode 里折腾 GLM 大模型?
最近大模型开发火得不行,但每次想测试个功能都要切到网页端或者 Jupyter 里,实在影响效率。特别是用 Claude API 时,如果能直接在 VSCode 里调试代码、调用模型,开发流程会顺畅很多。不过实际配置时,我遇到了几个头疼问题:

- 环境依赖像俄罗斯套娃(Python 版本、CUDA、PyTorch 要严格匹配)
- 本地跑 GLM-130B 这种大模型时显存动不动就爆炸
- API 返回结果和本地测试的格式总对不上
准备工作:别急着写代码
先把这些装备凑齐(2023 年 10 月实测可用版本):
- 基础环境
- Python 3.8~3.10(3.11 可能有兼容性问题)
- VSCode 1.82+ 装好 Python 插件
-
至少 16GB 内存(跑 130B 模型需要 A100 80G 显存)
-
Python 包
pip install torch==2.0.1+cu118 --extra-index-url https://download.pytorch.org/whl/cu118 pip install transformers==4.33.0 sentencepiece zhipuai -
硬件选择建议
- 本地测试用 GLM-6B+3060 显卡够用
- 正经开发建议云端租 A10G(每小时不到 $1)
分步配置手把手教学
第一步:搞定 Claude API
- 去 Claude 官网 申请 API Key
- 在 VSCode 里新建
.env文件:CLAUDE_API_KEY=sk-your-key-here - 安装 python-dotenv 包读取配置:
from dotenv import load_dotenv load_dotenv()
第二步:GLM 模型部署方案
方案 A:本地快速启动(适合 6B 模型)
from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("THUDM/glm-6b", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("THUDM/glm-6b", device_map="auto")
方案 B:云端 API 调用(推荐 130B)
import zhipuai
zhipuai.api_key = "your_zhipu_key"
response = zhipuai.model_api.invoke(
model="glm-130b",
prompt=[{"role":"user", "content":"你好"}]
)
第三步:VSCode 专属设置
- 在
.vscode/settings.json中添加:{"python.linting.pylintArgs": ["--extension-pkg-whitelist=transformers"], "python.analysis.extraPaths": ["./src"] } - 强烈建议安装这些插件:
- REST Client(测试 API 超方便)
- Jupyter(交互式调试)
完整代码示例
import os
from dotenv import load_dotenv
from transformers import AutoTokenizer, AutoModelForCausalLM
# 环境加载
load_dotenv()
class GLMClient:
def __init__(self, model_size="6b"):
self.model_size = model_size
self._init_model()
def _init_model(self):
"""根据模型尺寸选择本地 / 云端初始化"""
if self.model_size == "6b":
print("Loading local GLM-6B...")
self.tokenizer = AutoTokenizer.from_pretrained(
"THUDM/glm-6b",
trust_remote_code=True
)
self.model = AutoModelForCausalLM.from_pretrained(
"THUDM/glm-6b",
device_map="auto",
torch_dtype=torch.float16
)
else:
print("Using cloud API...")
def generate(self, prompt, max_length=100):
"""生成文本核心方法"""
inputs = self.tokenizer(prompt, return_tensors="pt").to("cuda")
outputs = self.model.generate(
**inputs,
max_length=max_length,
temperature=0.7
)
return self.tokenizer.decode(outputs[0])
# 使用示例
if __name__ == "__main__":
client = GLMClient("6b") # 切换 130b 使用云端
print(client.generate("如何用 Python 实现快速排序?"))
踩坑记录与解决方案
问题 1:CUDA out of memory
– 解决方案:
– 加 torch_dtype=torch.float16 参数
– 修改 device_map="balanced" 替代"auto"
问题 2:API 返回结果乱码
– 原因:Claude 和 GLM 的 tokenizer 不兼容
– 修复:
# 在发送给 Claude 前做转换
text = text.replace("<|endoftext|>", "")
问题 3:推理速度慢
– 优化方案:
– 开启 model.eval() 模式
– 使用 with torch.no_grad() 上下文
性能优化实战技巧
-
批处理请求
# 同时处理多个输入 inputs = tokenizer(["prompt1", "prompt2"], padding=True, return_tensors="pt") -
缓存 tokenizer 结果
from functools import lru_cache @lru_cache(maxsize=100) def cached_tokenize(text): return tokenizer(text, return_tensors="pt") -
量化压缩(6B 模型显存占用从 13G→6G)
model = quantize_model(model, bits=4)
接下来可以尝试
- 如何把 GLM 接入 VSCode 的代码补全功能?
- 在 FastAPI 中封装成微服务的最佳实践
- 用 LoRA 方法微调行业专属模型
经过这一通折腾,现在我的 VSCode 终于能流畅调用 GLM 大模型了。虽然配置过程有点复杂,但看到代码里直接出生成结果的那一刻,感觉之前掉的头发都值了。建议大家先从 6B 模型玩起,等熟悉了再上大模型,毕竟 130B 的 API 调用费可不便宜啊!
