在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
创建并进入一个临时目录:
mkdir ~/python-buildcd ~/python-build
下载 Python 3.12 源码:
wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tgztar -xzf Python-3.12.0.tgzcd Python-3.12.0
配置并指定安装路径到用户目录:
./configure --enable-optimizations --prefix=$HOME/.local/python3.12
--prefix=$HOME/.local/python3.12是关键,它将安装目录设置为你的用户目录下的.local/python3.12。
--enable-optimizations是可选的,它会进行一些优化,但会使编译时间变长。如果需要可以去掉。
编译并安装:
make -j$(nproc)make altinstall
- 使用
altinstall而不是 install,避免覆盖任何现有的 python命令。
将安装目录添加到 PATH:
安装完成后,Python 3.12 的可执行文件位于 $HOME/.local/python3.12/bin。你需要将这个目录添加到你的 PATH环境变量中。对于 bash 用户(通常默认),编辑 ~/.bashrc文件:
echo 'export PATH="$HOME/.local/python3.12/bin:$PATH"' >> ~/.bashrcsource ~/.bashrc
验证安装:
python3.12 --version
应该输出 Python 3.12.x。
1.2.2 不想折腾的话直接用 Miniconda3
自动解决系统库依赖(如SQLite)——Conda 会在环境内安装预编译好的、包含所有必要依赖的 Python 和库,比Anaconda3轻量。
1.安装并初始化 Miniconda3
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.shbash Miniconda3-latest-Linux-x86_64.sh -b -p $HOME/miniconda3$HOME/miniconda3/bin/conda init bash# 然后关闭并重新打开终端,或运行 source ~/.bashrc
2.创建并使用一个 Conda 环境
# 创建一个名为 `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)"# 安装其他包,如 pandasconda 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的条款:
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/mainconda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r
1.3 检查系统依赖
# 检查基础工具which curl tar gcc make# 如果缺少,请使用包管理器安装(需要sudo权限)# 如无法使用sudo,可跳过,Ollama二进制版不需要编译
1.4 创建用户目录结构
# 在用户目录下创建专用目录mkdir -p ~/apps/ollama# 模型下载到挂载目录mkdir -p /mnt/sda/farmers/a/apps/ollamamkdir -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
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/ollamatar --zstd -xvf ollama-linux-amd64.tar.zst -C ~/app/ollama
如果各种办法下载不了 ollama 二进制文件的话,大概率是网络有问题,用官方脚本也够呛能安装,直接从别的机器下载,然后传上去。
2.3 配置环境变量
# 编辑bash配置文件echo 'export PATH="$HOME/apps/ollama/bin:$PATH"' >> ~/.bashrcecho 'export OLLAMA_MODELS="$HOME/apps/ollama/models"' >> ~/.bashrcecho 'export OLLAMA_HOST="127.0.0.1:11434"' >> ~/.bashrc# 如果使用zshecho 'export PATH="$HOME/apps/ollama/bin:$PATH"' >> ~/.zshrcecho 'export OLLAMA_MODELS="$HOME/apps/ollama/models"' >> ~/.zshrcecho 'export OLLAMA_HOST="127.0.0.1:11434"' >> ~/.zshrc# 使配置生效source ~/.bashrc # 或 source ~/.zshrc# 验证安装ollama --version
2.4 ~/.bashrc 中ollama的完整配置
# 修改或添加以下行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)统一收集。
# 查看所有日志(实时滚动)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)。为了不丢失日志,通常会在启动时进行重定向。
# 将标准输出和错误都追加到指定日志文件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/ollamaAfter=network-online.targetWants=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/modelsEnvironment=OLLAMA_HOST=127.0.0.1:11434Environment=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.logStandardError=file:/mnt/sda/farmers/a/apps/ollama/logs/ollama.stderr.log# 重启策略:服务异常退出时自动重启Restart=on-failureRestartSec=5s# 资源限制(可选,防止服务占用过多资源)# LimitNOFILE=65536# LimitNPROC=infinity# LimitMEMLOCK=infinity[Install]WantedBy=default.targetEOF
说明:
- 此配置将服务限定在当前用户下运行,无需
sudo。 - 关键设置
OLLAMA_MODELS环境变量,确保模型下载到指定的挂载盘路径。 - 将标准输出和错误日志重定向到文件,便于日后排查问题。
第二步:创建日志目录并赋予权限
服务配置中指定了日志输出路径,需要提前创建该目录。
# 创建日志目录mkdir -p /mnt/sda/farmers/a/apps/ollama/logs# 确保当前用户对该目录有写入权限chmod 755 /mnt/sda/farmers/a/apps/ollama/logs
第三步:创建管理 Systemd 服务的命令脚本
创建一个便捷的管理脚本,包含启动、停止、状态查看、日志追踪等常用操作。
# 创建管理脚本cat > ~/apps/ollama/ollama-service-manager.sh << 'EOF'#!/bin/bashSERVICE_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 ;;esacEOF# 赋予管理脚本执行权限chmod +x ~/apps/ollama/ollama-service-manager.sh
3.3 启动并启用服务
1.使用systemctl管理 Ollama 服务。
# 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 服务的命令脚本
~/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虚拟环境
创建虚拟环境
# 创建虚拟环境python3.12 -m venv ~/apps/ollama/venv# 激活虚拟环境source ~/apps/ollama/venv/bin/activate# 安装Ollama Python客户端pip install ollamapip 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客户端未安装" fielse echo "错误: 虚拟环境不存在" echo "请先创建虚拟环境: python -m venv ~/apps/ollama/venv" exit 1fiEOFchmod +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服务
# 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识别
# 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权限请忽略。
# 启用 linger 功能sudo loginctl enable-linger $USER# 验证loginctl show-user $USER | grep Linger# 应该显示:Linger=yes# 之后,您启用(enable)的服务将会在系统启动后自动运行,无需用户保持登录。
六、下载和运行指定模型
6.1 拉取模型(使用INT4量化版节省显存)
# 激活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 ollamamodels = ['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
# 创建 Modelfilecat > /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 8192PARAMETER 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 导入为可用的模型:
# 确保 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 运行模型测试
# 查看所有可用模型ollama list# 查看模型详细信息ollama show qwen3.5-9b-deepseek:q4# 测试Qwen3-14Bollama run qwen3.5-9b-deepseek:q4 "你好,用一句话介绍下深圳"# 在Python虚拟环境中测试python -c "import ollamaresponse = 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/ollamachmod 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虚拟环境进行管理。