Ubuntu 20.04下NVIDIA驱动、CUDA、CUDNN与NVENC配置实战
先把结论放在前面这套环境配置本身不难难的是很多人把“驱动、CUDA Toolkit、CUDNN、NVENC”这四层东西混在一起导致出了问题根本不知道该查哪一层。这篇文章我会从头到尾走一遍 Ubuntu 20.04 下的部署流程覆盖 NVIDIA 显卡驱动安装、CUDA 与 CUDNN 的安装验证、NVENC 并发限制的突破以及多版本 CUDA 切换这四件事。适合做深度学习、SLAM、视频转码、直播推流的同学直接抄作业也能帮刚入坑 Linux 的读者把这些概念真正理清楚。我会把自己踩过的坑和排查路径一并写在里面尤其是“装完驱动后 nvcc 找不到”“cuda_xxx.run 解压报 gzip invalid compressed data”“NVENC 打补丁后驱动升级失效”这类高频问题按我的经验提前知道这些能省下大半天时间。1. 方案选型与整体架构1.1 先想清楚你需要的到底是哪一层很多教程喜欢把“显卡驱动、CUDA、CUDNN”放在一起装但它们在系统中的位置完全不一样。NVIDIA 驱动是唯一和硬件直接打交道的内核态部分它负责让操作系统识别 GPU也负责提供编解码硬件的接口。CUDA Toolkit 是在驱动之上运行的开发套件包含编译器 nvcc、运行时库 libcudart、数学库 cuBLAS/cuFFT 等。CUDNN 则是针对深度神经网络的加速库它依赖 CUDA 运行时但不和驱动直接通信。NVENC 则是显卡上的硬件编码器驱动装好后基本就能用只是消费级显卡在 SDK 层面有并发会话数限制后面我会细讲。用一个不太严谨但好理解的说法驱动是“路”CUDA 是“车”CUDNN 是“货物”NVENC 是“装卸港口”。路不通后面全白搭车不对版货物也运不出去。实操中我见过最多的问题就是驱动装完了nvidia-smi能正常显示但nvcc -V报 command not found。这是因为驱动只代表底层跑通了CUDA Toolkit 还没有装。反过来也有人把 CUDA Toolkit 装了好几遍但驱动版本太老导致程序一启动就报CUDA driver version is insufficient。这两种情况都说明理解各层的关系比盲目复制命令重要得多。1.2 环境确认与准备工作开始之前先用下面几条命令把机器摸清楚# 查看显卡型号 lspci | grep -i nvidia # 查看内核版本 uname -a # 查看系统版本 lsb_release -a # 检查是否已安装 nvidia 相关包 dpkg -l | grep -i nvidia如果是双系统或者新组装的机器建议先检查 BIOS 里 Secure Boot 是否关闭。Secure Boot 开启状态下第三方内核模块如果没有签名重启后驱动会加载失败。这个问题在 Ubuntu 20.04 上特别常见很多人的驱动装完看起来成功了重启后nvidia-smi却提示couldnt communicate with the NVIDIA driver多数就是 Secure Boot 在作怪。另外如果你的机器之前曾经装过 NVIDIA 驱动强烈建议先彻底卸载再装新的sudo apt purge nvidia-* libnvidia-* -y sudo apt autoremove -y这是因为 apt 和 runfile 两种方式安装的驱动会互相覆盖混着装很容易出现nvidia-smi符号链接指向错误、驱动模块版本不匹配等诡异问题。卸载完成后重启一次确保系统回到干净状态再继续。2. NVIDIA 驱动安装推荐 apt 方案附 runfile 兜底2.1 用 apt 安装省心且好维护Ubuntu 20.04 自带 NVIDIA 驱动的软件源使用起来非常简单# 可以先看系统推荐哪个版本 sudo ubuntu-drivers devices这个命令会列出当前可用的驱动版本并标注 recommended一般照着推荐版本装就行。比如显示推荐nvidia-driver-535那就直接装它sudo apt install nvidia-driver-535装完重启sudo reboot重启后执行nvidia-smi如果能看到类似下面这样的表格说明驱动已经正常工作--------------------------------------------------------------------------------------- | NVIDIA-SMI 535.154.05 Driver Version: 535.154.05 CUDA Version: 12.2 | ---------------------------------------------------------------------------------------这里有个常见误区我要特别说明一下nvidia-smi右上角显示的CUDA Version并不是你已经安装了 CUDA Toolkit 的版本而是当前驱动最多能支持到哪个 CUDA 版本。比如驱动 535 最高支持 CUDA 12.2即便你现在没装任何 CUDA Toolkit它也会显示 12.2。所以网上有帖子用这个数字判断“我是不是已经装好 CUDA 了”是不准确的。apt 方式最大的优势是内核升级后DKMS 会自动把 NVIDIA 内核模块重新编译一遍不需要你手动干预。这对于长期使用、经常滚内核更新的用户来说非常省心。缺点是版本更新相对保守如果你需要最新驱动特性可能还得等一等。2.2 runfile 方式与 apt 方式的取舍有些场景下 apt 装不了比如用着特殊内核、需要特定版本驱动或者需要在无网环境离线安装这时我会改用 runfile 方式。去 NVIDIA 官方驱动下载页找到对应型号和系统的.run文件然后chmod x NVIDIA-Linux-x86_64-535.154.05.run sudo ./NVIDIA-Linux-x86_64-535.154.05.run但 runfile 方式有几个明显痛点。第一安装过程中通常会要求你先禁用 nouveau 开源驱动否则会直接中断第二内核升级后需要手动重新执行nvidia-smi或重新运行 runfile否则驱动可能失效第三如果中断或者反复安装容易留下残留文件。所以我的建议很直接能用 apt 就优先 apt。runfile 只作为离线环境或者特殊需求下的兜底方案不建议在主力机器上频繁使用。如果你是在内网环境离线装驱动就先去另一台能联网的机器下好.run文件拷进内网后按上面流程操作同时把系统里的 nouveau 禁掉sudo bash -c echo blacklist nouveau /etc/modprobe.d/blacklist-nouveau.conf sudo bash -c echo options nouveau modeset0 /etc/modprobe.d/blacklist-nouveau.conf sudo update-initramfs -u需要注意禁用 nouveau 后需要重启生效重启完显卡会进入低分辨率模式这是正常现象不用担心。3. CUDA 安装与版本选择3.1 选 CUDA 版本不要盲目追新很多刚入门的朋友以为 CUDA 越新越好这是一个相当大的误解。CUDA 版本要和你的应用生态匹配尤其是 PyTorch、TensorFlow、TensorRT 这些框架它们不是立刻支持最新 CUDA 的。装了一个过于新的 CUDA很可能出现PyTorch 官方 wheel 里预编译的 CUDA 运行时版本低于系统 CUDA跑起来没任何问题但编译扩展时却报版本不匹配某些老项目比如基于 CUDA 10.1 编译的代码在新版 CUDA 下链接失败第三方库没有提前适配互相冲突。比较稳妥的思路是先看项目需要的 CUDA 版本再倒推需要装哪个驱动版本。因为新版驱动一般都向下兼容旧 CUDA但旧驱动不一定支持新 CUDA。这里放一张我常用的对应关系表基于长期实践整理供参考驱动系列最高支持 CUDA适用场景470.xCUDA 11.4老项目、CUDA 10.x/11.x 配套驱动515.xCUDA 11.7PyTorch 1.13 时代常用525.xCUDA 12.0过渡期535.xCUDA 12.2目前深度学习环境的主流稳定选择550.xCUDA 12.4新卡、新框架、需要较新特性时使用如果你用的是 RTX 40 系显卡建议驱动至少 535 起步这样对 CUDA 12.x 的支持比较完整。如果只是普通使用安装 CUDA 11.8 配驱动 525 或 535 也完全可以PyTorch 对这个组合的兼容性最好。3.2 下载与校验gzip invalid compressed data 的处理在 NVIDIA 官网选择 Linux - x86_64 - Ubuntu - 20.04 - runfile (local)下载得到cuda_11.8.0_520.61.05_linux.run这样的文件。这一步很容易出问题特别是热词里提到的gzip: stdin: invalid compressed>md5sum cuda_11.8.0_520.61.05_linux.run把输出和官网提供的 MD5 值对比不一致就重新下载。比较稳妥的方式是用镜像站下载或者在浏览器里开断点续传不要用迅雷等下载工具改文件格式。另外我提醒一句如果你把.run文件放在 NTFS 分区比如 Windows 和 Ubuntu 共用的数据盘上执行时也可能因为权限问题解压失败建议先拷到 Linux 原生文件系统比如~/Downloads再执行。3.3 runfile 静默安装与符号链接确认文件完整后执行安装。这里不建议用图形交互界面很容易在最后一步操作符搞乱直接用一行静默安装命令sudo sh cuda_11.8.0_520.61.05_linux.run --toolkit --silent --override解释一下参数--toolkit表示只装 CUDA Toolkit 而不装驱动因为我们前面已经通过 apt 装好驱动了避免 runfile 自带的旧驱动覆盖掉 apt 版本--silent是静默安装不再弹对话框--override是为了绕过“系统中已有更高版本驱动”的检查提示。安装完成后默认会装到/usr/local/cuda-11.8并在/usr/local/cuda建一个符号链接指向它。确认一下ls -l /usr/local/cuda如果这个软链接不存在需要手动设置。接下来把 CUDA 的 bin 目录和 lib 目录加入用户环境变量让nvcc命令和程序运行时能找到。我习惯写进/etc/profile.d/cuda.sh这样所有用户都能用sudo bash -c cat /etc/profile.d/cuda.sh EOF export PATH/usr/local/cuda/bin:\$PATH export LD_LIBRARY_PATH/usr/local/cuda/lib64:\$LD_LIBRARY_PATH EOF然后重新加载source /etc/profile.d/cuda.sh nvcc -V看到类似Cuda compilation tools, release 11.8, V11.8.89的输出说明 CUDA Toolkit 安装成功。有朋友可能会问nvidia-smi显示 CUDA 12.2但我装的是 CUDA 11.8会不会冲突不会因为驱动最高支持 12.2向下兼容 11.8。nvcc -V是 Toolkit 的实际版本nvidia-smi是驱动的能力上限两者不一致是正常现象并不代表安装出错了。4. CUDNN 安装与版本验证4.1 deb 包安装最稳的一种方式CUDNN 在 NVIDIA 官网需要注册账号才能下载。选好和你的 CUDA 版本匹配的 CUDNN 版本这里我以 CUDA 11.8 配 CUDNN 8.9.x 为例。下载页面会提供几种格式推荐优先选择 deb 包因为它会自动把头文件、库文件放到对应 CUDA 目录并处理好符号链接比 tar 包省心不少。deb 包安装通常需要三个包按顺序装sudo dpkg -i libcudnn8_8.9.5.29-1cuda11.8_amd64.deb sudo dpkg -i libcudnn8-dev_8.9.5.29-1cuda11.8_amd64.deb sudo dpkg -i libcudnn8-samples_8.9.5.29-1cuda11.8_amd64.deblibcudnn8是运行库跑程序必需libcudnn8-dev是头文件和软链接编译程序必需libcudnn8-samples是官方样例用来验证是否正确。如果提示依赖错误就执行sudo apt --fix-broken install -y然后重新执行 dpkg 安装。4.2 tar 包安装适合多版本共存tar 包形式的 CUDNN 更适合做多版本管理。下载下来的 tar 包解压后是一个cuda目录里面包含include和lib64。需要手动把文件拷贝到 CUDA 安装目录tar -xzvf cudnn-linux-x86_64-8.9.5.29_cuda11-archive.tar.xz cd cudnn-linux-x86_64-8.9.5.29_cuda11-archive sudo cp -P include/cudnn*.h /usr/local/cuda-11.8/include/ sudo cp -P lib/libcudnn* /usr/local/cuda-11.8/lib64/ sudo chmod ar /usr/local/cuda-11.8/include/cudnn*.h注意cp -P是为了保留符号链接如果不加后续程序运行时会报 libcudnn.so 找不到因为软链接断了。deb 和 tar 两种方式怎么选我的经验是如果只装一个 CUDA 版本直接用 deb 最省事如果后面打算做多版本 CUDA 切换则更建议 tar 包因为库文件都放在各自的 CUDA 目录下切换版本时不会互相串。4.3 CUDNN 版本验证很多教程告诉你用nvcc -V验证 CUDA 就行了但 CUDNN 的验证往往被忽略。这里提供两个可靠的方法。方法一查看头文件版本号cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2输出类似#define CUDNN_MAJOR 8 #define CUDNN_MINOR 9 #define CUDNN_PATCHLEVEL 5方法二编译运行官方样例cp -r /usr/src/cudnn_samples_v8 ~/cudnn_samples_v8 cd ~/cudnn_samples_v8/mnistCUDNN sudo apt install libfreeimage3 libfreeimage-dev -y make clean make ./mnistCUDNN如果看到最后一行输出Test passed!说明 CUDNN 安装完全正常。这个测试会真实地调用 GPU 跑一遍卷积网络推理比单纯看文件是否存在靠谱得多。5. NVENC 并发限制突破5.1 限制到底卡在哪NVENC 是 NVIDIA 显卡的硬件编码器在直播推流、视频转码、游戏录制等场景里非常有用。但 NVIDIA 在消费级显卡上做了限制同一时间最多只能有 3 个 NVENC 编码会话。对于个人用户来说同时开 OBS 推流、录屏、转码可能就会撞到这个上限。这个限制不是硬件做不到而是 NVIDIA 在驱动和 SDK 层刻意设置的。专业级显卡如 Quadro、RTX A 系列没有这个限制收费标准还不便宜。于是社区里就有了比较成熟的解决方案核心思路是修改驱动自带的编码器接口库文件把 3 路会话数的检查逻辑绕过让它不再限制会话个数。下面先确认一下当前卡的 NVENC 会话限制。可以用 NVIDIA 官方提供的nvidia-smi查看编码器会话nvidia-smi -q -d ENCODER_STATS如果显示Session Count一直卡在 3且你已经确认没有别的进程在编码那就是被限制了。5.2 用 nvidia-patch 解除会话数限制目前社区里最常用的是 GitHub 上的 keylase/nvidia-patch 项目。它提供了一键脚本能自动替换驱动中libnvcuvid.so和libnvencodeapi.so相关的限制逻辑。使用步骤比较简单先看一下自己驱动版本去 patch 仓库确认是否支持下载对应版本分支的脚本执行脚本自动打补丁重启系统让补丁生效。具体操作大致如下# 进入驱动补丁项目目录 git clone https://github.com/keylase/nvidia-patch.git cd nvidia-patch # 查看驱动版本 nvidia-smi # 执行针对当前版本的 patch 脚本 ./patch.sh执行完后可以运行 ffmpeg 并发推几个编码任务来验证ffmpeg -re -i input.mp4 -c:v h264_nvenc -b:v 5M -f mpegts udp://127.0.0.1:10001 ffmpeg -re -i input2.mp4 -c:v h264_nvenc -b:v 5M -f mpegts udp://127.0.0.1:10002 ffmpeg -re -i input3.mp4 -c:v h264_nvenc -b:v 5M -f mpegts udp://127.0.0.1:10003 ffmpeg -re -i input4.mp4 -c:v h264_nvenc -b:v 5M -f mpegts udp://127.0.0.1:10004 再用nvidia-smi查看会话数正常情况下能看到超过 3 个编码会话。这块有几个实操中容易踩的坑我要重点提醒驱动一旦升级补丁就会失效需要重新执行 patch 脚本。所以如果你是通过 apt 定期升级驱动升级后记得验证一下补丁状态。不同驱动版本对应的补丁位置可能有差异老的 patch 分支不一定兼容新驱动先确认再打。这个修改本质上是绕过了驱动层限制如果你的使用场景涉及商业分发、云服务、直播平台一定要事前评估合规风险不要给项目埋雷。我自己在实际业务中一般只在本地采集、离线转码这种内网场景使用线上服务还是优先购买原生支持高并发编码的卡或者云厂商的转码服务省得维护成本失控。6. 多版本 CUDA 切换实战6.1 为什么要装多个 CUDA深度学习圈子比较常见的情况是新项目用 PyTorch 2.x需要 CUDA 11.8 或 12.1老项目还埋在 CUDA 10.2 时代做视频处理的一套工具链又要求 CUDA 11.3。这些项目不能互相迁就所以在一台机器上共存多个 CUDA 版本就非常必要。PyTorch 这类框架自带 CUDA 运行时它的版本不太受系统 CUDA 影响。真正受影响的是你需要从源码编译的项目比如 ORB-SLAM3、TensorRT、OpenCV with CUDA 等编译时如果指定了错误版本的 CUDA链接阶段会报一堆奇奇怪怪的错误。6.2 简单粗暴的切换方式符号链接 环境变量最直观的思路是让/usr/local/cuda这个软链接指向不同版本的 CUDA 目录再配合环境变量让当前 shell 使用正确版本的 nvcc 和运行时库。比如想切换成 CUDA 11.8sudo rm -f /usr/local/cuda sudo ln -s /usr/local/cuda-11.8 /usr/local/cuda因为前面我们在/etc/profile.d/cuda.sh里写的是export PATH/usr/local/cuda/bin:...所以只要切换软链接重新打开终端nvcc -V就会显示新的版本。但这种方式的缺点是全局的所有终端和用户都会跟着切到同一版本灵活性不够。6.3 用 update-alternatives 做正式管理我用的比较多的是把多个 CUDA 版本注册进 Debian 系自带的update-alternatives机制这样切换只需要一条命令而且终端会提示当前是哪个版本不容易搞混。先注册两个版本的 bin 目录、lib64 目录和 include 目录sudo update-alternatives --install /usr/local/cuda/bin/nvcc nvcc /usr/local/cuda-11.8/bin/nvcc 118 \ --slave /usr/local/cuda/lib64 libcudart_static /usr/local/cuda-11.8/lib64/libcudart_static.a sudo update-alternatives --install /usr/local/cuda/bin/nvcc nvcc /usr/local/cuda-12.1/bin/nvcc 121 \ --slave /usr/local/cuda/lib64 libcudart_static /usr/local/cuda-12.1/lib64/libcudart_static.a注册完成后切换版本sudo update-alternatives --config nvcc系统会列出There are 2 choices for the alternative nvcc (providing /usr/local/cuda/bin/nvcc). Selection Path Priority Status ------------------------------------------------------------ * 0 /usr/local/cuda-12.1/bin/nvcc 121 auto mode 1 /usr/local/cuda-11.8/bin/nvcc 118 manual mode 2 /usr/local/cuda-12.1/bin/nvcc 121 manual mode输入对应数字回车再执行nvcc -V确认就完成了。这里还要提醒一个容易忽略的问题LD_LIBRARY_PATH这个环境变量对运行时有影响但对编译链接阶段影响不大。真正的软链接路径在/usr/local/cuda/lib64/libcudart.so上所以如果程序在运行时提示找不到 libcudart.so.11多半是链接指向的版本和你预期不一致。用下面的命令排查readlink -f /usr/local/cuda/lib64/libcudart.so确认它指向的是不是当前想要的那个版本。这是多版本切换之后很常见的坑编译过了、运行时报错往往就是这个软链接没有改对。7. 常见问题与排查技巧实录我把实际过程中遇到的典型问题整理成一个速查表方便遇到问题时对着查现象直接原因处理方式gzip: stdin: invalid compressed data.run文件下载不完整或拷贝损坏比对 md5 校验值重新下载后放到 Linux 原生分区执行nvidia-smi: command not found驱动没装或者 PATH 没包含 nvidia-smi 路径重新安装驱动nvidia-smi一般在/usr/bin/nvidia-sminvidia-smi显示错误或驱动加载失败Secure Boot 拦截了内核模块签名进 BIOS 关闭 Secure Boot或将驱动模块签名加入 MOKnvcc -V找不到命令CUDA Toolkit 未安装或 PATH 没配置安装 CUDA Toolkit配置/etc/profile.d/cuda.shnvidia-smi和nvcc -V版本不一致一个是驱动能力上限一个是 Toolkit 实际版本只要驱动兼容 Toolkit就没有问题CUDA samples 编译找不到头文件没装完整 Toolkit或路径指定错误确认/usr/local/cuda/include存在编译时用-I/usr/local/cuda/include显式指定libcudnn.so.8: cannot open shared object fileCUDNN 软链接断裂或库目录不在 LD_LIBRARY_PATHldconfig或手动修复软链接确认lib64目录在LD_LIBRARY_PATH中多版本切换后程序运行报 libcudart 错误库软链接仍指向旧版本readlink -f /usr/local/cuda/lib64/libcudart.so检查必要时重建软链接虚拟机里 Ubuntu 20.04 无法联网VMware/VirtualBox 网络适配器未正确配置检查虚拟网络模式一般 NAT 模式最省事除了这个表再补充几个我自己的排查技巧。第一个技巧是“分环境变量看”如果同一台机器上不同终端里nvcc -V结果不一样先看看是不是/etc/profile.d/里有多个脚本重复写入了 PATH或者在~/.bashrc里加了自定义导出。查的时候用echo $PATH which nvcc看 nvcc 的绝对路径到底来自哪个目录问题基本就定位了。第二个技巧是“重新加载环境变量”写完/etc/profile.d/cuda.sh后如果不想重启系统别只source ~/.bashrc直接把脚本 source 一次或者新开一个终端窗口也行因为新终端会自动读取这个脚本。第三个技巧是“卸载要干净”想卸载 CUDA Toolkit 时不要直接删/usr/local/cuda-11.8因为这样会留下软链接和 update-alternatives 的注册记录。用官方卸载脚本最干净sudo /usr/local/cuda-11.8/bin/cuda-uninstaller至于驱动卸载apt 方式安装的用sudo apt purge nvidia-*可以清干净runfile 方式安装的用sudo /usr/bin/nvidia-uninstall两个混杂的话建议先备份数据再彻底清理后统一用一种方式重装。第四个技巧是关于 ORB-SLAM3 这类项目的很多人部署时源码编译一切都正常但运行时就报No CUDA device available。这时先别急着怀疑 CUDA 环境用nvidia-smi看看驱动是否正常再用nvcc -V确认 Toolkit 是否在位最后用刚才提到的 CUDNN 样例跑一遍。硬件、驱动、运行时、加速库四层都通了再回头排查代码里的配置项比如是否设置了-DCMAKE_CUDA_ARCHITECTURES75RTX 20 系是 7530 系是 8640 系是 89。最后一个技巧是关于磁盘空间的。CUDA、CUDNN 以及后续要装的框架动辄占用十几 GB装之前用df -h确认根分区和/usr/local所在分区有足够空间。如果空间不够后面的安装过程会出现各种诡异的中断报错比如解压到一半提示 no space left on device处理起来比初始安装麻烦得多。我在实际使用中还有一个比较深的体会驱动和 CUDA 环境的维护本质上是在做“版本对齐”的事。每次升级驱动、升级 CUDA、升级项目依赖这三者之一都应该主动去核对其余两者的兼容性不要等到编译报错了再回来翻文档。你可以把当前机器的版本组合记在一个文本文件里包括驱动版本、CUDA 版本、CUDNN 版本、PyTorch/TensorRT 版本下次重装或者迁移时照着文件配能少走很多弯路。如果你想试着再简化这套流程可以后续考虑用 Docker 把 CUDA 环境容器化宿主机只需要装好驱动CUDA Toolkit 和 CUDNN 全部以 nvidia/cuda 镜像的方式拉取这样多版本切换就会变得更干净宿主机也不会被各种版本的库污染。不过这是另一个话题了先把本地环境跑通才是后面一切的基础。

