8-5 AI脚本Linux环境离线安装Ollama
一、Ollama安装环境准备
1.1 基础环境配置
硬件资源检查
- GPU验证:
nvidia-smi # 检查NVIDIA显卡状态
bash
预期输出应显示GPU型号、驱动版本和显存使用情况。若未安装驱动,需先配置CUDA环境(AutoDL环境通常已预装)。 - 系统架构确认:
uname -m # 显示系统架构(x86_64/arm64)
bash
Ollama需根据架构选择对应的安装包。
终端操作环境
- AutoDL Lab终端:
- 通过Web界面访问Jupyter Lab,选择"Terminal"选项进入Linux终端
- 支持多标签页操作,方便同时查看脚本和运行日志
在线安装测试
# 官方推荐的一键安装命令(测试网络连通性)
time curl -fsSL https://ollama.com/install.sh | sh
bash
💡 网络性能观测:
- 正常情况:下载速度应>1MB/s,总耗时<2分钟
- 国内常见问题:DNS解析慢(可尝试
dig ollama.com
检测)、连接超时(使用ping
测试)
备选网络优化方案
- 临时更换DNS:
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
bash - 代理设置(如有):
export https_proxy=http://your_proxy:port
bash
1.2 离线安装必要性
网络问题深度分析
- 域名访问瓶颈:
traceroute ollama.com # 追踪网络路径
bash
常见卡点在境外服务器跳转(如AWS东京节点) - 脚本依赖分析:
grep "curl" install.sh # 检查脚本中的在线下载点
bash
典型依赖项:- 主程序二进制(
ollama-linux-*
) - 模型仓库索引(
registry.ollama.ai
)
- 主程序二进制(
离线方案设计原则
- 资源清单生成:
# 使用大模型解析依赖 "请分析此脚本:$(cat install.sh),列出所有需要离线下载的URL"
bash - 版本控制策略:
- 固定版本下载(避免兼容性问题)
- 配套依赖包(如libcuda.so等)
典型离线场景
场景 | 解决方案 | 资源示例 |
---|---|---|
完全无外网 | 提前下载所有依赖 | ollama二进制+模型文件 |
间歇性联网 | 分阶段下载 | 先下脚本再补资源 |
内网代理 | 搭建镜像源 | 私有registry服务 |
技术验证方法
- 模拟离线环境:
sudo ifconfig eth0 down # 禁用网卡
bash - 安装测试:
./install-ollama-offline.sh --dry-run # 预演安装过程
bash
💡 扩展技巧:使用ldd
命令检查二进制文件的动态链接库依赖,确保离线环境完整性:
ldd /opt/ollama/ollama # 显示依赖库
bash
注:课程提供的离线包已包含x86_64架构的完整依赖链(2025.06验证版),ARM架构需单独准备。遇到
GLIBC_2.33
等版本报错时,建议使用容器化方案隔离运行环境。
二、离线安装资源准备
2.1 资源获取策略
官方脚本获取与解析
- 获取官方安装脚本:
curl -o install.sh https://ollama.com/install.sh # 保存为本地文件 chmod +x install.sh # 添加执行权限
bash - 脚本结构分析:
head -n 20 install.sh # 查看脚本头部信息 grep "http" install.sh # 提取所有下载链接
bash
大模型辅助分析
- 精准提问技巧:
"请解析install.sh脚本,用表格列出: 1. 必须下载的离线资源URL 2. 对应的保存路径 3. 文件校验值(如有)"
bash - 典型输出示例:
文件类型 下载URL 保存路径 SHA256校验 主程序 https://ollama.com/download/ollama-linux-amd64 /opt/ollama/bin a1b2c3... CUDA驱动 https://developer.download.nvidia.com/... /tmp xyz123...
关键组件获取
- 主程序下载:
wget -O ollama-linux-amd64 https://ollama.com/download/ollama-linux-amd64
bash - 依赖项检查工具:
# 使用ldd检查动态链接库 ldd ollama-linux-amd64 | grep "not found"
bash
2.2 文件传输与管理
2.2.1 小型文件传输方案
- 目录结构规范:
ollama-offline/ ├── bin/ # 主程序 ├── lib/ # 依赖库 ├── models/ # 模型文件 └── install.sh # 安装脚本
bash - 批量上传技巧:
# 使用scp从本地传输 scp -r ./ollama-offline user@remote:/path/to/
bash
2.2.2 大型模型传输方案
方案对比表
方法 | 适用场景 | 命令示例 | 优势 |
---|---|---|---|
rsync | 定期同步 | rsync -avzP ./models user@remote:/data | 断点续传 |
分卷压缩 | 网络不稳定 | `tar czvf - model.bin | split -b 2G - model.tar.gz.` |
网盘工具 | 跨地域传输 | rclone copy ./models mydrive:/backup | 免服务器配置 |
分卷压缩详细操作
- 压缩分卷:
tar cvzf - large-model.bin | split -b 2G - model-part-
bash - 传输后合并:
cat model-part-* | tar xzvf -
bash
完整性验证
# 校验分卷文件
md5sum model-part-*
# 合并后验证
md5sum large-model.bin
bash
传输优化技巧
- 带宽限制(避免影响生产网络):
rsync --bwlimit=10m # 限制10MB/s
bash - 断点记录:
wget -c http://example.com/large-file # 继续未完成下载
bash
💡 扩展场景:
对于超大型模型(>50GB),建议:
- 使用企业级网盘(如AWS S3)
- 搭建内网HTTP服务器:
python3 -m http.server 8000 # 临时web服务
bash
注:课程提供的离线包已包含预校验过的分卷文件(每卷2GB),使用
cat ollama-model.* | tar xzvf -
即可合并。遇到传输错误时,可通过.md5
文件校验分卷完整性。
三、手动安装步骤
3.1 目录结构与权限配置
1. 创建安装目录
sudo mkdir -p /opt/ollama/{bin,lib,models} # 创建多级目录结构
bash
- 目录说明:
/opt/ollama/bin
:存放可执行文件/opt/ollama/lib
:存放依赖库/opt/ollama/models
:存放模型文件
2. 拷贝资源文件
# 拷贝主程序
sudo cp ollama-linux-* /opt/ollama/bin/
# 拷贝依赖库(如果有)
sudo cp lib*.so* /opt/ollama/lib/
bash
- 权限设置:
sudo chown -R root:root /opt/ollama # 设置属主
sudo chmod 755 /opt/ollama/bin/* # 设置可执行权限
bash
3. 授权安装脚本
chmod +x install-ollama-offline.sh
bash
- 安全验证:
file install-ollama-offline.sh # 检查文件类型
sha256sum install-ollama-offline.sh # 校验文件完整性
bash
3.2 安装执行与问题定位
基础安装命令
sudo ./install-ollama-offline.sh --prefix=/opt/ollama
bash
- 常用参数:
--verbose
:显示详细日志--dry-run
:模拟安装过程
常见报错处理
1. 环境变量缺失
ERROR: OFFLINE_DIR not set
bash
解决方案:
# 临时设置
export OFFLINE_DIR=/opt/ollama
# 永久设置(推荐)
echo 'export OFFLINE_DIR=/opt/ollama' >> ~/.bashrc
source ~/.bashrc
bash
2. 命令未找到
command not found: ollama
bash
解决方案:
# 检查PATH
echo $PATH
# 添加安装目录到PATH
export PATH=$PATH:/opt/ollama/bin
# 验证
which ollama
bash
3. 动态链接库缺失
error while loading shared libraries: libcuda.so.1
bash
解决方案:
# 查找库文件
find / -name libcuda.so* 2>/dev/null
# 创建软链接
sudo ln -s /path/to/libcuda.so.1 /opt/ollama/lib/
bash
高级调试技巧
- 使用
strace
跟踪系统调用:
strace -f ./install-ollama-offline.sh
bash
- 查看安装日志:
journalctl -u ollama --no-pager -n 50
bash
- 环境检查脚本:
#!/bin/bash
echo "=== 系统信息 ==="
uname -a
echo "=== 环境变量 ==="
env | grep OLLAMA
echo "=== 文件权限 ==="
ls -l /opt/ollama/bin/
bash
💡 专业建议:
- 对于生产环境,建议使用容器化部署(Docker)
- 安装完成后执行完整性检查:
ollama doctor # 内置诊断工具
bash
注:如遇GPU相关错误,建议检查
nvidia-smi
输出和CUDA版本兼容性。课程提供的V2脚本已包含自动修复常见问题的逻辑。
四、脚本调试与优化
4.1 大模型辅助调试
高效调试方法论
- 错误信息结构化输入:
# 将报错信息保存到文件
./install-ollama-offline.sh 2> error.log
bash
然后将以下提示词发送给大模型:
请分析以下错误日志,提供修复方案:
1. 错误类型分类(环境/权限/依赖)
2. 具体修复命令
3. 预防措施
错误日志:
$(cat error.log)
text
- 交互式优化流程:
- 典型优化案例:
- 环境变量问题:
原始报错:
OFFLINE_DIR not set
优化后:[[ -z "$OFFLINE_DIR" ]] && export OFFLINE_DIR=/opt/ollama
bash
4.2 V2脚本核心优化点
1. 智能架构检测
#!/bin/bash
ARCH=$(uname -m)
case $ARCH in
x86_64) LIB_PATH="/usr/lib/x86_64-linux-gnu" ;;
arm64) LIB_PATH="/usr/lib/aarch64-linux-gnu" ;;
*) echo "Unsupported architecture"; exit 1 ;;
esac
bash
2. GPU自动化识别
GPU_TYPE=""
if command -v nvidia-smi &> /dev/null; then
GPU_TYPE="nvidia"
DRIVER_VERSION=$(nvidia-smi --query-gpu=driver_version --format=csv,noheader)
elif lspci | grep -i amd/ati; then
GPU_TYPE="amd"
else
GPU_TYPE="cpu"
fi
bash
3. CUDA驱动智能跳过
check_cuda() {
if ldconfig -p | grep -q libcuda.so; then
echo "[INFO] CUDA already installed, version: $(nvcc --version | grep release)"
return 0
fi
return 1
}
bash
4. 服务自启动配置
setup_service() {
cat > /etc/systemd/system/ollama.service <<EOF
[Unit]
Description=Ollama Service
[Service]
ExecStart=/opt/ollama/bin/ollama serve
Restart=always
User=ollama
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable ollama
}
bash
优化效果对比表
功能点 | V1脚本 | V2脚本优化 |
---|---|---|
架构支持 | 仅x86_64 | 自动检测x86_64/arm64 |
GPU检测 | 需手动配置 | 自动识别NVIDIA/AMD/CPU |
CUDA处理 | 强制重装 | 存在则跳过并提示版本 |
服务管理 | 需手动配置systemd | 自动生成服务单元文件 |
错误处理 | 简单退出 | 详细错误分类和修复建议 |
💡 高级调试技巧:
- 使用
set -x
开启调试模式:
#!/bin/bash
set -x # 开启命令打印
# 脚本内容...
set +x # 关闭调试
bash
- 性能分析工具:
# 统计脚本执行时间
time ./install-ollama-offline.sh
# 分析系统调用
strace -c ./install-ollama-offline.sh
bash
注:课程提供的V2脚本已通过100+次测试验证,完整版包含以下安全特性:
- 安装前系统资源检查
- 操作前用户确认提示
- 所有危险操作的日志记录
- 自动生成安装报告(/var/log/ollama_install.log)
五、验证与模型测试
5.1 安装验证
1. 系统级验证
# 验证二进制文件完整性
sha256sum $(which ollama) | grep -q "a1b2c3..." && echo "校验通过" || echo "文件被篡改"
# 检查动态链接库
ldd $(which ollama) | grep "not found" && echo "缺失依赖" || echo "依赖完整"
bash
2. 功能验证
# 测试基础功能
ollama list # 应返回空列表或已安装模型
ollama --version # 显示版本信息
# 高级功能测试
time ollama pull llama2 # 测试下载功能(Ctrl+C中断)
bash
3. 环境验证表
检查项 | 命令 | 预期结果 |
---|---|---|
可执行文件 | which ollama | /opt/ollama/bin/... |
用户权限 | ls -l $(which ollama) | -rwxr-xr-x |
服务状态 | pgrep -fl ollama | 显示服务进程 |
模型存储目录 | ls /opt/ollama/models | 显示模型文件 |
5.2 模型运行测试
1. 服务管理
# 专业服务启动(带日志输出)
ollama serve > /var/log/ollama.log 2>&1 &
# 服务监控
tail -f /var/log/ollama.log # 实时查看日志
bash
2. 模型测试套件
# 基础推理测试
echo "生成5个随机单词" | ollama run dkr1
# 压力测试(需提前安装stress)
stress -c 2 && ollama run dkr1 # 在CPU负载下测试
bash
3. 性能指标监测
# 下载测速
curl -o /dev/null -w "速度: %{speed_download} B/s\n" http://ollama.com/models/dkr1
# 推理延迟测试
time echo "你好" | ollama run dkr1 > /dev/null
bash
4. 性能基准参考
指标 | 入门级GPU (T4) | 高端GPU (A100) | CPU模式 |
---|---|---|---|
下载速度 | 50-100MB/s | 200-500MB/s | 20-50MB/s |
首次响应延迟 | 3-5秒 | 1-2秒 | 8-15秒 |
持续推理速度 | 15 token/s | 45 token/s | 3-5 token/s |
5. 高级测试技巧
# 并发测试
for i in {1..3}; do
ollama run dkr1 "第$i次测试" &
done
# 显存监控(NVIDIA)
nvidia-smi -l 1 # 每秒刷新显存使用
bash
💡 专业建议:
- 生产环境建议使用Prometheus+Grafana搭建监控看板
- 长期运行的模型服务建议配置日志轮转:
sudo logrotate -f /etc/logrotate.d/ollama
bash
注:测试模型
dkr1
已预置在课程材料中,包含以下特性:
- 1.1GB量化版本
- 支持中英文混合推理
- 已优化显存占用(最低4GB显存可运行) 完整测试报告模板见
/docs/benchmark_template.md
六、最佳实践总结
6.1 离线安装通用流程
1. 资源准备
- 脚本解析:
grep -E "http|https" install.sh | awk '{print $2}' > download_list.txt
bash
提取所有下载链接,便于批量下载。 - 依赖下载:
while read url; do wget "$url"; done < download_list.txt
bash
确保所有依赖文件(二进制、模型、驱动)完整下载。 - 本地存储:
tar czvf ollama-offline.tar.gz bin/ lib/ models/ install.sh
bash
打包资源,便于传输和版本管理。
2. 环境配置
- 目录结构:
sudo mkdir -p /opt/ollama/{bin,lib,models}
bash
标准化路径,避免权限问题。 - 权限设置:
sudo chmod -R 755 /opt/ollama sudo chown -R root:root /opt/ollama
bash
确保安全性和可执行权限。 - 环境变量:
echo 'export PATH=$PATH:/opt/ollama/bin' >> ~/.bashrc source ~/.bashrc
bash
避免command not found
错误。
3. 安装调试
- 脚本执行:
sudo ./install-ollama-offline.sh --log-level=debug
bash
启用调试日志,捕获详细报错。 - 报错处理:
# 示例:动态链接库缺失 sudo ln -s /usr/lib/x86_64-linux-gnu/libcuda.so.1 /opt/ollama/lib/
bash
结合ldd
和strace
快速定位问题。 - 模型优化:
ollama optimize dkr1 --quantize=4bit
bash
减少显存占用,提升推理速度。
4. 验证部署
- 服务管理:
sudo systemctl start ollama sudo systemctl enable ollama
bash
确保服务开机自启。 - 性能测试:
ollama run dkr1 "生成100字文本" --temperature=0.7
bash
监控显存、延迟和吞吐量。 - 文档记录:
echo "$(date) | 版本: $(ollama --version)" >> /var/log/ollama_deploy.log
bash
记录安装参数和测试结果。
6.2 大模型协作技巧
1. 问题描述模板
**环境**:
- OS: Ubuntu 22.04
- GPU: NVIDIA T4
- 错误日志:
markdown
ERROR: libcuda.so.1: cannot open shared object file
**需求**:
请提供修复命令,并解释原因。
text
2. 脚本生成示例
# 大模型生成的修复脚本
if ! ldconfig -p | grep libcuda.so.1; then
sudo apt install -y nvidia-driver-520
fi
bash
3. 迭代验证流程
4. 通用技巧
- 精准提问:
"请分析此报错:$(cat error.log),要求: 1. 分类错误类型 2. 提供修复命令 3. 解释根本原因"
bash - 版本控制:
git tag v1.0-offline-install
bash
标记稳定版本,便于回滚。
💡 扩展场景:
- 适用于Kubernetes集群离线部署
- 可迁移至其他AI框架(如vLLM、TensorRT)
注:课程提供的
ollama-offline-toolkit
已集成上述流程,支持一键生成安装报告(含性能基线)。
↑