01. 引言

本篇文章使用的部署环境:

  • 系统: Ubuntu 26.04.1 LTS
  • SSH工具: FinalShell
  • 本地AI工具: Ollama 0.33.1
  • 显卡驱动: NVIDIA-SMI 595.91.07
  • LLM模型: Qwen2.5:7b-instruct
  • 计算显卡: Nvidia GeForce RTX 2060 Super 8G
  • CPU: Intel I5-10400F

所有部署建立在以上硬件&系统环节下,请根据自己的显卡显存及计算能力酌情更换模型版本

02. 部署

2.1 安装NVIDIA 官方闭源驱动

  1. 启用 GRUB 启动菜单,防止出问题后无法进系统急救
sudo sed -i 's/GRUB_TIMEOUT_STYLE=hidden/# GRUB_TIMEOUT_STYLE=hidden/' /etc/default/grub
sudo sed -i 's/GRUB_TIMEOUT=0/GRUB_TIMEOUT=5/' /etc/default/grub
sudo update-grub
  1. 安装驱动依赖
sudo apt update
sudo apt install build-essential dkms linux-headers-$(uname -r) -y
  1. 禁用开源驱动 Nouveau
sudo bash -c "echo 'blacklist nouveau' > /etc/modprobe.d/blacklist-nouveau.conf"
sudo bash -c "echo 'options nouveau modeset=0' >> /etc/modprobe.d/blacklist-nouveau.conf"
sudo update-initramfs -u
  1. 查看可用的驱动版本
ubuntu-drivers devices

我的机器输出为

root@home:~# ubuntu-drivers devices

ERROR:root:aplay command not found
== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
modalias : pci:v000010DEd00001F06sv00001B4Csd000013A3bc03sc00i00
vendor   : NVIDIA Corporation
model    : TU106 [GeForce RTX 2060 SUPER]
driver   : nvidia-driver-580-server-open - distro non-free
driver   : nvidia-driver-610 - distro non-free
driver   : nvidia-driver-610-open - distro non-free
driver   : nvidia-driver-595-open - distro non-free recommended
driver   : nvidia-driver-580-server - distro non-free
driver   : nvidia-driver-595-server-open - distro non-free
driver   : nvidia-driver-580-open - distro non-free
driver   : nvidia-driver-595 - distro non-free
driver   : nvidia-driver-595-server - distro non-free
driver   : nvidia-driver-580 - distro non-free
driver   : xserver-xorg-video-nouveau - distro free builtin

可见在

driver   : nvidia-driver-595-open - distro non-free recommended

这行已经自动为我们标注了recommended字段,即此为推荐驱动版本

  1. 安装推荐的驱动版本
sudo apt install {根据实际推荐的驱动版本选择} -y
  1. 重启机器
sudo reboot
  1. 验证安装成果
nvidia-smi

如果看到拥有正确的输出,即可以看到GPU 型号、驱动版本、CUDA 版本、显存等信息,即认为安装成功~

2.2 [重要]解决因为Ubuntu的无人值守升级导致Driver/library version mismatch的问题

{% note 注意 注意:本段内容因系统版本 / NVIDIA 驱动版本差异较大,请勿直接套用命令。 请按下方模板,把你自己终端里的输出粘贴给 AI,让它生成与你环境匹配的锁定方案。 经测试,Web 版免费 DeepSeek 即可完成此任务 orange %}

我在 Ubuntu 上使用 NVIDIA 显卡,遇到了 Failed to initialize NVML: Driver/library version mismatch 的问题。重启后版本已对齐。现在我想锁定当前版本的 NVIDIA 驱动包,防止无人值守升级在后台单独升级用户态库导致版本错配。

我的系统信息如下:

1. nvidia-smi 输出:

【在这里粘贴 nvidia-smi 的输出】

2. cat /proc/driver/nvidia/version 输出:

【在这里粘贴 /proc/driver/nvidia/version 的输出】

