Linux离线部署Ollama并搭建大模型

Linux离线部署Ollama并搭建大模型

目录

一、背景

二、资源准备

2.1 Ollama下载

2.1.1 官网下载

2.1.2 Github下载

2.2 大模型下载

三、离线部署Ollama

四、Ollama运行大模型

五、相关问题

5.1 升级 libstdc++

5.2 设置对话模板

5.3 设置环境变量


一、背景

为一部脱离公网的x86架构的Linux服务器搭建Ollama,并且运行大模型

二、资源准备

2.1 Ollama下载

2.1.1 官网下载

【下载地址】Download Ollama on Linux

如果服务器可以连接公网,可以走指令下载

2.1.2 Github下载

【下载地址】https://github.com/ollama/ollama/releases/

本文下载的是0.7.0版本的Ollama

通过 github 下载会非常慢,这里可以走代理

代理GitHub的下载地址:虾壳 - GitHub下载加速网站 GitHub Proxy加速器

复制下载地址,然后在上述代理网站上进行下载

2.2 大模型下载

Ollama 是支持GGUF模型导入的,GGUF模型可以在 模型库首页 · 魔搭社区 下载。

按照需要下载

三、离线部署Ollama

将 2.1.2 下载的 tgz 压缩包上传到 Linux 服务器中。(本文上传的路径为:/data/ollama)

执行如下解压命令,将压缩包在 usr 目录下解压。解压之后会在 /usr/bin 目录下创建 ollama 文件

sudo tar -C /usr -zxvf ollama-linux-amd64.tgz

在 /usr/bin 目录下执行如下命令,即可启动ollama

ollama serve
第一次启动,可能会报出:Couldn't find '/root/.ollama/id_ed25519'. Generating new private key。但这个信息通常不是错误,而是一个正常的启动信息。它表示 OLLama 在首次启动时,发现没有用于内部通信的加密密钥,正在自动创建。这个生成过程是安全的,并且是 OLLama 安装后第一次运行的正常步骤。

但是通过 ollama serve 启动,虽然日志显示启动成功,但其实服务已经停止,因为通过 【ollama list】命令等的方式验证均失败。后面换了一种启动命令,能正常持续启动。

# 第一种 nohup ollama serve > /data/ollama/ollama_full.log 2>&1 & # 第二种 ollama serve &

此外若没有配置环境变量,让ollama监控所有的IP,则默认只允许通过 127.0.0.1 或者 localhost 访问。具体看 5.3

检验是否启动成功

(1)执行命令:测试连接

curl http://localhost:11434/api/tags

如果返回一个 JSON 格式的响应(即使为空 {"models":[]}),也说明服务运行正常

(2)执行命令:查看版本

curl http://127.0.0.1:11434/api/version

(3)执行命令:查看进程信息

curl http://127.0.0.1:11434/api/ps

(4)也可检验端口占用情况  

sudo lsof -i :11434

(5)ps aux | grep ollama

(6)ps aux | grep ollama | grep -v grep

停止服务

通过 【ps aux | grep ollama】 或者 【ps aux | grep ollama | grep -v grep】 获取进程号,然后 kill 即可

四、Ollama运行大模型

将 2.2 下载的 GGUF 模型(本文下载的模型为:Qwen3-1.7B-Q8_0.gguf)上传到 Linux 服务器上,本文还是上传到 /data/ollama 目录下。

在当前目录下(/data/ollama)通过命令创建一个空文件

touch qwen3-1.7b.modelfile

文件内容如下(但仅仅这样是不够的,还要设置相关的参数以及对话模板,否则会出现答非所问或者重复回答的效果。具体看5.2):

FROM ./Qwen3-1.7B-Q8_0.gguf

然后在当前目录下执行如下命令:( -f 前面的 qwen3-1.7b 是你将要部署到 ollama 的模型名称,可以自定义)

ollama create qwen3-1.7b -f ./qwen3-1.7b.modelfile

出现如下即成功:

通过命令 【ollama list】可以看到刚刚部署的大模型

通过命令 【ollama run qwen3-1.7b:latest】 启动大模型

五、相关问题

5.1 升级 libstdc++

问题背景:ollama 启动时,会报错:ollama: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.25' not found (required by ollama)。这是因为当前的 Linux 服务器的 libstdc++ 库版本过低,因此需要升级。但是服务器是离线的,所以本文提供的方式是手动下载高版本的 libstdc++ ,然后上传到服务器上并使用

步骤一:libstdc++下载

通过如下地址下载,直接在 window 浏览器上执行即可

https://mirrors.aliyun.com/ubuntu/pool/main/g/gcc-10/libstdc++6_10.5.0-1ubuntu1~20.04_amd64.deb
步骤二:解压并提取 libstdc++.so.6.0.28 文件

下载成功后通过 7-zip 等工具解压下载文件,

继续解压 data.tar,然后就可以拿到 data\usr\lib\x86_64-linux-gnu 目录下的 libstdc++.so.6.0.28 文件