相关新闻

大模型推理优化实战:从PyTorch到TensorRT的四层工程方法论

大模型推理优化实战:从PyTorch到TensorRT的四层工程方法论

1. 项目概述:Model-Optimizer 不是工具名,而是一套可落地的模型推理加速工程方法论“Model-Optimizer”这个标题乍看像某个开源工具或商业软件,但结合NVIDIA、TensorRT-LLM、vLLM、PT文件转换TensorRT等热搜词,它实际指向的是一类…

2026/9/30 16:22:32 阅读更多 →
Jev模型:TypeSafe AI如何实现带概率的结构化决策输出

Jev模型:TypeSafe AI如何实现带概率的结构化决策输出

1. 从“不说话”的模型说起:Jev 到底在解决什么问题 第一次看到“Jev”这个名字,是在一个做智能体工程的朋友群里。有人甩了张截图,说“这玩意儿输出的是带概率的决策,不是一段话”。当时我的第一反应是:又一个把结构化…

2026/10/1 18:58:22 阅读更多 →
PyTorch实验可复现性实战:种子、依赖与配置全攻略

PyTorch实验可复现性实战:种子、依赖与配置全攻略

先说一个我自己的经历。之前跑一个图像分割实验,模型在本地机器上训到了83.4%的mIoU。两周后要在另一台机器上复现,同样的代码、同样的超参数、同样的数据集,结果只有82.1%,差了1.3个点。我当时第一反应是数据没传完整&#xff0c…