3. dpkg -l | grep -E '^ii.*nvidia' | awk '{print $2}' 输出:

【在这里粘贴已安装 NVIDIA 包列表的输出】

请帮我做以下几件事:

判断我安装的是 open 内核模块还是 专有(proprietary)内核模块版本。

根据我的实际包名,生成一条完整的 apt-mark hold 命令,锁定所有与驱动版本错配相关的 NVIDIA 包(包括用户态库 libnvidia-*、nvidia-utils-*、nvidia-compute-utils-*、内核模块 nvidia-dkms-*、nvidia-kernel-*、xserver-xorg-video-nvidia-* 等)。

说明哪些包不需要锁定(如 nvidia-prime、nvidia-settings、screen-resolution-extra、linux-firmware-nvidia-graphics 等辅助包),并解释原因。

给出验证锁定是否生效的命令。

给出未来想升级驱动时的解锁 → 升级 → 重启 → 验证 → 重新锁定的完整步骤。

提醒我锁定 NVIDIA 包会同时冻结这段时间的安全更新,建议每 1~2 个月手动更新一次。

请直接给出可复制粘贴的命令,不要泛泛而谈。

2.3 安装Ollama

使用Ollama官方推荐的命令安装:

curl -fsSL https://ollama.com/install.sh | sh

注意:此安装方式可能会受网络环境影响,请自行寻找解决方案

Tips:可以前往Ollama官方Github仓库的Release页面,获取最新的安装链接,再通过Github加速工具下载

安装完成后,可以使用

ollama --version

以验证安装是否成功

2.4 下载模型文件(以Qwen2.5:7b做示例)

在ssh环境中运行

ollama run qwen2.5:7b-instruct

即可自动拉取

在拉取到后半段时,可能会出现掉速情况,此时可以Ctrl+C取消拉取,再次运行ollama run qwen2.5:7b-instruct即可短暂恢复速度,重复此步骤可加快拉取速度

03. 对公网建立完整的鉴权,并分配访问密钥

对接公网部分使用的开源项目为AxonHub,并通过1Panel面板进行容器管理

3.1 通过1Panel安装AxonHub

由于1Panel官方应用商店并未上架AxonHub,本次导入了LiuShen的1Panel应用仓库,十分感谢柳哥贡献~
有兴趣的可以前往柳哥博客中继续探索~

  1. 添加1Panel定时任务,任务类型Shell脚本
    1Panel添加定时任务

脚本内容:

#!/bin/bash
LOCAL_APPS_DIR="/opt/1panel/resource/apps/local"
rm -rf /tmp/appstore_merge
mkdir -p /tmp/appstore_merge

