长期以来,一直有骗局和恶意软件声称能可以提升系统的内存效率或让系统运行更快,但由Amogh Munikote开发的cmpunlocker,对于CMP 170HX挖矿GPU来说,确实兑现了这个可疑的承诺,可以黑出更多显存与算力~~~
本文中搭建了自己的NVIDIA CMP 170HX(还借了几块),执行了解锁操作。
主要内容:
1. NVIDIA CMP 170HX的故事
CMP 170HX是NVIDIA加密货币挖矿处理器(CMP)GPU系列中的旗舰产品。该系列(CMP 170HX除外)于2021年2月18日在一篇博客文章中宣布,文章的第一句话是“我们是玩家” 。由于矿工的狂热兴趣,RTX 3060发布时具备检测并限制挖矿计算任务的能力,NVIDIA还宣布了CMP 30HX、40HX、50HX和90HX,以将矿工的注意力从游戏GPU上转移开。
除CMP 170HX外,CMP系列中的所有产品都基于消费级GPU(可能是GTX 1660 Super、RTX 2060 Super、RTX 2080 Ti和RTX 3080)。然而,它们取消了显示输出,并且由于制造缺陷或故意停用而具有较低的性能能力。
NVIDIA CMP 170HX 10 GB PCB
NVIDIA A100 80GB PBC
CMP 170HX于2021年秋季(更为低调地)发布,基于GA100,这是用于A100显卡的数据中心处理器。GA100最多配备80 GB封装式HBM2e内存,带宽高达2 TB/s,并拥有大量核心,适合数据中心所需的各种多用途计算任务。然而,与其他CMP型号一样,CMP 170HX只获得了分档较差的处理器版本,随后又通过软件和硬件实现被进一步锁定。
关于GA100的更多细节可在NVIDIA开发者博客上找到,其中包括一个有趣的事实:一款完全启用(全部128个SM)的GA100处理器从未在消费级或企业级产品中发布。甚至CMP 170HX本身也经过了分档,有8 GB和10 GB版本,分别配备四个和五个可工作的HBM2e堆栈。
NVIDIA开发者博客:
https://developer.nvidia.com/blog/nvidia-ampere-architecture-in-depth/
NVIDIA CMP 170HX 后挡板
目前没有关于CMP 170HX销量的官方来源,但Xing Kangwei在2025年的论文中估计,CMP 170HX显卡的销量在18,000到36,000块之间。这意味着大量硬件从4,299美元的发布建议零售价,跌至一个月前(2026年6月)仅几百美元的二手价格。而现在(2026年8月),它们在eBay上的售价更像是1,300至1,600美元,但这个数字还在持续上涨,进入2026年9月,有些已经卖到超过2,000美元。
Xing Kangwei, Exploration of Cryptocurrency Mining-Specific GPUs in AI Applications: A Case Study of CMP 170HX:
https://arxiv.org/abs/2505.03782
还有更多历史和细节可以深入探讨,但最好由Amogh Munikote的170th Street以及niconiconi在2023年10月所做的详尽评测和总结来完成。
Github amoghmunikote/170th-Street,
https://github.com/amoghmunikote/170th-Street/blob/master/introduction/history-and-timeline.mdniconiconi's blog, All GB/s without FLOPS - Nvidia CMP 170HX Review, Performance Lockdown Workaround, Teardown, Watercooling, and Repair:
https://niconiconi.neocities.org/tech-notes/nvidia-cmp-170hx-review/
2. CMP 170HX与其他GPU对比
下表展示了CMP 170HX与其他一系列GPU卡之间的对比。
请注意CMP 170HX极高的显存带宽,这得益于HBM2e显存与处理单元放置在同一封装上。从我们的表格来看,只有RTX 5090和RTX Pro 6000 Blackwell凭借其GDDR7显存才能超越这已有五年之久的HBM2e带宽。RTX 5080只有960 GB/s的带宽。
另一个值得注意的字段是二手价格,主要通过搜索eBay上的已售出商品得出。(解锁后的)CMP 170HX每GB显存的美元价格无人能及,具体取决于二手价格如何发展。
3. 测试系统
我们在下表中列出的系统用于搭建、探索和视频制作。最值得注意的组件是主板,它具有七个PCIe Gen4 x16插槽,足以让我们连接所有显卡。我们使用PCIe Gen4和Gen5延长线连接所有显卡,我们认为它们可能是导致我们部分RTX 3090 Ti不稳定的原因。
除此之外,只要系统不是明显的瓶颈拖后腿,它对性能没有太大影响。我们的Threadripper应该没问题。
RTX 3090 Ti(24 GB) GTX 1650(4 GB) |
由于CMP 170HX是一款被动式前后贯穿气流显卡,没有风扇,因此需要单独的散热解决方案。我们使用了120 mm Noctua NF-F12 industrialPPC-3000和NA-FC1风扇控制器,以及我们设计的导风罩。
CMP 170HX的TDP为250 W,但在锁定状态下,我们并未看到它在LLM工作负载中达到这一数值。在LLM推理负载下,它仅达到约90-150 W。只有当我们解锁计算能力后,才需要施加显著散热(改用3000 RPM的120 mm风扇),以保持在CMP 170HX的85°C温度限制以下。
4. 解锁 Emancipation
Munikote的170th street详述了更多历史,但针对CMP 170HX的变通方案/解锁工作自2023年以来一直在进行,并在2023年、2025年和2026年发表了几篇论文。Munikote指出,Xing Kangwei的这篇论文是首次对将CMP 170HX用作LLM硬件进行重大探索,而我们发现Jon Pry在2026年6月发表的一篇论文探讨了用于解锁处理器能力的方法。
论文地址:
https://www.researchgate.net/publication/408132536_A_Canary_in_the_Crypto_Mine_Defeating_Stack_Protection_in_a_GPU_Secure_Coprocessor
我推荐阅读Jon Pry的论文,因为它提供了关于他们所使用漏洞利用的有趣细节。值得庆幸的是,NVIDIA对内存和计算的禁用都不是通过永久性硬件熔丝完成的。
虽然这些显卡的显存容量和计算能力可以被解锁,但还有一些能力尚未被开放。其中可能最值得注意的是PCIe Gen3和片上ECC。如果/当这些能力可用时,它们将是受欢迎的解锁项,但显存已经解锁,而那 literally 正是钱所在之处。
请注意,Jon Pry使用的解锁方法和实现是显卡特定的,但具有持久性。每块显卡的解锁会在重启之间保持,但必须对每块CMP 170HX分别执行。cmpunlocker是一种驱动级修改,每个系统需要执行一次(以及在内核更新之后),但之后任何连接到该系统的CMP 170HX都会被解锁。
5. 解锁过程
cmpunlocker的Github仓库包含了先决条件信息和安装说明,但我们所采取的具体步骤如下。
5.1. 完成先决条件
解锁之前,已连接的CMP 170HX可能不会出现在nvidia-smi中,或者会显示为“NVIDIA Graphics Device”。
禁用安全启动:在BIOS中禁用安全启动,并用以下命令确认。
> mokutil --sb-state SecureBoot Disabled
移除现有的Nvidia驱动:
sudo apt purge '^nvidia-.*'
将Nouveau加入黑名单:在/etc/modprobe.d中创建一个blacklist-nouveau.conf文件,内容如下。这将防止开源nouveau驱动干扰第一方NVIDIA驱动。
blacklist nouveau options nouveau modeset=0
重建initramfs:重建初始RAM文件系统(initramfs),这是引导加载程序在启动时加载的一个小型(临时)文件系统。这确保它针对新的驱动和位置进行了更新。然后重启系统。
sudo update-initramfs -u -k all sudo reboot
将apt求解器固定到NVIDIA驱动610.43.02/03:我们将使用APT(高级软件包工具)下载并安装NVIDIA驱动,因此需要指定我们想要的特定NVIDIA驱动版本。
相关且兼容的驱动版本可能会更新,因此最好在安装前查看cmpunlocker的Github仓库。
sudo tee /etc/apt/preferences.d/nvidia-610-43-02 <<'EOF' Package: *nvidia* Pin: version 610.43.02-1ubuntu1 Pin-Priority: 1001 EOF
安装610.32.02/03驱动:
sudo apt update sudo apt install nvidia-open nvidia-persistenced
5.2. 安装cmpunlocker
克隆Github仓库:
git clone https://github.com/amoghmunikote/cmpunlocker.git
运行安装脚本:
cd cmpunlocker sudo ./install.sh
重启系统:然后你可以用nvidia-smi确认设备识别情况。NVIDIA CMP 170HX设备现在应该被识别为拥有64 GB(65,536 MiB)内存。
5.3. 卸载cmpunlocker(cmplocker?)
如果你想再次“重新锁定”设备,可以使用附带的remove.sh脚本来完成。
sudo ./remove.sh --yes
解锁让我们的系统处于一种有点奇怪的状态,因此我们建议在此过程之后完全移除并重新安装NVIDIA驱动。如果你只是想恢复到解锁状态,那么可以按照上文记录的解锁过程操作。
6. 显存测试
解锁CMP 170HX后,第一件事就是测试显存。这些GA100处理器被分档是有原因的,绝对不能保证显存一定能正常工作。虽然CMP 170HX的8 GB(64 GB)版本能够解锁并使用其全部64 GB显存,但一直存在稳定性问题,这限制了10 GB型号只能可靠地启用其理论80 GB中的40 GB。
显存出现故障的CMP 170HX可能仍能用于某些任务,但也可能只是“随机”失败。在cmpunlocker的Discord上曾有一些关于“隔离”坏内存块的讨论,但我认为目前还没有完整的解决方案。
我们使用了来自GpuZelonograd的memtest_vulkan工具来对解锁后的64 GB内存进行压力测试。它会进行标准的五分钟测试并给出通过/失败结果,这足以暴露我们那块存在内存故障的显卡,但在将显卡投入生产之前应该运行更长时间的测试(memtest建议两小时)。
以下是成功的CMP 170HX内存测试输出。(请原谅格式问题)
user@computer:~/Documents/hx170-test$ ./memtest_vulkan https://github.com/GpuZelenograd/memtest_vulkan v0.5.0 by GpuZelenograd To finish testing use Ctrl+C 1: Bus=0x61:00 DevId=0x2203 24GB NVIDIA GeForce RTX 3090 Ti 2: Bus=0x2E:00 DevId=0x20C2 64GB NVIDIA CMP 170HX 3: Bus=0x01:00 DevId=0x1F82 4GB NVIDIA GeForce GTX 1650 4: Bus=0x00:00 DevId=0x0000 124GB llvmpipe (LLVM 21.1.8, 256 bits) Override index to test:2 Standard 5-minute test of 2: Bus=0x2E:00 DevId=0x20C2 64GB NVIDIA CMP 170HX 1 iteration. Passed 0.1556 seconds written: 58.0GB 770.0GB/sec checked: 61.6GB 767.2GB/sec 9 iteration. Passed 1.1126 seconds written: 464.0GB 928.3GB/sec checked: 493.0GB 804.6GB/sec 45 iteration. Passed 5.0922 seconds written: 2088.0GB 911.9GB/sec checked: 2218.5GB 791.6GB/sec 256 iteration. Passed 30.0452 seconds written:12238.0GB 907.7GB/sec checked:13002.9GB 785.1GB/sec 467 iteration. Passed 30.0701 seconds written:12238.0GB 909.0GB/sec checked:13002.9GB 783.0GB/sec 674 iteration. Passed 30.0951 seconds written:12006.0GB 892.2GB/sec checked:12756.4GB 766.7GB/sec 867 iteration. Passed 30.0525 seconds written:11194.0GB 837.3GB/sec checked:11893.6GB 712.9GB/sec 1051 iteration. Passed 30.1678 seconds written:10672.0GB 798.4GB/sec checked:11339.0GB 674.9GB/sec 1231 iteration. Passed 30.1442 seconds written:10440.0GB 781.2GB/sec checked:11092.5GB 661.1GB/sec 1408 iteration. Passed 30.0375 seconds written:10266.0GB 772.2GB/sec checked:10907.6GB 651.4GB/sec 1583 iteration. Passed 30.0850 seconds written:10150.0GB 763.0GB/sec checked:10784.4GB 642.6GB/sec 1758 iteration. Passed 30.1488 seconds written:10150.0GB 760.8GB/sec checked:10784.4GB 641.6GB/sec Standard 5-minute test PASSed! Just press Ctrl+C unless you plan long test run. Extended endless test started; testing more than 2 hours is usually unneeded use Ctrl+C to stop it when you decide it's enough 2126 iteration. Passed 30.0068 seconds written:10382.0GB 780.3GB/sec checked:11030.9GB 660.5GB/sec 2302 iteration. Passed 30.0696 seconds written:10208.0GB 766.7GB/sec checked:10846.0GB 647.3GB/sec 2477 iteration. Passed 30.1391 seconds written:10150.0GB 762.2GB/sec checked:10784.4GB 641.1GB/sec 2650 iteration. Passed 30.1902 seconds written:10034.0GB 754.2GB/sec checked:10661.1GB 631.4GB/sec ^C memtest_vulkan: no any errors, testing PASSed. press any key to continue...
这是一个CMP 170HX内存测试失败的示例。
user@computer:~/Documents/hx170-test$ ./memtest_vulkan https://github.com/GpuZelenograd/memtest_vulkan v0.5.0 by GpuZelenograd To finish testing use Ctrl+C 1: Bus=0x61:00 DevId=0x20C2 64GB NVIDIA CMP 170HX 2: Bus=0x41:00 DevId=0x2203 24GB NVIDIA GeForce RTX 3090 Ti 3: Bus=0x2E:00 DevId=0x20C2 64GB NVIDIA CMP 170HX 4: Bus=0x02:00 DevId=0x1F82 4GB NVIDIA GeForce GTX 1650 5: Bus=0x01:00 DevId=0x2203 24GB NVIDIA GeForce RTX 3090 Ti 6: Bus=0x00:00 DevId=0x0000 124GB llvmpipe (LLVM 21.1.8, 256 bits) Override index to test:1 Standard 5-minute test of 1: Bus=0x61:00 DevId=0x20C2 64GB NVIDIA CMP 170HX 1 iteration. Passed 0.1343 seconds written: 58.0GB 984.2GB/sec checked: 61.6GB 817.2GB/sec 9 iteration. Passed 1.0821 seconds written: 464.0GB 959.4GB/sec checked: 493.0GB 823.7GB/sec 47 iteration. Passed 5.1294 seconds written: 2204.0GB 963.5GB/sec checked: 2341.8GB 824.0GB/sec Error found. Mode INITIAL_READ, total errors 0x1 out of 0x3A000000 (0.00000010%) Errors address range: 0x39FB24534..=0x39FB24537 iteration:107 values range: 0x3A007C81..=0x3A007C81 FFFFFFFF-like count:0 bit-level stats table: 0x0 0x1 0x2 0x3| 0x4 0x5 0x6 0x7| 0x8 0x9 0xA 0xB| 0xC 0xD 0xE 0xF SinglIdx | | | 0x1? 1 | | | TogglCnt 1 | | | 1sInValu | | 1| Error found. Mode INITIAL_READ, total errors 0x1 out of 0x3A000000 (0.00000010%) Errors address range: 0x39FB24534..=0x39FB24537 iteration:178 values range: 0xE8A0A935..=0xE8A0A935 FFFFFFFF-like count:0 bit-level stats table: 0x0 0x1 0x2 0x3| 0x4 0x5 0x6 0x7| 0x8 0x9 0xA 0xB| 0xC 0xD 0xE 0xF SinglIdx | | | 0x1? 1 | | | TogglCnt 1 | | | 1sInValu | | | 1 266 iteration. Passed 30.0313 seconds written:12702.0GB 948.8GB/sec checked:13495.9GB 810.9GB/sec 480 iteration. Passed 30.1285 seconds written:12412.0GB 923.7GB/sec checked:13187.8GB 790.1GB/sec 690 iteration. Passed 30.0185 seconds written:12180.0GB 910.8GB/sec checked:12941.2GB 777.5GB/sec 898 iteration. Passed 30.0613 seconds written:12064.0GB 902.2GB/sec checked:12818.0GB 768.0GB/sec 1103 iteration. Passed 30.1233 seconds written:11890.0GB 887.1GB/sec checked:12633.1GB 755.6GB/sec 1308 iteration. Passed 30.0332 seconds written:11890.0GB 890.2GB/sec checked:12633.1GB 757.6GB/sec 1511 iteration. Passed 30.1205 seconds written:11774.0GB 878.6GB/sec checked:12509.9GB 748.2GB/sec Error found. Mode INITIAL_READ, total errors 0x1 out of 0x3A000000 (0.00000010%) Errors address range: 0x39FB24534..=0x39FB24537 iteration:1656 values range: 0x19A07338..=0x19A07338 FFFFFFFF-like count:0 bit-level stats table: 0x0 0x1 0x2 0x3| 0x4 0x5 0x6 0x7| 0x8 0x9 0xA 0xB| 0xC 0xD 0xE 0xF SinglIdx | | | 0x1? 1 | | | TogglCnt 1 | | | 1sInValu | | | 1 Error found. Mode INITIAL_READ, total errors 0x1 out of 0x3A000000 (0.00000010%) Errors address range: 0x39FB24534..=0x39FB24537 iteration:1673 values range: 0x93204506..=0x93204506 FFFFFFFF-like count:0 bit-level stats table: 0x0 0x1 0x2 0x3| 0x4 0x5 0x6 0x7| 0x8 0x9 0xA 0xB| 0xC 0xD 0xE 0xF SinglIdx | | | 0x1? 1 | | | TogglCnt 1 | | | 1sInValu | | 1 | 1707 iteration. Passed 30.1499 seconds written:11368.0GB 847.5GB/sec checked:12078.5GB 721.7GB/sec 1899 iteration. Passed 30.0810 seconds written:11136.0GB 834.5GB/sec checked:11832.0GB 706.9GB/sec Standard 5-minute test fail - ERRORS FOUND Extended endless test started; testing more than 2 hours is usually unneeded use Ctrl+C to stop it when you decide it's enough 2301 iteration. Passed 30.0367 seconds written:11600.0GB 868.7GB/sec checked:12325.0GB 738.8GB/sec ...
那块显存有问题的CMP 170HX是借给我们的,我们被告知显存可能会在更高工作温度下开始工作。我们把测试运行了一个多小时,让温度达到85°C,但仍然存在测试失败。
我们还要提醒,现在可能不是从二手市场购买CMP 170HX的安全时机。人们很可能在尽可能多地购买,进行显存测试,然后把显存不稳定的那些转卖出去。你或许可以要求提供显存测试,但这并非万无一失的方法,无法确保寄给你的那块处于“完全”正常工作状态。
7. 浮点计算
除了被锁定的显存外,CMP 170HX另一个值得注意的限制是浮点计算性能。NVIDIA将其锁定,使得CMP系列非常适合加密货币挖矿(需要高内存带宽和整数计算),但不能用于更通用的计算。NVIDIA想让玩家满意,但又不想侵蚀自家“企业定价”A100的销量。
正如Jon Pry的论文所概述,并通过下面的OpenCL-Benchmark结果所示,单/双精度浮点和INT8计算性能已被显著限制。
7.1. mixbench
在锁定的CMP 170HX、解锁的CMP 170HX和一块RTX 3090 Ti上运行mixbench,我们得到如下结果。请注意,锁定的CMP 170HX的显卡标识为“NVIDIA Graphics Device”。
锁定的CMP 170HX
解锁的CMP 170HX
RTX 3090 Ti
7.2. OpenCL-Benchmark
使用OpenCL-Benchmark,我们得到如下结果。请注意锁定的CMP 170HX与解锁后的CMP 170HX在FP64和FP32计算方面的显著差异。
锁定的CMP 170HX
尽管测试报告为PCIe Gen1 x16,但这块CMP 170HX只启用了四条PCIe通道,因此带宽为0.85 GB/s。
解锁的CMP 170HX
这块CMP 170HX实际上确实启用了全部十六条PCIe通道,Gen2。
RTX 3090 Ti
8. PCIe Gen1 x4 -> PCIe Gen2 x16
唯一需要硬件修改的CMP 170HX解锁,是启用另外十二条PCIe通道,以从4条升级到16条。不过即便这一点也比你想象的要容易。正如170th-Street项目仓库所概述的,PCIe通道在板上已经存在,只需要焊接电容即可。
所需的电容是0402型号,因此这种焊接并不简单,但可以做到。这项工作使用纳米镊子焊接烙铁和放大镜完成,然后在返工后探测了连通性和电容。
不过硬件改造只能让你完成一半,这仍然只是PCIe 1x16。虽然NVIDIA A100支持PCIe Gen4,但CMP 170HX已被禁用至PCIe Gen1兼容性,不过cmpunlocker可以启用PCIe Gen2。
8.1. 模型加载——定性
我们对将LLM加载到GPU内存所需的时间做了一个非常临时的测试,所以这里我们会给出稍微好一些的数据。它们仍然相当临时,但这次我拉平了条件,确保它们不是“冷加载”,并且我们使用的是约16 GB的Qwen 3.6 27B Q4_K_M模型。
仍然不是最好的指标,但大多数工作流程本来也不需要频繁重新加载模型。
8.2. NVbandwidth
使用NVbandwidth测量系统内存与GPU VRAM之间的通信带宽,我们得到如下结果。请注意,这些测试使用的是与视频中相同的PCIe Gen4和Gen5延长线。
./nvbandwidth -t host_to_device_memcpy_ce ./nvbandwidth -t device_to_host_memcpy_ce
这些结果与我们对每种连接的预期相符,考虑到传输开销带来的一些损耗。CMP 170HX仍然远远落后于RTX 3090 Ti,但凭借64 GB的VRAM,将模型拆分到多块GPU上的速度就没那么关键了。
9. AI——新的加密货币
对于已解锁CMP 170HX的LLM推理能力,我们使用了IBM Granite 4.1 8B Q4_K_M(约5.0 GB)作为一个小模型,它可以装在所有显卡上,还使用了Qwen 3.6 27B Q4_K_M(约16 GB)和Qwen 3.8 27B Q8_0(约29 GB)。
根据你的使用场景,无论是使用RTX 3090 Ti还是新兴的CMP 170HX,都有许多优化(llama.cpp版本、llama.cpp标志、CUDA版本、MTP、批处理大小、上下文深度、flash attention、卸载、KV量化、运行时等)可以做,但这展示了使用llama.cpp“开箱即用”能做到什么。
./llama-bench -m <model> -fa 1 -ngl 999 -r 5 -d 0 -n 128 -p 512,8192
| IBM Granite 4.1 8B Q4_K_M | |||
|---|---|---|---|
| Qwen 3.6 27B Q4_K_M | |||
|---|---|---|---|
[IM] | [IM] | [IM] | |
[IM]:Insufficient memory
| Qwen 3.8 27B Q8_0 | ||||
|---|---|---|---|---|
[IM] | [IM] | [IM] | ||
所有这些测试都是在零上下文深度下运行的,但CMP 170HX上解锁的64 GB内存允许你将大多数Qwen 3.6/3.8 27B/35B模型的上下文深度最大化(262k tokens)。
对于Qwen 3.8 27B Q8_0测试,我们使用了两块RTX 3090 Ti,因为该模型约为29 GB,无法装入单块显卡的VRAM。尽管CMP 170HX的计算能力低于RTX 3090 Ti及类似显卡(不过更高的显存带宽对它帮助很大),但64 GB显存的灵活性允许你将上下文大小最大化,或同时托管多个模型。
让解锁后CMP 170HX的性能更加令人印象深刻的是,这一切都是在250 W TDP下完成的,而RTX 3090 Ti的TDP为450 W(如果使用两块则更高)。提示处理(pp 512和pp 8192)历来受计算能力限制,因此RTX 3090 Ti能够运用其全部性能来生成高每秒token数。token生成(tg 128)受显存带宽限制,因此CMP 170HX的HBM2e使其尽管功耗更低,却基本能跟上。
另请注意,CMP 170HX有一个Molex Mini-Fit Jr.连接器,但它是8-pin EPS连接器,而不是显卡上通常见到的6+2-pin PCIe电源连接器。这使它能够汲取超过6+2-pin PCIe连接器150 W限制的功率。缺少12VHPWR/12V-2x6连接器对某些用户来说可能是一大卖点。
10. 值得吗?
如果你能找到一块显存经过验证且价格合理(很可能是在这一大波关注之后)的CMP 170HX,那么它们提供的vRAM容量是其他消费级可用显卡(GPU)无法匹敌的。再加上具备A100的大部分计算性能,这意味着它将胜过那些提供显存容量、但没有显存带宽(通常低于300 GB/s)或计算能力的APU迷你主机。
一块解锁的CMP 170HX就能提供极其可用的本地模型速度和响应能力,而且社区很可能还会发现更多更新和优化。
最后,Amogh已在cmpunlocker Discord服务器上宣布,PCIe Gen3很可能即将到来。可能还需要一段时间才能可用,但这是有可能的。