2026/9/30 16:22:32 阅读更多 →

最新新闻

β-环糊精组合修饰全解析:PEG链连接FITC、Biotin、DBCO的设计与应用

β-环糊精组合修饰全解析:PEG链连接FITC、Biotin、DBCO的设计与应用

拿到“PEG-荧光素修饰β-环糊精,β-CD-PEG-FITC,β-CD-PEG-Biotin,DBCO-PEG修饰β-环糊精,β-CD-DBCO-PEG”这一串产品名时,多数人的第一反应是“这到底是个东西还是好几个东西”。其实这是一类典型的组合修饰型环糊精…

2026/10/1 18:57:55 阅读更多 →
C++工厂方法模式实战:从日志系统到调试排查全解

C++工厂方法模式实战:从日志系统到调试排查全解

聊到C里的创建型设计模式,工厂方法模式(Factory Method)是我在工程实践中用得最频繁,也最容易被低估的一个。早些年我在面试候选人的时候,几乎每次都会问到一个场景:一段代码里有七八个if分支去创建不同类型…

2026/10/1 18:57:55 阅读更多 →
Madeira 整合 Wine、FEX-Emu 与 DXMT:ARM 平台运行 x86-64 Windows 程序实战

Madeira 整合 Wine、FEX-Emu 与 DXMT:ARM 平台运行 x86-64 Windows 程序实战

