基于ollama、llamafile部署的大模型使用

一、ollama方式

1.本地部署ollama

部署方式:见本地部署ollama博客内容

2.基于langchain使用

复制代码
from langchain_ollama.chat_models import ChatOllama
llm = ChatOllama(
    model="deepseek-r1:8b",          # 与本地 ollama run 的模型名保持一致
    base_url="http://ip:11434",  # 默认端口
    temperature=0.1,
    num_predict=2048
)

# 单轮调用示例
for chunk in llm.stream(
    "你好"
):
    print(chunk.content)

二、llamafile方式

1.本地部署

步骤(linux环境)

复制代码
wget  https://huggingface.co/FM-1976/Qwen2.5-1.6b-llamafile/resolve/main/QwenPortable.llamafile

chmod +x QwenPortable.llamafile

./QwenPortable.llamafile

2.基于langchain使用

复制代码
from langchain_openai import ChatOpenAI

# 配置本地模型:核心就是指向 llamafile 的 OpenAI兼容接口
llm = ChatOpenAI(
    base_url="http://ip:8080/v1",  # 本地llamafile的API地址,固定
    api_key="not-needed",                      # 必填但无效,随便填即可,llamafile不需要鉴权
    model_name="not-needed",                   # 模型名随便填,不影响调用,llamafile会忽略
    temperature=0.7,                           # 回答随机性,0=严谨,1=发散
    max_tokens=128                             # 最大生成字数
)

# 方式1:简单单轮对话
result = llm.invoke("你好")
print(result.content)

3.system启动方式配置

(1)编辑文件

vim /etc/systemd/system/lamafile-qwen-1.6b-cpu.service

复制代码
[Unit]
Description=Qwen2.5-1.6B llamafile Service
# 确保在网络就绪后启动
After=network.target
# 希望网络在线时启动(需要systemd-networkd-wait-online服务)
Wants=network-online.target

[Service]
Type=simple
# 建议使用非root用户运行,提高安全性(如新建专用用户)
User=root
Group=root
# 工作目录设置为包含模型文件的目录
WorkingDirectory=/data
# 使用bash执行,确保环境变量和信号处理正确
# --host 0.0.0.0 监听所有网络接口
# --port 18080 指定服务端口
# -t 8 设置使用的线程数(根据CPU核心数调整)
ExecStart=/bin/bash -c "exec /data/QwenPortable.llamafile --server --host 0.0.0.0 --port 18080 --nobrowser -t 8"
# 服务异常退出时自动重启
Restart=always
# 重启前等待10秒,避免频繁重启
RestartSec=10
# 日志输出到systemd journal
StandardOutput=journal
StandardError=journal
# 可选:设置日志标识
SyslogIdentifier=llamafile-qwen
# 可选:设置服务启动超时时间(秒)
TimeoutStartSec=300
# 可选:设置服务停止超时时间(秒)
TimeoutStopSec=30
# 可选:限制服务资源使用
# CPUQuota=200%
# MemoryMax=4G

[Install]
# 设置为系统启动时自动启用
WantedBy=multi-user.target

(2)刷新配置,启动

复制代码
systemctl daemon-reload 

systemctl start lamafile-qwen-1.6b-cpu.service 
systemctl status lamafile-qwen-1.6b-cpu.service

(3)注意

复制代码
(1)lamafile文件依赖shell启动

(2)exec参数

1)不加 exec:/bin/bash -c "/data/xxx.llamafile --参数"

bash 启动后,会新建一个子进程去运行 llamafile
最终进程树:systemd → bash → llamafile
问题:bash 会作为「父进程」残留,systemd 管理的是 bash 而非 llamafile,停止服务时信号传递异常、可能残留僵尸进程,日志也会混乱。

2)加 exec:/bin/bash -c "exec /data/xxx.llamafile --参数"

bash 启动后,执行 exec 命令 时,会销毁自身的 bash 进程,把 llamafile 程序加载到当前进程空间
最终进程树:systemd → llamafile
优势:没有多余的 bash 进程残留,systemd 能「直接管理」llamafile 主进程,启停服务、监控进程状态、日志收集全部正常,这是 systemd 配置的标准最佳实践。

(4)参数说明

参数 功能 典型场景
--server 启动 HTTP 服务 远程 API 调用
--port 8080 固定服务端口 多服务共存时避免冲突
--host 0.0.0.0 外部服务访问
--nobrowser 禁用浏览器自动弹窗 无头服务器部署
-t 8 线程数

4.GPU的方式启动

复制代码
# 双卡GPU,启动命令
./QwenPortable.llamafile --n-gpu-layers 40 --main-gpu 0 --split-mode layer -t 16



单卡GPU,启动命令
./QwenPortable.llamafile --n-gpu-layers 40 --main-gpu 0 -t 16


双卡核心参数:
--n-gpu-layers 40:加载 40 层模型到 GPU,显存占用极低(单卡仅占 1.2G 左右,双卡均分)

--main-gpu 0:指定主显卡 ID 为 0(nvidia-smi 里显示的第一张显卡是 0,第二张是 1),所有核心计算优先走主卡

--split-mode layer:多卡并行的核心模式 → 按「模型层」分片,把模型的神经网络层平均分配到你的两张 N 卡上,比如前 20 层跑在显卡 0,后 20 层跑在显卡 1,两张卡同时工作,算力拉满!

-t 16:CPU 线程数,建议填你 CPU 的物理核心数(比如 16 核填 16,8 核填 8),llama.cpp 会用 CPU 做少量辅助计算,不影响 GPU 主力工作
相关推荐
曲幽6 小时前
我用FastAPI接ollama大模型,差点被asyncio整崩溃(附对话窗口实战)
python·fastapi·web·async·httpx·asyncio·ollama
Sinclair6 小时前
简单几步,安卓手机秒变服务器,安装 CMS 程序
android·服务器
是一碗螺丝粉9 小时前
5分钟上手LangChain.js:用DeepSeek给你的App加上AI能力
前端·人工智能·langchain
是一碗螺丝粉9 小时前
LangChain 核心组件深度解析:模型与提示词模板
前端·langchain·aigc
两万五千个小时9 小时前
落地实现 Anthropic Multi-Agent Research System
人工智能·python·架构
木心月转码ing9 小时前
WSL+Cpp开发环境配置
linux
哈里谢顿12 小时前
Python 高并发服务限流终极方案:从原理到生产落地(2026 实战指南)
python
用户8356290780511 天前
无需 Office:Python 批量转换 PPT 为图片
后端·python
markfeng81 天前
Python+Django+H5+MySQL项目搭建
python·django
大模型真好玩1 天前
大模型训练全流程实战指南工具篇(七)——EasyDataset文档处理流程
人工智能·langchain·deepseek