步骤三:创建传输包

在 window 上新建文件夹 ollama-lib,并将步骤二提取的libstdc++.so.6.0.28 文件放入。

准备安装脚本 install.sh,用来在 Linux 上安装高版本的libstdc++。也一并放入到 ollama-lib 文件夹中

install.sh 文件内容如下:

#!/bin/bash LIB_DIR="/opt/ollama-libs" # 定义变量,指定库文件安装路径 mkdir -p $LIB_DIR # 递归创建目录, -p 参数确保如果父目录不存在也一并创建 cp libstdc++.so.6.0.28 $LIB_DIR/ # 将当前目录下的 libstdc++.so.6.0.28 文件复制到 /opt/ollama-libs/ cd $LIB_DIR # 切换到库目录 ln -sf libstdc++.so.6.0.28 libstdc++.so.6 # 创建符号链接:libstdc++.so.6 → libstdc++.so.6.0.28 -s 创建符号链接,-f 强制创建(覆盖已存在的) echo "export LD_LIBRARY_PATH=$LIB_DIR:\$LD_LIBRARY_PATH" >> ~/.bashrc # 将环境变量设置追加到用户的 ~/.bashrc 文件;LD_LIBRARY_PATH 告诉系统在哪些目录中查找共享库;$LIB_DIR:$LD_LIBRARY_PATH 表示优先在自定义目录中查找 source ~/.bashrc # 重新加载 ~/.bashrc 使环境变量立即生效 echo "安装完成!"

将文件夹进行压缩

步骤四:传输到离线 Linux 服务器

本文还是上传到 /data/ollama 目录下并解压

步骤五:在 Linux 服务器上安装

在 /data/ollama/ollama-lib 目录下执行命令:

chmod +x install.sh bash install.sh # 验证 strings /opt/ollama-libs/libstdc++.so.6 | grep GLIBCXX_3.4.25

执行后输出 “安装完成”,即可解决问题。

注,这里执行脚本时可能会报错:cp: cannot create regular file '/opt/ollama-libs'$'\r''/'$'\r': No such file or directory。这是因为当前的 sh 脚本是在 window 下编辑的,而Linux与window的换行符是不一样的,因此会报错。解决方法:执行命令  sed -i 's/\r$//' install.sh  即可解决

5.2 设置对话模板

问题背景:只是简单的将GGUF模型部署到ollama中,对话时会出现对话乱答,并且一直重复回答的情况。

没有对话模板的情况

第四大点的 qwen3-1.7b.modelfile 文件如下:

FROM ./Qwen3-1.7B-Q8_0.gguf # 即使再加上下面的参数,也是会出现答非所问、重复回答的效果 PARAMETER temperature 0.7 PARAMETER top_p 0.8 PARAMETER repeat_penalty 1.05 PARAMETER top_k 20

演示截图:

设置对话模板的情况

第四大点的 qwen3-1.7b.modelfile 文件修改如下:

FROM ./Qwen3-1.7B-Q8_0.gguf # set the temperature to 1 [higher is more creative, lower is more coherent] PARAMETER temperature 0.7 PARAMETER top_p 0.8 PARAMETER repeat_penalty 1.05 PARAMETER top_k 20 TEMPLATE """{{ if .Messages }} {{- if or .System .Tools }}<|im_start|>system {{ .System }} {{- if .Tools }} # Tools You are provided with function signatures within <tools></tools> XML tags: <tools>{{- range .Tools }} {"type": "function", "function": {{ .Function }}}{{- end }} </tools> For each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags: <tool_call> {"name": <function-name>, "arguments": <args-json-object>} </tool_call> {{- end }}<|im_end|> {{ end }} {{- range $i, $_ := .Messages }} {{- $last := eq (len (slice $.Messages $i)) 1 -}} {{- if eq .Role "user" }}<|im_start|>user {{ .Content }}<|im_end|> {{ else if eq .Role "assistant" }}<|im_start|>assistant {{ if .Content }}{{ .Content }} {{- else if .ToolCalls }}<tool_call> {{ range .ToolCalls }}{"name": "{{ .Function.Name }}", "arguments": {{ .Function.Arguments }}} {{ end }}</tool_call> {{- end }}{{ if not $last }}<|im_end|> {{ end }} {{- else if eq .Role "tool" }}<|im_start|>user <tool_response> {{ .Content }} </tool_response><|im_end|> {{ end }} {{- if and (ne .Role "assistant") $last }}<|im_start|>assistant {{ end }} {{- end }} {{- else }} {{- if .System }}<|im_start|>system {{ .System }}<|im_end|> {{ end }}{{ if .Prompt }}<|im_start|>user {{ .Prompt }}<|im_end|> {{ end }}<|im_start|>assistant {{ end }}{{ .Response }}{{ if .Response }}<|im_end|>{{ end }}""" # set the system message SYSTEM """You are Qwen, created by Alibaba Cloud. You are a helpful assistant."""