1. 从“Madeira”这个名字说起:它到底想解决什么问题 第一次看到“Madeira”这个项目名,很多人会以为是某个葡萄酒产区的工具,或者干脆是个地名相关的应用。但结合热搜词里的 Wine、FEX-Emu、DXMT、x86-64 这几个关键词,方向就清晰…

2026/10/1 18:57:55 阅读更多 →
声音克隆 + 文本转语音:narrator-ai-cli-skill 独立任务实战,AI 解说大师配音两大技能

声音克隆 + 文本转语音:narrator-ai-cli-skill 独立任务实战,AI 解说大师配音两大技能

声音克隆 文本转语音:narrator-ai-cli-skill 独立任务实战,AI 解说大师配音两大技能 【免费下载链接】narrator-ai-cli-skill AI 解说大师 — Agent skill;封装 narrator-ai-cli 供 Claude/Codex 等工具调用 项目地址: https://gitcode.co…

2026/10/1 18:57:55 阅读更多 →
Windows英文系统中文显示异常的注册表级修复方案

Windows英文系统中文显示异常的注册表级修复方案

1. 问题本质与真实场景还原这个问题我从2015年就开始反复处理,不是什么新毛病,但每次Windows大版本更新(比如1809、20H2、22H2)它就准时回来“打卡”。核心现象非常典型:你把系统语言从中文改成英文(比如为…

2026/10/1 18:57:55 阅读更多 →
C++桥接模式四种实现:从指针到std::variant的工程实践

C++桥接模式四种实现:从指针到std::variant的工程实践

从"类和类纠缠"到"接口和实现各过各的"做C开发这么多年,我一直觉得设计模式这事儿最怕"背名字"。桥接模式(Bridge Pattern)就是个典型——很多人能把定义背出来:"将抽象部分与实现部分分离&am…

2026/10/1 18:56:55 阅读更多 →

日新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/30 18:13:06 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →