基于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 主力工作
相关推荐
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ2 小时前
Linux 查询某进程文件所在路径 命令
linux·运维·服务器
紫丁香2 小时前
AutoGen详解一
后端·python·flask
FreakStudio2 小时前
不用费劲编译ulab了!纯Mpy矩阵micronumpy库,单片机直接跑
python·嵌入式·边缘计算·电子diy
05大叔4 小时前
网络基础知识 域名,JSON格式,AI基础
运维·服务器·网络
安当加密4 小时前
无需改 PAM!轻量级 RADIUS + ASP身份认证系统 实现 Linux 登录双因子认证
linux·运维·服务器
内卷焦虑人士4 小时前
Windows安装WSL2+Ubuntu 22.04
linux·windows·ubuntu
清水白石0084 小时前
Free-Threaded Python 实战指南:机遇、风险与 PoC 验证方案
java·python·算法
勇往直前plus5 小时前
大模型开发手记(八):LangChain Agent格式化输出
langchain
飞Link5 小时前
具身智能核心架构之 Python 行为树 (py_trees) 深度剖析与实战
开发语言·人工智能·python·架构
woho7788995 小时前
不同网段IP的网络打印机,打印、扫描设置
运维·服务器·网络