演示截图:可以看到回答的很正确,而且没有回答其他多余的信息

对话模板获取:

若所下载的模型官方有提供,则直接用即可。如下图

点击 ollama文档,则可以看到官方提供的具体文件内容

5.3 设置环境变量

问题背景:通过 curl http://127.0.0.1:11434/api/version 能成功访问,但是通过 curl http://10.163.180.62:11434/api/version 则访问失败,显示 Connection refused

没有设置环境变量

没有设置环境变量,直接启动ollama并访问

设置环境变量

通过命令启动时,先设置环境变量,然后再启动

(但通过 export 只是在当前会话生效,只是临时方案,所以每次启动时,都要先手动执行 export 命令。当然也可以持久化进行配置)

# 配置环境变量 export OLLAMA_HOST 0.0.0.0 # 启动 ollama nohup ollama serve > /data/ollama/ollama_full.log 2>&1 &

此外,如果通过 systemctl 启动,则可以在 service 文件内显示配置环境变量

[Service] Environment="OLLAMA_HOST=0.0.0.0"

Read more

【Linux】命令为桥,存在为岸,穿越虚拟世界的哲学之道

【Linux】命令为桥,存在为岸,穿越虚拟世界的哲学之道

文章目录 * Linux基础入门:探索操作系统的内核与命令 * 一、Linux背景与发展历史 * 1.1 Linux的起源与发展 * 1.2 Linux与Windows的对比 * 二、Linux的常用命令 * 2.1 ls命令 - "List"(列出文件) * 2.2 pwd命令 - "Print Working Directory"(打印当前工作目录) * 2.3 cd命令 - "Change Directory"(更改目录) * 2.4 touch命令 - "Create or Update file"

By Ne0inhk
【Linux】—简单实现一个shell(myshell)

【Linux】—简单实现一个shell(myshell)

大家好呀,我是残念,希望在你看完之后,能对你有所帮助,有什么不足请指正!共同学习交流哦! 本文由:残念ing原创ZEEKLOG首发,如需要转载请通知 个人主页:残念ing-ZEEKLOG博客,欢迎各位→点赞👍 + 收藏⭐️ + 留言📝 📣系列专栏:[残念ing 的【Linux】系列专栏——ZEEKLOG博客] 实现一个自己的shell * 1 步骤简化 * 1. 获取并且打印命令行提示符 * 2. 获取用户命令 * 3. 分析命令(解析命令) * 4. 执行命令 * 5 补充: * 5.1 解决需要shell自己执行的内建命令 * 5.2 环境变量是需要自己去维护的,所以获取当前的路径不能去环境变量里面获取,要直接从系统里面获取 * 5.3 作为一个shell,获取环境变量应该从系统的配置类,我们几天就直接从父shell中获取环境变量 * 怎么保证接下来我们的子进程使用myshell的环境变量 * 总结:

By Ne0inhk

Ubuntu_24.04 安装OpenClaw教程

认识OpenClaw 官网:https://openclaw.ai/ https://docs.openclaw.ai/start/getting-started 安装OpenClaw curl -fsSL https://openclaw.ai/install.sh | bash 安装完成 配置命令 在终端输入: openclaw onboard 选择Yes 选择QuickStart 因为前面配置过,所以提示是否用原来的配置信息,可以使用Reset进行重置 选择模型: 根据自己的需要进行选择, 这里要特别注意一个问题,openClaw对上下文有要求,默认最小是16000Token,要不然后面安装的时候会报下图的错误信息 选择Qwen一直在waiting 如果要使用其他的模型,选择Custom Provider 如果选择DeepSeek,baseURL输入:https://api.deepseek.com/v1 然后输入API-KEY:sk-******* model输入:

By Ne0inhk
Flutter 三方库 http_cache_hive_store 的鸿蒙化适配指南 - 在鸿蒙系统上构建极致、透明、工业级的 HTTP 二级缓存与 Hive 数据库持久化联动引擎

Flutter 三方库 http_cache_hive_store 的鸿蒙化适配指南 - 在鸿蒙系统上构建极致、透明、工业级的 HTTP 二级缓存与 Hive 数据库持久化联动引擎

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 http_cache_hive_store 的鸿蒙化适配指南 - 在鸿蒙系统上构建极致、透明、工业级的 HTTP 二级缓存与 Hive 数据库持久化联动引擎 在鸿蒙(OpenHarmony)系统的端云一体化网络架构、针对高频 API 的请求压实(Debounce)或者是需要实现“秒开离线”的网络应用场景中,如何让 http 或 dio 库自动具备缓存能力,并将缓存物理落地到极速的 Hive 非关系型数据库中?http_cache_hive_store 为开发者提供了一套工业级的、基于 Hive 的网络响应持久化缓存方案。本文将深入实战其在鸿蒙端网络响应加速中的应用。 前言 什么是 HTTP

By Ne0inhk