在无sudo权限Linux上安装 Ollama 并使用 DeepSeek-R1 模型
本教程将指导你如何在 Linux 系统上安装 Ollama(一个本地运行大型语言模型的工具),并加载 DeepSeek-R1 模型。DeepSeek-R1 是一个高性能的开源语言模型,适用于多种自然语言处理任务。
DeepSeek-R1 简介
DeepSeek-R1 是 DeepSeek 开发的第一代推理模型,在数学、代码和推理任务上表现出色,性能媲美 OpenAI 的 GPT-3.5。DeepSeek 团队还通过蒸馏技术,将大模型的推理能力迁移到更小的模型中,显著提升了小模型在推理任务上的表现。
1. 准备工作
1.1 系统要求
- 操作系统: Linux(推荐 Ubuntu 20.04 或更高版本)
- 硬件:
- CPU: 至少 4 核
- 内存: 至少 16GB
- 存储: 至少 20GB 可用空间
- GPU(可选): 支持 CUDA 的 NVIDIA GPU(推荐显存 8GB 或更高)
1.2 依赖工具
确保以下工具已安装:
curl
tar
git
(可选,用于克隆代码库)
如果没有安装,可以通过以下命令安装:
sudo apt update
sudo apt install curl tar git
2. 安装 Ollama
方法一:通过 Ollama 的压缩包下载
2.1.1 下载 Ollama
首先,使用 wget
或 curl
分段下载 Ollama 的压缩包:
wget -c -O ollama-linux-amd64.tgz "https://gh-proxy.com/github.com/ollama/ollama/releases/download/v0.5.7/ollama-linux-amd64.tgz"
2.1.2 解压缩下载的文件
下载完成后,解压缩文件到您的主目录中的一个子目录(例如 ~/local/ollama
):
mkdir -p $HOME/local/ollama
tar -xzf ollama-linux-amd64.tgz -C $HOME/local/ollama
2.1.3 设置环境变量
将解压缩后的可执行文件添加到您的 PATH
环境变量中,以便可以从命令行直接运行 ollama
。将以下行添加到您的 ~/.bashrc
或 ~/.zshrc
文件中(取决于您使用的 shell):
export PATH="$HOME/local/ollama/bin:$PATH"
然后,重新加载 shell 配置文件:
source ~/.bashrc # 或 source ~/.zshrc
2.1.4 验证安装
验证 ollama
是否已正确安装并可以运行:
ollama --version
如果一切正常,您应该会看到 ollama
的版本信息。
2.1.5 启动 Ollama 服务
在终端中运行以下命令以启动 Ollama 服务:
ollama serve
这将启动 Ollama 服务,并使其在后台运行。
方法二:通过安装脚本下载
以下脚本会将 Ollama 安装到用户目录(~/.local/bin
),无需 sudo
权限。
2.2.1 安装脚本
#!/bin/sh
# This script installs Ollama on Linux without requiring sudo privileges.
# It installs Ollama to the user's local directory (~/.local/bin).
set -eu
red="$( (/usr/bin/tput bold || :; /usr/bin/tput setaf 1 || :) 2>&-)"
plain="$( (/usr/bin/tput sgr0 || :) 2>&-)"
status() { echo ">>> $*" >&2; }
error() { echo "${red}ERROR:${plain} $*"; exit 1; }
warning() { echo "${red}WARNING:${plain} $*"; }
TEMP_DIR=$(mktemp -d)
cleanup() { rm -rf $TEMP_DIR; }
trap cleanup EXIT
available() { command -v $1 >/dev/null; }
require() {
local MISSING=''
for TOOL in $*; do
if ! available $TOOL; then
MISSING="$MISSING $TOOL"
fi
done
echo $MISSING
}
[ "$(uname -s)" = "Linux" ] || error 'This script is intended to run on Linux only.'
ARCH=$(uname -m)
case "$ARCH" in
x86_64) ARCH="amd64" ;;
aarch64|arm64) ARCH="arm64" ;;
*) error "Unsupported architecture: $ARCH" ;;
esac
IS_WSL2=false
KERN=$(uname -r)
case "$KERN" in
*icrosoft*WSL2 | *icrosoft*wsl2) IS_WSL2=true;;
*icrosoft) error "Microsoft WSL1 is not currently supported. Please use WSL2 with 'wsl --set-version <distro> 2'" ;;
*) ;;
esac
VER_PARAM="${OLLAMA_VERSION:+?version=$OLLAMA_VERSION}"
NEEDS=$(require curl awk grep sed tee xargs)
if [ -n "$NEEDS" ]; then
status "ERROR: The following tools are required but missing:"
for NEED in $NEEDS; do
echo " - $NEED"
done
exit 1
fi
# Install Ollama to ~/.local/bin
OLLAMA_INSTALL_DIR="$HOME/.local/bin"
mkdir -p "$OLLAMA_INSTALL_DIR"
export PATH="$OLLAMA_INSTALL_DIR:$PATH"
if [ -d "$OLLAMA_INSTALL_DIR/lib/ollama" ] ; then
status "Cleaning up old version at $OLLAMA_INSTALL_DIR/lib/ollama"
rm -rf "$OLLAMA_INSTALL_DIR/lib/ollama"
fi
status "Installing ollama to $OLLAMA_INSTALL_DIR"
status "Downloading Linux ${ARCH} bundle"
curl --fail --show-error --location --progress-bar \
"https://gh-proxy.com/github.com/ollama/ollama/releases/download/v0.5.7/ollama-linux-${ARCH}.tgz" | \
tar -xzf - -C "$OLLAMA_INSTALL_DIR"
if [ "$OLLAMA_INSTALL_DIR/bin/ollama" != "$OLLAMA_INSTALL_DIR/ollama" ] ; then
status "Making ollama accessible in the PATH in $OLLAMA_INSTALL_DIR"
ln -sf "$OLLAMA_INSTALL_DIR/bin/ollama" "$OLLAMA_INSTALL_DIR/ollama"
fi
# Check for NVIDIA JetPack systems with additional downloads
if [ -f /etc/nv_tegra_release ] ; then
if grep R36 /etc/nv_tegra_release > /dev/null ; then
status "Downloading JetPack 6 components"
curl --fail --show-error --location --progress-bar \
"https://gh-proxy.com/github.com/ollama/ollama/releases/download/v0.5.7/ollama-linux-${ARCH}-jetpack6.tgz" | \
tar -xzf - -C "$OLLAMA_INSTALL_DIR"
elif grep R35 /etc/nv_tegra_release > /dev/null ; then
status "Downloading JetPack 5 components"
curl --fail --show-error --location --progress-bar \
"https://gh-proxy.com/github.com/ollama/ollama/releases/download/v0.5.7/ollama-linux-${ARCH}-jetpack5.tgz" | \
tar -xzf - -C "$OLLAMA_INSTALL_DIR"
else
warning "Unsupported JetPack version detected. GPU may not be supported."
fi
fi
install_success() {
status 'The Ollama API is now available at 127.0.0.1:11434.'
status 'Install complete. Run "ollama" from the command line.'
status 'Make sure ~/.local/bin is in your PATH:'
status ' export PATH="$HOME/.local/bin:$PATH"'
}
trap install_success EXIT
# Everything from this point onwards is optional.
# WSL2 only supports GPUs via nvidia passthrough
# so check for nvidia-smi to determine if GPU is available
if [ "$IS_WSL2" = true ]; then
if available nvidia-smi && [ -n "$(nvidia-smi | grep -o "CUDA Version: [0-9]*\.[0-9]*")" ]; then
status "Nvidia GPU detected."
fi
install_success
exit 0
fi
# Don't attempt to install drivers on Jetson systems
if [ -f /etc/nv_tegra_release ] ; then
status "NVIDIA JetPack ready."
install_success
exit 0
fi
# Install GPU dependencies on Linux
if ! available lspci && ! available lshw; then
warning "Unable to detect NVIDIA/AMD GPU. Install lspci or lshw to automatically detect and install GPU dependencies."
exit 0
fi
check_gpu() {
# Look for devices based on vendor ID for NVIDIA and AMD
case $1 in
lspci)
case $2 in
nvidia) available lspci && lspci -d '10de:' | grep -q 'NVIDIA' || return 1 ;;
amdgpu) available lspci && lspci -d '1002:' | grep -q 'AMD' || return 1 ;;
esac ;;
lshw)
case $2 in
nvidia) available lshw && lshw -c display -numeric -disable network | grep -q 'vendor: .* \[10DE\]' || return 1 ;;
amdgpu) available lshw && lshw -c display -numeric -disable network | grep -q 'vendor: .* \[1002\]' || return 1 ;;
esac ;;
nvidia-smi) available nvidia-smi || return 1 ;;
esac
}
if check_gpu nvidia-smi; then
status "NVIDIA GPU installed."
exit 0
fi
if ! check_gpu lspci nvidia && ! check_gpu lshw nvidia && ! check_gpu lspci amdgpu && ! check_gpu lshw amdgpu; then
install_success
warning "No NVIDIA/AMD GPU detected. Ollama will run in CPU-only mode."
exit 0
fi
if check_gpu lspci amdgpu || check_gpu lshw amdgpu; then
status "Downloading Linux ROCm ${ARCH} bundle"
curl --fail --show-error --location --progress-bar \
"https://gh-proxy.com/github.com/ollama/ollama/releases/download/v0.5.7/ollama-linux-${ARCH}-rocm.tgz" | \
tar -xzf - -C "$OLLAMA_INSTALL_DIR"
install_success
status "AMD GPU ready."
exit 0
fi
status "NVIDIA GPU detected. Note: CUDA driver installation requires sudo privileges."
install_success
2.2.2 运行脚本
- 将上述脚本保存为
install_ollama.sh
。 - 赋予执行权限:
chmod +x install_ollama.sh
- 运行脚本:
./install_ollama.sh
2.2.3 验证安装
安装完成后,运行以下命令验证 Ollama 是否安装成功:
ollama --version
如果显示版本号,说明安装成功。
2.2.4 启动 Ollama 服务
在终端中运行以下命令以启动 Ollama 服务:
ollama serve
这将启动 Ollama 服务,并使其在后台运行。
3. 下载并加载 DeepSeek-R1 模型
3.1 模型地址
DeepSeek-R1 模型可以从以下地址下载,使用 Ollama 则不用下载:
- Hugging Face: deepseek-ai/DeepSeek-R1
- ModelScope: deepseek-ai/DeepSeek-R1
3.2 使用 Ollama 加载模型
Ollama 模型库
3.2.1 DeepSeek-R1
- 模型大小: 671B 参数
- 运行命令:
ollama run deepseek-r1:671b
3.2.2 蒸馏模型
以下是通过蒸馏技术生成的小模型,适用于不同规模的硬件环境:
-
DeepSeek-R1-Distill-Qwen-1.5B
ollama run deepseek-r1:1.5b
-
DeepSeek-R1-Distill-Qwen-7B
ollama run deepseek-r1:7b
-
DeepSeek-R1-Distill-Llama-8B
ollama run deepseek-r1:8b
-
DeepSeek-R1-Distill-Qwen-14B
ollama run deepseek-r1:14b
-
DeepSeek-R1-Distill-Qwen-32B
ollama run deepseek-r1:32b
-
DeepSeek-R1-Distill-Llama-70B
ollama run deepseek-r1:70b
3.3 通过 API 调用
Ollama 提供了一个简单的 API,可以通过 curl
调用:
curl -X POST http://127.0.0.1:11434/api/generate \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-r1",
"prompt": "你好,世界!",
"max_tokens": 50
}'
3.4 通过 Python 调用
安装 requests
库:
pip install requests
使用以下 Python 代码调用模型:
import requests
url = "http://127.0.0.1:11434/api/generate"
payload = {
"model": "deepseek-r1",
"prompt": "你好,世界!",
"max_tokens": 50
}
response = requests.post(url, json=payload)
print(response.json())
4. 参考资源
- 论文地址: DeepSeek-R1 论文
- 开源地址: Hugging Face | ModelScope
5.常见问题
Windows 风格的行尾(CRLF),而不是 Unix 风格的行尾(LF)
错误信息表明您的 install.sh
脚本中存在 Windows 风格的行尾(CRLF),而不是 Unix 风格的行尾(LF)。这会导致 shell 脚本在 Unix 系统上运行时出现问题。
要解决此问题,您可以将脚本文件的行尾转换为 Unix 风格。以下是几种方法:
方法 1:使用 dos2unix
工具
如果您的系统上安装了 dos2unix
工具,可以使用它将文件转换为 Unix 格式:
dos2unix install.sh
方法 2:使用 tr
命令
您还可以使用 tr
命令来删除 Windows 行尾:
tr -d '\r' < install.sh > install_unix.sh
mv install_unix.sh install.sh
方法 3:使用文本编辑器
如果您使用的是文本编辑器(如 VSCode、Sublime Text 或 Notepad++),可以在保存文件时选择 Unix 格式的行尾。
方法 4:使用 sed
命令
您还可以使用 sed
命令来删除 Windows 行尾:
sed -i 's/\r$//' install.sh
方法 5:使用 Python 脚本
如果您有 Python 环境,可以使用以下 Python 脚本将文件转换为 Unix 格式:
with open('install.sh', 'rb') as file:
content = file.read()
with open('install.sh', 'wb') as file:
file.write(content.replace(b'\r\n', b'\n'))
改Ollama 的模型存储路径
好的!你可以通过以下步骤将 Ollama 的模型存储路径设置为 $HOME/local/ollama/mod
,并使用符号链接来实现自定义路径。
步骤 1:创建自定义目录
首先,创建你希望存储模型的目录:
mkdir -p $HOME/local/ollama/mod
步骤 2:移动默认模型目录(如果已存在)
如果 Ollama 已经下载过模型,默认模型目录会位于 ~/.ollama/models
。你可以将其移动到自定义目录:
mv ~/.ollama/models $HOME/local/ollama/mod
步骤 3:创建符号链接
创建一个符号链接,将 Ollama 的默认模型路径指向你的自定义目录:
ln -s $HOME/local/ollama/mod ~/.ollama/models
步骤 4:验证路径
运行以下命令,检查符号链接是否创建成功:
ls -l ~/.ollama/models
如果输出类似以下内容,说明符号链接已正确设置:
lrwxrwxrwx 1 user user 25 Oct 10 12:00 /home/user/.ollama/models -> /home/user/local/ollama/mod
步骤 5:运行 Ollama
现在,当你运行 ollama run deepseek-r1:70b
时,模型会被下载到 $HOME/local/ollama/mod
目录中。
完整脚本
如果你希望自动化上述步骤,可以使用以下脚本:
#!/bin/bash
# 自定义模型存储路径
CUSTOM_MODEL_DIR="$HOME/local/ollama/mod"
# 创建自定义目录
mkdir -p "$CUSTOM_MODEL_DIR"
# 移动默认模型目录(如果存在)
if [ -d "$HOME/.ollama/models" ]; then
mv "$HOME/.ollama/models" "$CUSTOM_MODEL_DIR"
fi
# 创建符号链接
ln -s "$CUSTOM_MODEL_DIR" "$HOME/.ollama/models"
# 验证符号链接
echo "验证符号链接:"
ls -l "$HOME/.ollama/models"
# 提示信息
echo "Ollama 模型存储路径已设置为:$CUSTOM_MODEL_DIR"
将上述脚本保存为 setup_ollama_path.sh
,然后运行:
chmod +x setup_ollama_path.sh
./setup_ollama_path.sh
注意事项
- 权限问题:确保你有权限在
$HOME/local/ollama/mod
目录中读写文件。 - Ollama 版本:确保你使用的是最新版本的 Ollama,以避免兼容性问题。
- 符号链接生效:符号链接创建后,Ollama 会自动将模型下载到自定义路径。
通过以上步骤,你可以成功将 Ollama 的模型存储路径设置为 $HOME/local/ollama/mod
,并开始使用自定义路径下载和运行模型!
通过本教程,你可以在 Linux 系统上安装 Ollama 并加载 DeepSeek-R1 模型,轻松运行高性能的自然语言处理任务。如果有任何问题,欢迎在评论区留言!