跳到主要内容

在本地部署大模型,顺便感慨

· 阅读需 5 分钟

前言

其实早在去年DeepSeek-R1开源那会儿,有朋友就和我聊可以本地部署大模型玩玩。不过那时我对本地部署不太感兴趣,虽然我知道可以用Ollama部署,但没有付诸实践,因为我觉得本地只能部署一些参数量很小的大模型,其能力较满血版差多了,直接用API调用简单又方便,何必费那个劲呢?

现在看来,这理由没错,但是也不全对。我当时可能不只是拒绝尝试本地部署这件事,而是变得不想折腾的感觉。毕竟工作比较忙,没多少时间折腾,渐渐地就开始用是否值得、有没有意义等理由来衡量一切,而与折腾的初心渐行渐远。

所以这篇博客,本来去年就可以有的,现在补上,既是技术记录,也是响应下喜欢折腾的初心。

Ollama

Ollama官网:Ollama

Ollama安装比较简单,去Ollama官网下载安装包,安装时一路Next就行。Ollama会默认安装在C盘,如果要修改安装路径,要使用命令行安装:

OllamaSetup.exe /DIR=D:\AppData\Local\Programs\Ollama

Ollama默认把模型放在C盘,可以通过设置环境变量OLLAMA_MODELS 来设置Ollama模型的保存位置。

Ollama有自己的模型库:https://ollama.com/search,不过模型偏少。例如,运行个qwen3:4b 玩玩:

ollama run qwen3:4b

image

如果之前没有下载过,Ollama会先下载模型,然后运行。Ollama也有GUI工具可以使用,像Chat助手。图里因为我之前下载过,所以没有下载的过程。

Ollama默认会监听11434端口,验证:

C:\Users\jiang>netstat -ano | findstr 11434
TCP 0.0.0.0:11434 0.0.0.0:0 LISTENING 77440

用LangChain本地调用下:

from langchain.chat_models import init_chat_model

if __name__ == '__main__':
model = init_chat_model(
model='ollama:qwen3:4b',
base_url='http://localhost:11434',
)
print(model.invoke('什么是LangChain,100字以内').content)

输出如下:

LangChain是开源AI框架,用于构建应用,通过连接大模型与工具实现链式推理,支持多模态数据处理和智能决策。(58字)

llama.cpp

Ollama的推理内核使用的是llama.cpp,但曾长期缺失llama.cpp的版权声明。而且考虑到llama.cpp的性能更好,也可以使用llama.cpp来本地部署大模型。

llama.cpp有CPU版和GPU版,从GitHub下载:Releases · ggml-org/llama.cpp

因为我电脑有N卡,所以下载CUDA版,CUDA DLLs也需要下载。下载之后解压,CUDA DLLs解压后放到llama的目录。

image

然后就是下载模型了,一般在Hugging Face – The AI community building the future.上下载。不过那个网站很慢,所以可以使用镜像站。设置环境变量:

HF_ENDPOINT=https://hf-mirror.com

就可以在命令行或代码里使用镜像站了。

不过,有时这个镜像站依然还是很慢(唉,网络是国内开发者的痛)。可以看看模型库首页 · 魔搭社区,在HuggingFace上找的模型可以到魔搭社区(ModelScope)下载,例如:Qwen3.8-4B-Distill-GGUF · 模型库

llama.cpp有cli:

llama-cli.exe -m models\Qwen3.8-4B-Q4_K_M.gguf -ngl all -c 4096 -b 2048 --flash-attn auto -t 8 --temp 0.6 --top-p 0.95 -cnv

image

llama.cpp也可以部署为服务:

llama-server.exe -m models\Qwen3.8-4B-Q4_K_M.gguf -ngl all -c 4096 -b 2048 --flash-attn auto -t 8 --host 0.0.0.0 --port 11434

image

用LangChain本地调用下:

from langchain.chat_models import init_chat_model

if __name__ == '__main__':
model = init_chat_model(
model='Qwen3.8-4B-Q4_K_M.gguf',
base_url='http://localhost:11434/v1',
model_provider='openai',
api_key='xxx' # 随便填个,不能为空
)
print(model.invoke('什么是LangChain,100字以内').content)

输出如下:

LangChain 是构建 LLM 应用的框架。它提供 Prompt、Memory、Tools 等模块,帮助开发者简化复杂工作流,构建具备推理、规划及工具调用能力的 AI 应用,降低开发门槛。

一些感慨

折腾,本身就是意义。不是所有事都需要“有意义”才“值得”去做,有时,“想做”本身就是理由。

很长时间里,我都希望自己的博客内容“有含金量”,这导致我常常很久才憋一篇,有时想写又觉得没什么意义,然后随着工作忙就放弃了。现在很多人遇到问题就直接问AI了,搜索引擎也很少用了,我也是这样。在这种情况下,个人博客就更没什么人看了,我也不在意我的博客有多少人看了,那写博客就没什么意义了吗?

博客的意义,也许从来就不是让别人看到,而是让自己看见。

看见自己曾经折腾过什么,比如曾经为了本地部署大模型,折腾过Ollama,折腾过llama.cpp。我在折腾的过程中遇到的一些问题以及解决方案,也许会帮助到其他人。

所以,我觉得不必强求博客要“有含金量”,它更多的是一种记录,提醒自己保持对技术的热忱,保持对折腾的兴致。