中文 | English
Github: https://github.com/pearlfortune/cmpunlocker
解锁自有 NVIDIA CMP 170HX / 90HX / 50HX 的算力限制。Linux x86-64,需要 root。
不刷 VBIOS,刷不坏卡。驱动 / 内核 / VBIOS 不在下表内时,程序直接拒绝执行,不会写入。
已测试环境
| 型号 | PCI ID | 驱动 | 内核 | VBIOS |
|---|---|---|---|---|
| CMP 170HX | 10de:20c2 | 590.48.01 / 595.71.05 | 不限 | 不限 |
| CMP 170HX | 10de:20c2 | 610.43.03 | 不限 | 不限 |
| CMP 90HX | 10de:220d | Open 580.159.03 | 6.10.0-hiveos | 94.02.74.00.01 |
| CMP 90HX | 10de:220d | Open 610.43.03 | 6.10.0-hiveos | 94.02.74.00.01 / 94.02.74.00.05 |
| CMP 50HX | 10de:1e09 | Open 580.159.03 | 6.8.0-136-generic | 不限 |
| CMP 50HX | 10de:1e09 | Open 580.173.02 | 6.1.0-hiveos | 不限 |
| CMP 50HX | 10de:1e09 | Open 610.43.03(持久 stockflow) | 6.1.0-hiveos / 6.10.0-hiveos | 不限 |
查看自己的环境:
# 看有哪些 NVIDIA 卡,记下 PCI ID 和 BDF(形如 0000:01:00.0)lspci -Dnn | grep -i nvidia# 当前 NVIDIA 驱动版本modinfo -F version nvidia# 当前内核版本uname -r
1. 临时解锁
重启后失效,重跑一次即可;想恢复原状直接重启。
1.1 下载二进制
只需要下载这一次,下面所有型号共用。一条一条执行,方便看出哪一步失败。
# 进入临时目录cd /var/tmp# 下载二进制包wget -c https://github.com/pearlfortune/cmpunlocker/releases/download/v0.1.28/cmpunlocker-v0.1.28-linux-x64-cli.tar.gz# 下载校验文件wget -c https://github.com/pearlfortune/cmpunlocker/releases/download/v0.1.28/SHA256SUMS# 校验完整性,必须看到 OK;不 OK 就是没下全,删掉重下sha256sum -c SHA256SUMS --ignore-missing# 解压tar vxzf cmpunlocker-v0.1.28-linux-x64-cli.tar.gz# 进入解压出来的目录,后面所有命令都在这里执行cd cmpunlocker-v0.1.28-linux-x64-cli# 确认能跑起来,会打印版本号./cmpunlocker-rs --version
1.2 运行解锁命令
在上面解压出来的目录里执行,按你的卡选一段。
CMP 170HX(驱动 590.48.01 / 595.71.05)
# 解锁全部 170HX。--quiesce 会先停掉占用 GPU 的 miner / watchdog / Xorgsudo ./cmpunlocker-rs compute590 run \ --all-cmp170hx \ --acknowledge I-ACCEPT-590-FLEET-COMPUTE-TRANSACTION \ --quiesce
成功标志:RESULT=success_compute_active
CMP 170HX(驱动 610.43.03)
必须多带 --profile 610.43.03-compute,不带只会做只读检查,什么都不改。
# 610 驱动必须显式指定 compute profilesudo ./cmpunlocker-rs compute590 run \ --profile 610.43.03-compute \ --all-cmp170hx \ --acknowledge I-ACCEPT-590-FLEET-COMPUTE-TRANSACTION \ --quiesce
成功标志:RESULT=success_compute_active
CMP 90HX
# 解锁全部 90HXsudo ./cmpunlocker-rs compute90hx-v67 run \ --all-cmp90hx \ --acknowledge I-ACCEPT-90HX-V67-COMPUTE-UNLOCK# 复查状态,这一步是只读的,随时可以单独跑sudo ./cmpunlocker-rs compute90hx-v67 verify --all-cmp90hx --expect full
成功标志:PASS_CMP90HX_ALL_TARGETS_FULL_SPEED
CMP 50HX
用的是上面同一个 cmpunlocker-rs 二进制,不用另外下载。程序会按当前驱动 / 内核自动选内嵌方案(580.159.03 + 6.8.0-136-generic 或 580.173.02 + 6.1.0-hiveos)。
# 先做只读预检sudo ./cmpunlocker-rs compute50hx-v534 preflight --all-cmp50hx# 解锁全部 50HX。--probe-unsupported-subsystems 会顺带探测 OEM 卡,但只激活通过 full-speed 门的卡sudo ./cmpunlocker-rs compute50hx-v534 run \ --all-cmp50hx \ --probe-unsupported-subsystems \ --acknowledge I-ACCEPT-50HX-V534-COMPUTE-UNLOCK# 复查状态,这一步是只读的,随时可以单独跑sudo ./cmpunlocker-rs compute50hx-v534 verify --all-cmp50hx --expect full
成功标志:PASS_CMP50HX_ALL_TARGETS_V534_HANDOFF_FULL_SPEED,verify 后 PASS_CMP50HX_ALL_TARGETS_FULL_SPEED。
OEM / ID=4 卡(subsystem 1462:371f),以及 NVIDIA Open 610.43.03,使用 stockflow 临时路径。先按下面 2.3 的第一、二步下载并现场编译 artifact,然后执行:
# 安全探测:验证能到 full-speed,成功后自动恢复 stock driversudo "$BIN" compute50hx-v534 stockflow-probe \
--all-cmp50hx \
--stockflow-candidate "${ART}" \
--acknowledge I-ACCEPT-50HX-V534-COMPUTE-UNLOCK# 临时解锁:加载同一个 artifact 并留在内存中,不写 /lib/modulessudo "$BIN" compute50hx-v534 stockflow-run \
--all-cmp50hx \
--stockflow-candidate "${ART}" \
--acknowledge I-ACCEPT-50HX-V534-COMPUTE-UNLOCK# 只读复查sudo "$BIN" compute50hx-v534 verify --all-cmp50hx --expect full成功标志:PASS_CMP50HX_STOCKFLOW_RUN_FULL_SPEED,复查后为 PASS_CMP50HX_ALL_TARGETS_FULL_SPEED。该路径会停掉 miner / watchdog;解锁完成后再启动 miner。它不会安装或修改磁盘上的驱动,重启后失效,需要重新运行 stockflow-run。
2. 持久解锁
重启后仍然生效。需要在目标机现场编译内核模块,用的是单独的专用包。 换内核或换驱动后必须重新编译安装。
前置依赖:/lib/modules/$(uname -r)/build、make、gcc、patch、binutils,并关闭 Secure Boot。
2.1 CMP 90HX 持久算力解锁
CMP 90HX 的持久算力当前是 610.43.03 工程预览。v0.1.28 的 rejoin15-serialized-start 在 rejoin14 多卡状态隔离基础上串行化启动;8021 五卡机已完成 双重启验证,两轮均 5/5 full-speed、无 Xid、FRTS error 为 0。不创建 systemd 服务; 换内核、换驱动或 94.02.74.00.05 仍需重新验证。
环境:只支持 NVIDIA Open 610.43.03 + kernel 6.10.0-hiveos + CMP 90HX 10de:220d / 10de:1555 + VBIOS 94.02.74.00.01。
第一步,确认当前环境
# 当前内核必须是 6.10.0-hiveosuname -r# 当前 NVIDIA 驱动必须是 610.43.03modinfo -F version nvidia# 必须是 open kernel module;通常会看到 Dual MIT/GPLmodinfo -F license nvidia# 确认能看到 CMP 90HXnvidia-smi -L
第二步,下载并校验 90HX stockflow 包
VERSION=v0.1.28
ASSET="cmpunlocker-${VERSION}-linux-x64-90hx-stockflow"BASE="https://github.com/pearlfortune/cmpunlocker/releases/download/${VERSION}"cd /var/tmp# 下载 90HX 持久解锁包wget -c "${BASE}/${ASSET}.tar.gz"# 下载校验文件并校验,必须看到 OKwget -c "${BASE}/SHA256SUMS"sha256sum -c SHA256SUMS --ignore-missing# 解压并进入 90HX stockflow 目录tar vxzf "${ASSET}.tar.gz"cd "${ASSET}/stockflow/610.43.03"第三步,准备 NVIDIA 官方源码并构建 artifact
# 准备 NVIDIA 官方 open kernel source;也可以替换成你已经下载好的本地路径wget -c https://download.nvidia.com/XFree86/NVIDIA-kernel-module-source/NVIDIA-kernel-module-source-610.43.03.tar.xz
SOURCE="${PWD}/NVIDIA-kernel-module-source-610.43.03.tar.xz"# 构建 rejoin15-serialized-start artifact;低内存机器建议串行编译JOBS=1 CMP90_STOCKFLOW_VARIANT=rejoin15 CMP90_STOCKFLOW_LOW_MEM_G_BINDATA=1 \
./build-candidate.sh --source-tarball "${SOURCE}"ART="artifacts/610.43.03-$(uname -r)-rejoin15-serialized-start"# 确认 artifact 和当前驱动、内核匹配modinfo -F version "${ART}/nvidia.ko"modinfo -F vermagic "${ART}/nvidia.ko"strings "${ART}/nvidia.ko" | grep CMP90_STOCKFLOW_REJOIN15第四步,安装并重启
# 安装到隔离 updates 目录;这一步不热卸载驱动,成功后重启sudo ./stockflow-install.sh \
--artifact "${ART}" \
--acknowledge I-ACCEPT-90HX-STOCKFLOW-PERSISTENT-INSTALL
sudo reboot第五步,重启后验证
cd /var/tmp/cmpunlocker-v0.1.28-linux-x64-90hx-stockflow/stockflow/610.43.03# 重启后只读复查BIN=../../cmpunlocker-rs sudo "$BIN" compute90hx-v67 verify --all-cmp90hx --expect full# 确认当前加载路径指向 stockflow 目录modinfo -n nvidia
成功标志:PASS_CMP90HX_FULL_SPEED 或 PASS_CMP90HX_ALL_TARGETS_FULL_SPEED。
v0.1.25 起,安装脚本会写 /etc/depmod.d/cmpunlocker-90hx-stockflow.conf,确保重启时优先加载 updates/cmpunlocker-90hx-stockflow 里的模块,而不是 DKMS stock 模块。重复执行安装命令如果返回 PASS_CMP90HX_STOCKFLOW_ALREADY_INSTALLED,说明当前已经是持久 stockflow 解析路径。
恢复 stock 解析路径
cd /var/tmp/cmpunlocker-v0.1.28-linux-x64-90hx-stockflow/stockflow/610.43.03# 恢复脚本只移除持久模块解析路径,不热卸载当前驱动;执行后重启sudo ./stockflow-restore.sh --acknowledge I-ACCEPT-90HX-STOCKFLOW-RESTORE sudo reboot# 重启后确认回到 stock 模块modinfo -n nvidia# 可选:确认已经回到 locked 状态cd /var/tmp/cmpunlocker-v0.1.28-linux-x64-90hx-stockflow/stockflow/610.43.03 BIN=../../cmpunlocker-rs sudo "$BIN" compute90hx-v67 verify --all-cmp90hx --expect locked
2.2 CMP 170HX 持久显存解锁
解锁被限制的可见显存容量,重启后仍生效。实测机器上每张卡从 8192 MiB 提升到 65536 MiB;实际容量以你自己的卡为准。
环境:只支持 stock 610.43.03 open kernel module,必须在目标机现场编译,不能复用别的机器编好的 .ko。
第一步,把驱动换成 stock 610.43.03(HiveOS 示例):
cd /var/tmp# 下载 NVIDIA 官方驱动 runfilewget -c https://download.nvidia.com/XFree86/Linux-x86_64/610.43.03/NVIDIA-Linux-x86_64-610.43.03.run# 用 HiveOS 自带工具升级驱动;非 HiveOS 用你系统自己的驱动安装方式/hive/sbin/nvidia-driver-update /var/tmp/NVIDIA-Linux-x86_64-610.43.03.run# 升级完确认版本是 610.43.03modinfo -F version nvidia
第二步,下载并解压到普通用户目录。
编译必须用普通用户跑,用 root 会被拒绝:
# 建一个专门用来编译的普通用户(已存在就跳过)id cmpbuild >/dev/null 2>&1 || useradd -m -s /bin/bash cmpbuildcd /home/cmpbuild# 下载显存解锁专用包wget -c https://github.com/pearlfortune/cmpunlocker/releases/download/v0.1.28/cmpunlocker-v0.1.28-linux-x64-170hx-64g.tar.gz# 解压tar vxzf cmpunlocker-v0.1.28-linux-x64-170hx-64g.tar.gz# 把目录交给编译用户,否则下一步没有写权限chown -R cmpbuild:cmpbuild /home/cmpbuild/cmpunlocker-v0.1.28-linux-x64-170hx-64g
包内已自带 NVIDIA 官方 610.43.03 open kernel 源码,不用另外下载。
第三步,编译(普通用户)+ 安装(root)+ 重启:
# 用普通用户编译内核模块,耗时几分钟su -s /bin/bash cmpbuild -c 'cd /home/cmpbuild/cmpunlocker-v0.1.28-linux-x64-170hx-64g./build.sh --all-supported-cmp170hx \--acknowledge I-ACCEPT-UNVERIFIED-610-MEMORY-KERNEL-BUILD'cd /home/cmpbuild/cmpunlocker-v0.1.28-linux-x64-170hx-64g# 用 root 安装模块,会写 /lib/modules 并更新 initramfssudo ./install.sh --all-supported-cmp170hx \ --acknowledge I-ACCEPT-UNVERIFIED-610-MEMORY-KERNEL-INSTALL# 必须重启才生效sudo reboot
第四步,重启后验证:
# 每张卡的显存容量应该变大nvidia-smi# 确认加载的是解锁后的模块,不是原厂模块modinfo -n nvidia
成功标志:nvidia-smi 显示的显存容量高于解锁前,且 modinfo 输出里包含 updates/cmpunlocker-610-memory/nvidia.ko。
恢复原状
分两阶段。第一阶段只移除模块目录并重建 initramfs,不会热卸载当前驱动:
cd /home/cmpbuild/cmpunlocker-v0.1.28-linux-x64-170hx-64g# 第一阶段:移除模块sudo ./remove.sh --acknowledge REMOVE-CMPUNLOCKER-610-MEMORY-WITHOUT-HOT-UNLOAD
然后关机、拔 AC 电、冷启动,再跑第二阶段确认:
cd /home/cmpbuild/cmpunlocker-v0.1.28-linux-x64-170hx-64g# 第二阶段:冷启动后确认已回到原厂状态sudo ./remove.sh --confirm-cold-cycle \ --acknowledge I-CONFIRM-FULL-AC-POWER-CYCLE-AFTER-610-MEMORY-REMOVAL
2.3 CMP 50HX 持久算力解锁
把 50HX 的算力解锁做成 patched open driver,重启后仍然生效。与上面的 stockflow 临时路径 使用同一个现场编译 artifact,但这里会把模块安装到磁盘。换内核或换驱动后必须重新编译。
环境:只支持 NVIDIA Open 580.173.02 + kernel 6.1.0-hiveos,或 NVIDIA Open 610.43.03 + kernel 6.1.0-hiveos / 6.10.0-hiveos,搭配 CMP 50HX 10de:1e09 (subsystem 10de:1554 或 1462:371f)。
v0.1.27 修复了部分 warm/FLR 热切换路径返回 Booter mailbox1=4 时被误判失败的问题;只有 WPR、FECS、RESET 和速度状态全部精确匹配时才接受该返回值。610.43.03 + 6.10.0-hiveos 已在 6 张 1462:371f 上通过单卡探测、六卡探测、持久安装及连续 3 轮重启验证,每轮均为 6/6 full-speed,且无 Booter、GSP、RmInitAdapter 或 Xid 硬错误。
前置依赖同上:/lib/modules/$(uname -r)/build、make、gcc、patch、binutils,并关闭 Secure Boot。
第一步,下载并校验 50HX stockflow 包
VERSION=v0.1.28
ASSET="cmpunlocker-${VERSION}-linux-x64-50hx-stockflow"BASE="https://github.com/pearlfortune/cmpunlocker/releases/download/${VERSION}"cd "$HOME"# 下载 50HX 持久解锁包wget -c "${BASE}/${ASSET}.tar.gz"# 下载校验文件并校验,必须看到 OKwget -c "${BASE}/SHA256SUMS"sha256sum -c SHA256SUMS --ignore-missing# 解压并进入包顶层,包顶层自带 ./cmpunlocker-rstar vxzf "${ASSET}.tar.gz"cd "${ASSET}"BIN=./cmpunlocker-rs第二步,按当前驱动取官方源码并现场编译 artifact
# 按当前 NVIDIA 驱动选择源码和构建目录DRIVER="$(modinfo -F version nvidia)"case "${DRIVER}" in
580.173.02) SOURCE="NVIDIA-kernel-module-source-580.173.02.tar.xz"; WORK="stockflow/580.173.02" ;;
610.43.03) SOURCE="NVIDIA-kernel-module-source-610.43.03.tar.xz"; WORK="stockflow/610.43.03" ;; *) echo "unsupported 50HX stockflow driver: ${DRIVER}" >&2; exit 2 ;;esac# 下载 NVIDIA 官方 open kernel source(公开地址,目标机可直接下)wget -c "https://download.nvidia.com/XFree86/NVIDIA-kernel-module-source/${SOURCE}"# 现场编译 stock-flow artifact,耗时几分钟cd "${WORK}"./build-candidate.sh --source-tarball "../../${SOURCE}"cd ../..# 编好的 artifact 路径ART="${WORK}/artifacts/${DRIVER}-$(uname -r)-v551-stockflow"第三步,先非持久探测,再持久安装并重启
# 先非持久探测,确认 artifact 能进入 full-speed;成功后会自动恢复原 stock driversudo "$BIN" compute50hx-v534 stockflow-probe \
--all-cmp50hx \
--stockflow-candidate "${ART}" \
--acknowledge I-ACCEPT-50HX-V534-COMPUTE-UNLOCK# 持久安装:备份当前模块 + 安装 artifact 里的 5 个 .ko;不自动重启sudo "$BIN" compute50hx-v534 stockflow-install \
--stockflow-candidate "${ART}" \
--acknowledge I-ACCEPT-50HX-V534-COMPUTE-UNLOCK# 记下上一条命令输出里的 BACKUP_DIR=,恢复时要用,然后重启sudo reboot第四步,重启后验证
cd "$HOME/cmpunlocker-v0.1.28-linux-x64-50hx-stockflow"BIN=./cmpunlocker-rs# 确认能看到全部 50HXnvidia-smi -L# 只读复查,每张卡都应 full-speedsudo "$BIN" compute50hx-v534 verify --all-cmp50hx --expect full
成功标志:PASS_CMP50HX_ALL_TARGETS_FULL_SPEED。换内核或换驱动后必须重新执行第二步的 build-candidate.sh。
恢复安装前模块
用第三步 stockflow-install 输出里打印的 BACKUP_DIR(形如 /var/lib/cmpunlocker-rs/transactions/compute50hx-v534-stockflow-install-<时间戳>/installed-module-backup):
cd "$HOME/cmpunlocker-v0.1.28-linux-x64-50hx-stockflow"BIN=./cmpunlocker-rs# 恢复安装前的 stock 模块;执行后重启sudo "$BIN" compute50hx-v534 stockflow-restore \ --backup-dir /var/lib/cmpunlocker-rs/transactions/compute50hx-v534-stockflow-install-<时间戳>/installed-module-backup \ --acknowledge I-ACCEPT-50HX-V534-COMPUTE-UNLOCK sudo reboot
说明
单卡解锁:把
--all-cmp170hx/--all-cmp90hx/--all-cmp50hx换成--target-bdf 0000:01:00.0,BDF 用第一步lspci查到的。运行时会卸载并重新加载 NVIDIA 驱动、停掉 miner,别在生产窗口跑。
出错时看
/var/lib/cmpunlocker-rs/transactions/下的 JSON 报告,里面有完整失败原因。完整参数:
./cmpunlocker-rs compute590 help(compute90hx-v67、compute50hx-v534同理)。
内核安装:
wget tar -xvf linux-6.1.0.tar.xz cd linux-6.1.0 make menuconfig # 配置你的内核选项(可选) make -j$(nproc) # 使用所有可用核心编译内核 update-grub # 或其他适用于你的系统的命令,例如 update-grub2
查看其他内核
dpkg --list | grep linux-image
卸载特定内核:
如果你想要卸载6.1.0-hiveos内核,首先需要确保它没有被设置为默认启动内核。你可以通过以下命令查看默认启动内核:
awk -F\' '$1=="menuentry " {print $2}' /etc/grub/grub.cfg然后,你可以使用apt来卸载该内核,例如:
sudo apt-get remove linux-image-6.1.0-hiveos
更新引导加载器:
卸载内核后,你需要更新系统的引导加载器配置,以确保下次启动时使用的是其他内核。对于使用grub的系统,可以使用以下命令更新配置:
sudo update-grub
重启后查看是否是新得内核
uname -r
免责声明
本工具仅供在你自己拥有的硬件上使用。
修改 GPU 运行参数可能导致硬件失去保修。
作者不对任何硬件损坏、数据丢失或收益损失承担责任,使用风险自负。
MIT License。第三方组件声明见 NOTICE。
https://github.com/zerobitcopy/cmp-easyunlock
https://github.com/scvxzf1/cmp90hx-idle-lock
https://github.com/WildFlash1st/cmp90hx-unlock