基于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 主力工作
相关推荐
ebiobiz15 分钟前
基于 GD32 Embedded Builder (GEB) 与 Nimmake 的 MCU 工程搭建指南
c++·python·单片机·嵌入式硬件·mcu
g105655913915 分钟前
公有云_云运维服务
java·运维·服务器
码农小韩21 分钟前
Linux驱动理论(二)——Linux字符设备驱动
linux·嵌入式软件开发·linux操作系统·linux应用开发·linux驱动理论
well061228 分钟前
Linux粘滞位与Makefile机制深度解析
linux·运维·服务器
再写一行代码就下班37 分钟前
linux sh脚本在windows修改导致无法使用解决方式
java·linux·centos
hzxpaipai39 分钟前
杭州企业官网怎么建设?从策划到上线的5步建站方法
运维·服务器·前端·网络
老歌老听老掉牙1 小时前
穿越时空的物流密码:VRP与VRPTW的深度剖析及实战求解
python·物流·vrp
smartpi_ai1 小时前
通用脱机烧录器为什么烧不进 CI-03?下载协议的门槛、免唤醒 10 条的建议值属性
服务器·网络·ci/cd
额额额对了1 小时前
SPI通信
linux·c语言·汇编·单片机·嵌入式硬件·arm
FYKJ_20101 小时前
django电影推荐系统55066-计算机课程设计、毕业设计
vue.js·spring boot·python·mysql·typescript·spark·django