在Linux系统下使用普通用户安装Ollama并部署指定模型的完整步骤,所有操作都在用户目录下进行,无需root权限。
对于个人或小团队,还处在研究探索阶段,资源和权限隔离的情况下,强烈建议参照本教程。
一、环境准备
1.1 检查NVIDIA驱动和CUDA
# 检查显卡驱动
nvidia-smi
# 检查CUDA版本(RTX 5090需要CUDA 12.0+)
nvcc --version
对于使用 Ollama 部署模型的核心目标,CUDA Toolkit 不是必须的;
nvidia-smi信息来看,系统已安装 NVIDIA 驱动程序 580.142,其中包含 CUDA 驱动 13.0。这是 GPU 能够被识别和用于计算(如模型推理)的基础运行时环境。Ollama 在运行时依赖的就是这个驱动层。
nvcc是什么:nvcc是 CUDA 编译器,是 CUDA Toolkit 的一部分。它主要用于编译基于 CUDA 的 C/C++ 程序(例如从源码编译某些 AI 框架或库)。对于直接运行已编译好的 Ollama 二进制文件或 Python 包,并不需要 nvcc。
1.2.1 从源码安装Python 3.12
创建并进入一个临时目录:
shell
mkdir ~/python-build
cd ~/python-build
下载 Python 3.12 源码:
shell
wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tgz
tar -xzf Python-3.12.0.tgz
cd Python-3.12.0
配置并指定安装路径到用户目录:
shell
./configure --enable-optimizations --prefix=$HOME/.local/python3.12
-
--prefix=$HOME/.local/python3.12是关键,它将安装目录设置为你的用户目录下的.local/python3.12。 -
--enable-optimizations是可选的,它会进行一些优化,但会使编译时间变长。如果需要可以去掉。
编译并安装:
shell
make -j$(nproc)
make altinstall
- 使用
altinstall而不是install,避免覆盖任何现有的python命令。
将安装目录添加到 PATH:
安装完成后,Python 3.12 的可执行文件位于 $HOME/.local/python3.12/bin。你需要将这个目录添加到你的 PATH环境变量中。对于 bash 用户(通常默认) ,编辑 ~/.bashrc文件:
shell
echo 'export PATH="$HOME/.local/python3.12/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
验证安装:
shell
python3.12 --version
应该输出 Python 3.12.x。
1.2.2 不想折腾的话直接用 Miniconda3
自动解决系统库依赖(如SQLite)------Conda 会在环境内安装预编译好的、包含所有必要依赖的 Python 和库,比Anaconda3轻量。
1.安装并初始化 Miniconda3
shell
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -b -p $HOME/miniconda3
$HOME/miniconda3/bin/conda init bash
# 然后关闭并重新打开终端,或运行 source ~/.bashrc
2.创建并使用一个 Conda 环境
shell
# 创建一个名为 `myenv` 且包含 Python 3.12 的环境
conda create -n myenv python=3.12
# 激活环境
conda activate myenv
# 验证 - 此时 python 命令指向 Conda 环境内的 3.12,且 sqlite3 可用
python -c "import sqlite3; print(sqlite3.sqlite_version)"
# 安装其他包,如 pandas
conda install pandas
3.接受Anaconda的官方软件仓库服务条款
使用 conda 命令创建虚拟环境时出现以下提示:
CondaToSNonInteractiveError: Terms of Service have not been accepted for the following channels. Please accept or remove them before proceeding: - https://repo.anaconda.com/pkgs/main - https://repo.anaconda.com/pkgs/r To accept these channels' Terms of Service, run the following commands:
...
这是在使用Anaconda的官方软件仓库 (repo.anaconda.com/pkgs/main和 repo.anaconda.com/pkgs/r) 时,自2024年底起实施的新政策。为了从这些官方渠道安装软件包,您需要首次使用时手动确认并接受其最终用户许可协议。
按照错误提示,在终端中运行以下两条命令来接受相应Channel的条款:
shell
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r
1.3 检查系统依赖
bash
# 检查基础工具
which curl tar gcc make
# 如果缺少,请使用包管理器安装(需要sudo权限)
# 如无法使用sudo,可跳过,Ollama二进制版不需要编译
1.4 创建用户目录结构
shell
# 在用户目录下创建专用目录
mkdir -p ~/apps/ollama
# 模型下载到挂载目录
mkdir -p /mnt/sda/farmers/a/apps/ollama
mkdir -p /mnt/sda/farmers/a/apps/ollama/models
# 手动运行 ollama可以指定存储日志到这里
mkdir -p /mnt/sda/farmers/a/apps/ollama/logs
# 比如:将标准输出和错误都追加到指定日志文件
ollama serve >> /mnt/sda/farmers/a/apps/ollama/logs/ollama.log 2>&1 &
二、安装Ollama
2.1 下载并安装Ollama
shell
cd ~/apps/ollama
# 方法1.使用官方 install.sh 脚本,一键安装,但有些沙雕环境不让全局安装,只能用方法2了
curl -fsSL https://ollama.com/install.sh | sh
# 方法2.下载标准版(已包含 CUDA 支持)
wget https://github.com/ollama/ollama/releases/download/v0.23.2/ollama-linux-amd64.tar.zst
# 解压到指定目录
mkdir -p ~/app/ollama
tar --zstd -xvf ollama-linux-amd64.tar.zst -C ~/app/ollama
如果各种办法下载不了 ollama 二进制文件的话,大概率是网络有问题,用官方脚本也够呛能安装,直接从别的机器下载,然后传上去。
2.3 配置环境变量
# 编辑bash配置文件
echo 'export PATH="$HOME/apps/ollama/bin:$PATH"' >> ~/.bashrc
echo 'export OLLAMA_MODELS="$HOME/apps/ollama/models"' >> ~/.bashrc
echo 'export OLLAMA_HOST="127.0.0.1:11434"' >> ~/.bashrc
# 如果使用zsh
echo 'export PATH="$HOME/apps/ollama/bin:$PATH"' >> ~/.zshrc
echo 'export OLLAMA_MODELS="$HOME/apps/ollama/models"' >> ~/.zshrc
echo 'export OLLAMA_HOST="127.0.0.1:11434"' >> ~/.zshrc
# 使配置生效
source ~/.bashrc # 或 source ~/.zshrc
# 验证安装
ollama --version
2.4 ~/.bashrc 中ollama的完整配置
shell
# 修改或添加以下行
export PATH="$HOME/apps/ollama/bin:$PATH"
export OLLAMA_MODELS="/mnt/sda/farmers/a/apps/ollama/models"
export OLLAMA_HOST="127.0.0.1:11434"
# 可选:开启调试日志(需要时启用)
# export OLLAMA_DEBUG=1
# 可选:设置日志级别
# export OLLAMA_LOG_LEVEL="info"
# 可选:设置模型在内存中的保留时间(提高响应速度)
# export OLLAMA_KEEP_ALIVE="24h"
# 使配置生效
source ~/.bashrc # 或 source ~/.zshrc
# 验证
which ollama
# 应该输出:/mnt/sda/farmers/a/apps/ollama/bin/ollama
# 验证安装
ollama --version
2.5 关于 Ollama 日志
情况一:以后台服务方式运行(例如通过 systemd)
这是生产环境推荐的方式,日志由系统服务管理器(如 journald)统一收集。
shell
# 查看所有日志(实时滚动)
journalctl -u ollama -f
# 查看最近100行日志
journalctl -u ollama -n 100
# 查看指定时间段的日志
journalctl -u ollama --since "2024-01-01 00:00:00" --until "2024-01-01 12:00:00"
当然,在 systemd配置中也能设置输出日志到哪里,详见:三、配置用户级systemd服务
情况二:在终端前台直接运行
如果在终端中直接执行 ollama serve,日志会直接输出到当前终端。
情况三:在后台手动启动
如果使用 ollama serve &或 nohup等方式在后台启动,日志默认会输出到标准输出(stdout)和标准错误(stderr)。为了不丢失日志,通常会在启动时进行重定向。
shell
# 将标准输出和错误都追加到指定日志文件
ollama serve >> /mnt/sda/farmers/a/apps/ollama/logs/ollama.log 2>&1 &
# 使用 `tail`、`cat`等命令查看您指定的日志文件
tail -f /mnt/sda/farmers/a/apps/ollama/logs/ollama.log
三、配置用户级systemd服务(保持后台运行)
3.1 启用用户级systemd
# 检查用户级systemd是否可用
systemctl --user status
# 如果报错,启用linger功能(允许用户服务在未登录时运行)
loginctl enable-linger $USER
# 验证
loginctl show-user $USER | grep Linger
3.2 创建systemd服务文件
### 第一步:创建 Systemd 服务配置文件
您需要创建一个用户级的 systemd 服务文件。这个文件定义了服务的启动、停止、重启、日志等行为。
# 1. 创建 systemd 用户服务配置目录(如果不存在)
mkdir -p ~/.config/systemd/user/
# 2. 创建并编辑服务配置文件
cat > ~/.config/systemd/user/ollama.service << 'EOF'
[Unit]
Description=Ollama Service (Local User)
Documentation=https://github.com/ollama/ollama
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
# --- 核心配置:执行命令和关键环境变量 ---
# 您的 Ollama 可执行文件路径
ExecStart=%h/apps/ollama/bin/ollama serve
# 工作目录(建议设置为模型所在目录的上级)
WorkingDirectory=/mnt/sda/farmers/a/apps/ollama
# 最重要的环境变量:指定模型存储路径到您的挂载盘
Environment=OLLAMA_MODELS=/mnt/sda/farmers/a/apps/ollama/models
Environment=OLLAMA_HOST=127.0.0.1:11434
Environment=OLLAMA_ORIGINS=*
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# 可选的 GPU 优化环境变量(根据您的 RTX 5090 调整)
Environment=OLLAMA_NUM_GPU=1
# 设置日志输出到文件,方便排查
StandardOutput=file:/mnt/sda/farmers/a/apps/ollama/logs/ollama.stdout.log
StandardError=file:/mnt/sda/farmers/a/apps/ollama/logs/ollama.stderr.log
# 重启策略:服务异常退出时自动重启
Restart=on-failure
RestartSec=5s
# 资源限制(可选,防止服务占用过多资源)
# LimitNOFILE=65536
# LimitNPROC=infinity
# LimitMEMLOCK=infinity
[Install]
WantedBy=default.target
EOF
说明:
- 此配置将服务限定在当前用户 下运行,无需
sudo。- 关键设置
OLLAMA_MODELS环境变量,确保模型下载到指定的挂载盘路径。- 将标准输出和错误日志重定向到文件,便于日后排查问题。
第二步:创建日志目录并赋予权限
服务配置中指定了日志输出路径,需要提前创建该目录。
shell
# 创建日志目录
mkdir -p /mnt/sda/farmers/a/apps/ollama/logs
# 确保当前用户对该目录有写入权限
chmod 755 /mnt/sda/farmers/a/apps/ollama/logs
第三步:创建管理 Systemd 服务的命令脚本
创建一个便捷的管理脚本,包含启动、停止、状态查看、日志追踪等常用操作。
shell
# 创建管理脚本
cat > ~/apps/ollama/ollama-service-manager.sh << 'EOF'
#!/bin/bash
SERVICE_NAME="ollama"
USER_SYSTEMD_DIR="$HOME/.config/systemd/user"
LOG_DIR="/mnt/sda/farmers/a/apps/ollama/logs"
case "$1" in
start)
systemctl --user start $SERVICE_NAME
echo "服务启动命令已发送。查看状态请运行: $0 status"
;;
stop)
systemctl --user stop $SERVICE_NAME
echo "服务停止命令已发送。"
;;
restart)
systemctl --user restart $SERVICE_NAME
echo "服务重启命令已发送。"
;;
status)
systemctl --user status $SERVICE_NAME
;;
enable)
systemctl --user enable $SERVICE_NAME
echo "服务已设置为开机自启(用户级)。"
;;
disable)
systemctl --user disable $SERVICE_NAME
echo "服务开机自启已禁用。"
;;
logs)
# 查看实时日志
tail -f $LOG_DIR/ollama.stdout.log $LOG_DIR/ollama.stderr.log
;;
logs-stdout)
tail -50 $LOG_DIR/ollama.stdout.log
;;
logs-stderr)
tail -50 $LOG_DIR/ollama.stderr.log
;;
reload)
# 重载 systemd 配置(修改服务文件后需要执行)
systemctl --user daemon-reload
echo "服务配置已重载。"
;;
*)
echo "用法: $0 {start|stop|restart|status|enable|disable|logs|logs-stdout|logs-stderr|reload}"
echo ""
echo "命令说明:"
echo " start : 启动 Ollama 服务"
echo " stop : 停止服务"
echo " restart : 重启服务"
echo " status : 查看服务运行状态"
echo " enable : 启用开机自启(用户登录后自动启动)"
echo " disable : 禁用开机自启"
echo " logs : 实时追踪所有日志"
echo " logs-stdout: 查看最近的标准输出日志"
echo " logs-stderr: 查看最近的错误日志"
echo " reload : 重载服务配置(修改 .service 文件后必须执行)"
exit 1
;;
esac
EOF
# 赋予管理脚本执行权限
chmod +x ~/apps/ollama/ollama-service-manager.sh
3.3 启动并启用服务
1.使用systemctl管理 Ollama 服务。
shell
# 1. 重新加载 systemd 配置,使其识别新的服务文件
systemctl --user daemon-reload
# 2. 启用开机自动启动(可选,推荐)
# 此功能允许在您登录用户账户后自动启动服务
systemctl --user enable ollama
# 3. 立即启动服务
systemctl --user start ollama
# 4. 检查服务状态
systemctl --user status ollama
预期输出 :您应该看到状态显示为 active (running),并且会包含进程 ID 和最近日志片段。
2.使用管理 Systemd 服务的命令脚本
shell
~/apps/ollama/ollama-service-manager.sh start
~/apps/ollama/ollama-service-manager.sh stop
~/apps/ollama/ollama-service-manager.sh restart
~/apps/ollama/ollama-service-manager.sh status
~/apps/ollama/ollama-service-manager.sh enable
...
四、配置Ollama的Python 3.12虚拟环境
创建虚拟环境
shell
# 创建虚拟环境
python3.12 -m venv ~/apps/ollama/venv
# 激活虚拟环境
source ~/apps/ollama/venv/bin/activate
# 安装Ollama Python客户端
pip install ollama
pip install requests
# 创建一个可以检查当前目录并自动激活虚拟环境的脚本
cat > ~/apps/ollama/activate.sh << 'EOF'
#!/bin/bash
# 激活Ollama虚拟环境
if [ -f ~/apps/ollama/venv/bin/activate ]; then
echo "正在激活Ollama虚拟环境..."
source ~/apps/ollama/venv/bin/activate
echo "✓ Python虚拟环境已激活"
echo " Python版本: $(python --version)"
OLLAMA_VERSION=$(pip show ollama 2>/dev/null | grep Version | awk '{print $2}')
if [ -n "$OLLAMA_VERSION" ]; then
echo " Ollama客户端版本: $OLLAMA_VERSION"
else
echo " Ollama客户端未安装"
fi
else
echo "错误: 虚拟环境不存在"
echo "请先创建虚拟环境: python -m venv ~/apps/ollama/venv"
exit 1
fi
EOF
chmod +x ~/apps/ollama/activate.sh
# 然后在 `.bashrc`或 `.zshrc`中添加:
alias ollama-activate="source ~/apps/ollama/activate.sh"
# 否则需要用source加载,因为用sh 执行activate.sh命令会新建子进程
本步骤不是必须的,比如只是运行模型服务供其他应用调用;
如果要开发 Python AI 应用 → 需要 Python 客户端;
五、验证Ollama安装
5.1 检查Ollama服务
shell
# 1. 检查 API 端点是否响应
curl http://localhost:11434/api/tags
# 正常响应应为:{"models":[]} (初始状态模型列表为空)
# 2. 检查版本信息
curl http://localhost:11434/api/version
# 会返回 Ollama 的版本信息
# 3. 通过便捷脚本查看日志,确认无报错
~/apps/ollama/ollama-service-manager.sh logs-stderr
5.2 测试GPU识别
shell
# ollama run命令后查看运行中的模型,PROCESSOR列包含GPU信息→ GPU 加速已启用
ollama ps
# 输出如下
NAME ID SIZE PROCESSOR CONTEXT UNTIL
qwen3.5-9b-deepseek:q4 1353482d3919 7.5 GB 100% GPU 8192 3 minutes from now
# 或者观察 GPU 利用率
nvidia-smi
5.3 设置用户级 systemd 守护进程(重要,实现真正后台运行)
默认情况下,用户服务会在您退出登录时停止。若希望服务在后台持续运行 (即使您退出 SSH 登录),需要启用 linger。
如果没有sudo权限请忽略。
shell
# 启用 linger 功能
sudo loginctl enable-linger $USER
# 验证
loginctl show-user $USER | grep Linger
# 应该显示:Linger=yes
# 之后,您启用(enable)的服务将会在系统启动后自动运行,无需用户保持登录。
六、下载和运行指定模型
6.1 拉取模型(使用INT4量化版节省显存)
shell
# 激活Python虚拟环境
# source /mnt/sda/farmers/a/apps/ollama/venv/bin/activate
# 使用上面创建的快捷激活脚本
/mnt/sda/farmers/a/apps/ollama/activate_venv.sh
# 方法1:使用Ollama命令行
/mnt/sda/farmers/a/apps/ollama/ollama pull qwen3:14b
/mnt/sda/farmers/a/apps/ollama/ollama pull yi:14b
# BAGEL(字节跳动多模态模型)
# 注意:Ollama官方库可能没有BAGEL,需要自定义Modelfile,配置见下面的自定义模型配置
ollama pull llava:14b # 可以先使用类似的视觉模型
# 方法2:使用Python客户端
python -c "
import ollama
models = ['qwen3:14b', 'yi:14b', 'bagel', 'helios']
for model in models:
print(f'正在拉取 {model}...')
ollama.pull(model)
print(f'{model} 拉取完成')
"
# 如果上述不可用,尝试其他标签
~/apps/ollama/ollama pull qwen2.5:14b-instruct-q4_K_M
~/apps/ollama/ollama pull yi:14b-chat-q4_K_M
6.2 自定义模型配置(如官方库没有)
如果Ollama官方库没有或者网络不通,需要手动导入:
1.创建Modelfile
shell
# 创建 Modelfile
cat > /mnt/sda/farmers/a/apps/ollama/Modelfile.qwen3.5-9b-deepseek-q4 << 'EOF'
FROM /mnt/sda/farmers/a/apps/ollama/models/Qwen3.5-9B-DeepSeek-V4-Flash-Q4_K_M.gguf
# 模型参数设置
PARAMETER num_ctx 8192
PARAMETER num_batch 512
# 模板设置(Qwen 通常使用 chatml 格式)
TEMPLATE """{{- if .System }}<|im_start|>system
{{ .System }}<|im_end|>
{{- end }}
{{- if .Prompt }}<|im_start|>user
{{ .Prompt }}<|im_end|>
{{- end }}
<|im_start|>assistant
{{ .Response }}<|im_end|>"""
# 系统提示词
SYSTEM """你是Qwen3.5-9B-DeepSeek-V4-Flash,一个高效推理模型,使用来自 DeepSeek-V4 的高质量数据进行蒸馏得到"""
# 停止标记
PARAMETER stop "<|im_end|>"
PARAMETER stop "<|im_start|>"
EOF
2.导入模型到 Ollama
使用 ollama create命令将 Modelfile 导入为可用的模型:
shell
# 确保 Ollama 服务正在运行
sh ~/apps/ollama/ollama-service-manager.sh status
# 导入 Qwen3.5-DeepSeek 模型
ollama create qwen3.5-9b-deepseek:q4 -f /mnt/sda/farmers/a/apps/ollama/Modelfile.qwen3.5-9b-deepseek-q4
# 导入其他模型
ollama create xxxx -f /mnt/sda/farmers/a/apps/ollama/Modelfile.xxxx
导入过程说明:
- 每个命令会读取对应的 Modelfile,将 GGUF 文件注册到 Ollama 的模型库中
- 这个过程不会重新下载模型,只是建立索引和配置
- 导入时间取决于文件大小和系统性能,通常几分钟内完成
6.3 运行模型测试
shell
# 查看所有可用模型
ollama list
# 查看模型详细信息
ollama show qwen3.5-9b-deepseek:q4
# 测试Qwen3-14B
ollama run qwen3.5-9b-deepseek:q4 "你好,用一句话介绍下深圳"
# 在Python虚拟环境中测试
python -c "
import ollama
response = ollama.chat(model='qwen3.5-deepseek:9B', messages=[
{'role': 'user', 'content': '你好,用一句话介绍下深圳'}
])
print(response['message']['content'])
"
七、故障排除
7.1 常见问题解决
# 1. 端口被占用
# 修改OLLAMA_HOST环境变量
export OLLAMA_HOST="127.0.0.1:11435"
# 2. 权限问题
chmod 755 ~/apps/ollama
chmod 644 ~/apps/ollama/logs/*.log
# 3. 模型下载失败
# 设置代理(如果需要)
export HTTP_PROXY="http://your-proxy:port"
export HTTPS_PROXY="http://your-proxy:port"
# 4. GPU内存不足
# 查看显存使用
nvidia-smi
# 卸载不用的模型
ollama rm 模型名称
# 使用量化版本
/mnt/sda/farmers/a/apps/ollama/ollama pull qwen3:14b-q4_K_M
# 5. 模型下载慢
# 具体见 6.2 自定义模型配置(如官方库没有)
# 使用 modelscope 下载模型
pip install modelscope
# 下载单个文件到指定本地文件夹(以下载README.md到当前路径下"dir"目录为例)
modelscope download --model Jackrong/Qwen3.5-9B-DeepSeek-V4-Flash-GGUF README.md --local_dir ./dir
7.2 查看详细日志
# 查看服务日志
journalctl --user -u ollama -f
# 查看应用日志
tail -f ~/apps/ollama/logs/ollama.log
安装完成验证清单
-
Ollama二进制文件已下载到
~/apps/ollama/ -
环境变量已配置(
~/.bashrc或~/.zshrc) -
用户级systemd服务已配置并运行
-
Python 3.12虚拟环境已创建并激活
-
Ollama Python客户端已安装
-
模型已开始下载(Qwen3-14B、Yi-1.5-14B、BAGEL、Helios)
-
GPU识别正常
-
可以通过
curl http://localhost:11434/api/tags访问API
按照以上步骤,您可以在非root用户环境下完整部署Ollama,所有文件都存储在用户目录中,并使用Python 3.12虚拟环境进行管理。