基于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 主力工作
相关推荐
清水白石0083 分钟前
《为什么说 deque 是 Python 滑动窗口的“隐藏神器”?深入解析双端队列的高效之道》
开发语言·python
一个人旅程~4 分钟前
Dell n4020双系统分区步骤和linux优化操作
linux·windows·电脑
kjkdd6 分钟前
5. LangChain设计理念和发展历程
python·语言模型·langchain·ai编程
忆~遂愿7 分钟前
CANN metadef 深度解析:动态形状元数据管理、图编译器接口规范与序列化执行机制
大数据·linux
予枫的编程笔记8 分钟前
【Linux入门篇】Linux文件操作不用记满屏命令,掌握touch/cp/mv核心用法就够了
linux·tar·linux命令·tail·cat·linux文件管理·linux新手教程
摘星编程12 分钟前
CANN ops-nn 激活函数算子全解析:从ReLU到GELU的演进与实现
python
love530love27 分钟前
【高阶编译】Windows 环境下强制编译 Flash Attention:绕过 CUDA 版本不匹配高阶指南
人工智能·windows·python·flash_attn·flash-attn·flash-attention·定制编译
DeniuHe27 分钟前
Pytorch中的众数
人工智能·pytorch·python
新缸中之脑28 分钟前
开发AI代理必备的8个Python 库
开发语言·人工智能·python
WKP941829 分钟前
照片生成心形工具【免费】【下载即可使用】
python