echo "正在同步: https://v4.gh-proxy.org/https://github.com/willow-god/appstore"
git clone --depth=1 https://v4.gh-proxy.org/https://github.com/willow-god/appstore /tmp/appstore_merge/willow-appstore
if [ $? -eq 0 ]; then
    cp -rf /tmp/appstore_merge/willow-appstore/apps/* $LOCAL_APPS_DIR/
    echo "willow-appstore 同步成功"
else
    echo "willow-appstore 克隆失败"
fi

# 清理临时目录
rm -rf /tmp/appstore_merge
echo "所有任务完成"

如果需要额外添加okxlin仓库,可使用以下脚本:

#!/bin/bash
LOCAL_APPS_DIR="/opt/1panel/resource/apps/local"
rm -rf /tmp/appstore_merge
mkdir -p /tmp/appstore_merge

echo "正在同步: https://v4.gh-proxy.org/https://github.com/okxlin/appstore"
# 为 okxlin 仓库指定独立的本地目录 okxlin-appstore
git clone --depth=1 https://v4.gh-proxy.org/https://github.com/okxlin/appstore /tmp/appstore_merge/okxlin-appstore
if [ $? -eq 0 ]; then
    cp -rf /tmp/appstore_merge/okxlin-appstore/apps/* $LOCAL_APPS_DIR/
    echo "okxlin-appstore 同步成功"
else
    echo "okxlin-appstore 克隆失败"
fi

echo "正在同步: https://v4.gh-proxy.org/https://github.com/willow-god/appstore"
# 为 willow-god 仓库指定另一个独立的本地目录 willow-appstore
git clone --depth=1 https://v4.gh-proxy.org/https://github.com/willow-god/appstore /tmp/appstore_merge/willow-appstore
if [ $? -eq 0 ]; then
    cp -rf /tmp/appstore_merge/willow-appstore/apps/* $LOCAL_APPS_DIR/
    echo "willow-appstore 同步成功"
else
    echo "willow-appstore 克隆失败"
fi

# 清理临时目录
rm -rf /tmp/appstore_merge
echo "所有任务完成"
  1. 添加完计划任务后,需手动执行一次,同步时间可能会因网络差异而不同,请耐心等待,并检查同步后的输出
    手动同步步骤

若看到如下反馈,即证明同步成功:
同步成功反馈同步成功反馈

  1. 安装AxonHub
    请按照图片步骤依次点击应用商店 —> 同步本地应用 —> 勾选本地应用 —> 搜索AxonHub —> 点击'安装'

不知道啥原因,没法自动创建数据库,请先自行创建,然后填入对应的密码和用户名即可
不知道啥原因,没法自动创建数据库,请先自行创建,然后填入对应的密码和用户名即可
不知道啥原因,没法自动创建数据库,请先自行创建,然后填入对应的密码和用户名即可

3.2 进入AxonHub的Web界面并进行配置

按照AxonHub的官方引导配置完成后,按照图片顺序进行本地模型配置:
配置流程配置流程

配置好后,可以来到AxonHub中的测试场,随意询问一个问题,选择好模型后,查看AI是否有回复,若配置正确,则可以正常看到AI的回复
测试测试

3.3 套CDN并同步挂到域名上

强烈建议套CDN!原因有很多,最重要的是可以防护住你的源站IP不泄露
套CDN!套CDN!

源站如果是家中的机器,可以通过FRP内网穿透的方式来将请求传递至CDN上,再通过CDN节点部署至公网
这里不过多赘述,如需可以在评论区交流

3.4 生成对应的API Key,并在任何地方尽情的享用本地算力

进入AxonHub的API密钥页面,点击创建API Key,类型一定要选择用户

随后即可获得你的API Key
创建Key创建Key

⚠️ 请妥善保管您的 API 密钥,不要与未授权的人员分享。任何拥有此密钥的人都可以代表您发出请求。
⚠️ 请妥善保管您的 API 密钥,不要与未授权的人员分享。任何拥有此密钥的人都可以代表您发出请求。
⚠️ 请妥善保管您的 API 密钥,不要与未授权的人员分享。任何拥有此密钥的人都可以代表您发出请求。

04. 结语

第一次做AI类教程,或许再不久的未来,我会再出一期用GPT-SoVITS训练声音模型的教程,再说吧~~
我很懒惰的嘞!

不过声音克隆已经玩通过一次嘞嘿嘿
找不到啥图了,就只找到了个训练过程的图
训练训练

最后还是因为底噪去除的不彻底,导致整个模型训练出来说话声音有些沙哑,不过总体算成功了
当时光处理不同角色的音频剥离就耗费了挺长时间,不过嘛,还是很有意思的~
音频剥离音频剥离

也不知道大家对DSH有没有兴趣捏~
dshdsh

前一段时间也研究了一下下,我认为做项目还是老实用Codex吧~

最后
一定要保管好自己AI的API Key 不论是中转站还是本地模型,特别是中转站的API Key,千万不要抱有侥幸心理,如果有可能泄露的情况,果断重新生成新的API Key

祝大家蹬代码永远不降智!! 自己充的Claude永远不被封号!

梗图
梗图