【实战避坑】Xtuner+QLoRA微调中的版本冲突与解决方案
1. 环境配置版本冲突的“万恶之源”最近在帮几个朋友用Xtuner做QLoRA微调发现大家踩的第一个坑几乎都是环境配置。我自己刚开始玩的时候也在这个问题上折腾了好几天。环境配置听起来简单不就是装几个包吗但实际操作起来你会发现这简直是版本依赖的“修罗场”。我举个例子你按照官方文档用pip install xtuner一键安装看起来一切顺利。然后你兴冲冲地准备跑一个7B模型的QLoRA微调结果命令刚执行就给你弹出一串红色的错误核心就是那句No module named triton.ops。我当时看到这个错误也是一头雾水triton是什么我明明没装过这个库啊。这个错误的完整回溯通常会指向bitsandbytes库。bitsandbytes是QLoRA实现4-bit量化的核心库它依赖特定的CUDA和PyTorch版本。而triton是PyTorch 2.0 引入的一个高性能编译器用于优化某些算子。问题就出在这里高版本的PyTorch比如2.6和某些版本的bitsandbytes不兼容。我实测下来最稳定的组合是PyTorch 2.5.1 CUDA 12.1 bitsandbytes 0.43.1。如果你用的是更新的PyTorch比如2.6.0就很容易触发这个triton.ops的导入错误。因为bitsandbytes内部可能调用了旧版PyTorch的接口或者新版PyTorch的triton模块有变动。那怎么解决呢最直接的办法就是降级PyTorch。但这里有个细节Xtuner本身可能对PyTorch版本有要求你不能降得太低。我的经验是直接修改Xtuner源码目录下的requirements文件。假设你的Xtuner是从GitHub克隆的路径是~/xtuner。你可以先看看它的依赖声明cd ~/xtuner cat requirements/runtime.txt | grep torch通常它会指定一个范围比如torch2.0.0。你需要手动把它锁定到2.5.1。你可以创建一个新的虚拟环境然后这样安装# 创建并激活虚拟环境 conda create -n xtuner_env python3.10 -y conda activate xtuner_env # 先安装指定版本的PyTorch和CUDA工具包 pip install torch2.5.1 torchvision0.20.1 torchaudio2.5.1 --index-url https://download.pytorch.org/whl/cu121 # 然后安装bitsandbytes pip install bitsandbytes0.43.1 # 最后进入Xtuner目录从源码安装确保其他依赖版本兼容 cd ~/xtuner pip install -e .[all]注意这里我用了cu121的索引对应CUDA 12.1。如果你的CUDA版本是11.8则需要换成cu118。安装完成后强烈建议用一小段代码验证一下环境import torch import bitsandbytes as bnb import transformers print(fPyTorch版本: {torch.__version__}) print(fCUDA可用: {torch.cuda.is_available()}) print(fbitsandbytes版本: {bnb.__version__}) print(fTransformers版本: {transformers.__version__}) # 测试bitsandbytes是否能正常加载4-bit量化 from transformers import AutoModelForCausalLM, BitsAndBytesConfig quant_config BitsAndBytesConfig( load_in_4bitTrue, bnb_4bit_compute_dtypetorch.float16, bnb_4bit_use_double_quantTrue, bnb_4bit_quant_typenf4 ) # 这里不真的加载模型只是测试配置是否会被接受 print(量化配置创建成功环境基本正常。)如果这段代码能顺利运行没有报triton相关的错误那恭喜你最难的一关已经过了。环境配置是微调的基础基础打不牢后面所有的操作都是空中楼阁。我见过太多人因为环境问题浪费了好几天时间最后才发现是版本冲突。所以花点时间把环境配好绝对是值得的。2. 模型加载当Transformers不认识你的模型环境配好了模型也下载了配置文件也改了满心欢喜地执行xtuner train结果又报错了。这次错误信息是KeyError: qwen或者类似的ValueError: The checkpoint you are trying to load has model type qwen but Transformers does not recognize this architecture。这个错误我印象太深了当时我想微调最新的Qwen2.5-7B模型结果就卡在这里。错误信息说得很清楚你加载的模型类型是qwen但你当前安装的transformers库不认识这个架构。为什么因为Qwen2.5是比较新的模型它需要transformers库的版本支持。你可能会想那简单啊升级transformers不就行了执行pip install --upgrade transformers。但事情没这么简单。Xtuner框架本身对transformers的版本有依赖。我查了一下当时Xtuner 0.1.9版本兼容的transformers版本大约是4.48.0左右。而Qwen2.5的模型文件里明确要求transformers版本需要 4.51.0。这就产生了矛盾框架要求的版本低模型要求的版本高。面对这种版本“夹板气”你有两个选择。第一等待Xtuner官方升级支持新版的transformers。但这可能得等上一段时间。第二自己动手寻找兼容方案。我选择了后者并且找到了一个比较取巧但有效的办法。首先检查你的模型配置文件。通常从ModelScope或Hugging Face下载的模型里面会有一个config.json文件。用文本编辑器打开它找到model_type这一行。对于早期的Qwen模型它可能是model_type: qwen。而对于Qwen2.5它可能是model_type: qwen2。这个字段决定了transformers库用哪个类来加载模型。如果你的transformers版本是4.48.0它可能只认识qwen而不认识qwen2。但好消息是Qwen2.5的架构和Qwen2是兼容的。所以一个临时的解决方案就是手动修改模型配置文件将model_type从qwen2改为qwen。# 假设你的模型路径是 ./qwen2.5-7b-instruct cd ./qwen2.5-7b-instruct # 备份原始配置文件 cp config.json config.json.backup # 使用sed或文本编辑器修改model_type字段 # 这里用sed示例将 qwen2 替换为 qwen sed -i s/model_type: qwen2/model_type: qwen/g config.json重要提示这个方法只是一个临时绕过版本检查的“野路子”。它成立的前提是Qwen2.5和Qwen2的模型类在4.48.0版本的transformers中实现是兼容的。根据我的测试对于基本的加载和微调这个改动是可行的。但如果你要进行复杂的模型操作或推理可能会遇到问题。最根本的解决方案还是推动Xtuner升级其依赖的transformers版本或者寻找一个双方都能接受的中间版本比如4.50.0。修改完配置后再次运行训练命令那个KeyError应该就消失了。当然你也可能会遇到其他错误比如tokenizer不匹配。这时候你可能还需要检查tokenizer的配置文件tokenizer_config.json是否也需要类似的修改。总之模型加载错误的核心就是版本匹配理解了这个你就能举一反三解决类似llama,baichuan等新模型架构的识别问题。3. 依赖库的“隐形”冲突CUDA、GCC与系统环境你以为解决了PyTorch和Transformers就万事大吉了太天真了。深度学习框架的依赖链长到超乎想象。除了明面上的Python包还有底层库的兼容性问题。我遇到过最诡异的一次报错是在训练中途突然崩溃错误信息指向CUDA内核启动失败或者是一些内存访问错误。这类错误通常没有明确的版本号提示排查起来非常困难。它们可能源于CUDA Toolkit版本与PyTorch内置的CUDA运行时版本不匹配。你系统里可能装了CUDA 12.4但PyTorch是用CUDA 12.1编译的。GCC编译器版本问题。某些用C/CUDA编写的扩展比如FlashAttention在编译时对GCC版本有要求。在Ubuntu 22.04上默认的GCC 11可能没问题但在一些旧系统上就可能出问题。系统驱动问题。NVIDIA驱动版本太老不支持某些CUDA特性。怎么排查呢我有一套自己的“三板斧”诊断流程。第一板斧统一CUDA环境。在终端里执行nvcc --version和nvidia-smi看看CUDA编译器的版本和驱动支持的CUDA版本。然后在Python里执行import torch print(torch.version.cuda) # PyTorch编译时用的CUDA版本 print(torch.cuda.get_device_capability()) # 你显卡的计算能力确保nvcc --version显示的版本和torch.version.cuda尽量接近主版本号一致。如果差距太大建议重新安装与PyTorch版本匹配的CUDA Toolkit或者直接使用PyTorch官方提供的、已经内置了CUDA运行时的wheel包就像我们之前用--index-url安装的那样这样可以最大程度避免环境混乱。第二板斧检查扩展编译。如果错误信息里提到了flash_attn或者xformers等需要编译的扩展那很可能是编译环境有问题。你可以尝试先卸载然后从预编译的wheel安装或者强制从源码编译并记录日志。# 尝试安装预编译的flash-attention如果有对应你CUDA版本的 pip install flash-attn --no-build-isolation # 如果不行尝试从源码编译并查看详细输出 pip install flash-attn --no-binary flash-attn -v编译过程中如果出现大量警告和错误很可能是缺少头文件或者编译器版本不对。对于Ubuntu系统确保安装了build-essential和对应CUDA版本的cuda-toolkit。第三板斧最小化复现。创建一个最简单的Python脚本只导入必要的库执行一个最简单的操作比如创建一个随机张量移到GPU上或者尝试加载一个极小的模型进行前向传播。如果在这个最小化环境里都报错那问题就锁定在基础环境上。如果没问题再逐步添加Xtuner的组件直到错误复现这样就能定位到是哪个模块引入的问题。我个人的经验是在Linux服务器上使用conda环境管理并尽量使用PyTorch官方预编译的、与CUDA版本匹配的包能避开90%的底层环境问题。另外善用Docker容器也是一个终极解决方案它能提供一个完全一致、干净的环境。很多框架和云平台都提供了预配置好的深度学习镜像里面各种依赖都帮你调好了省心省力。4. 实战配置从配置文件到成功启动环境问题都扫清了终于来到实战环节。Xtuner的核心是配置文件它决定了你用哪个模型、哪种算法、什么数据、怎么训练。但官方给的配置模板不一定完全适合你的情况直接拿来用可能会掉坑里。以QLoRA微调InternLM2-Chat-7B模型为例我们来看看配置文件中几个最容易出错的“雷区”。第一个雷区路径问题。配置文件里通常会有pretrained_model_name_or_path和data_path。官方模板里写的可能是Hugging Face的模型ID如internlm/internlm-chat-7b和数据集ID。如果你已经把模型和数据下载到本地了务必把它们改成绝对路径或正确的相对路径。我强烈建议使用绝对路径避免歧义。# 修改前从网络下载 pretrained_model_name_or_path internlm/internlm-chat-7b data_path timdettmers/openassistant-guanaco # 修改后使用本地路径 import os pretrained_model_name_or_path /home/username/ft-oasst1/internlm-chat-7b # 你的模型文件夹路径 data_path /home/username/ft-oasst1/openassistant-guanaco # 你的数据文件夹或文件路径第二个雷区数据格式。XTuner支持多种数据格式但你需要正确指定dataset_map_fn。如果你用的是自定义的jsonl文件格式是[{conversation: [...]}, ...]那么dataset_map_fn通常要设为None并且dataset的type要指明是加载json格式。# 对于自定义jsonl文件train_dataset部分可能长这样 train_dataset dict( typeprocess_hf_dataset, datasetdict( typeload_dataset, pathjson, # 指明是json格式 data_filesdict(traindata_path) # 指定train文件路径 ), tokenizertokenizer, max_lengthmax_length, dataset_map_fnNone, # 自定义格式不需要map函数 template_map_fndict(typetemplate_map_fn_factory, templateprompt_template), remove_unused_columnsTrue, shuffle_before_packTrue, pack_to_max_lengthpack_to_max_length )第三个雷区量化配置。QLoRA的核心是4-bit量化配置在model字典的quantization_config里。这里参数比较多一个配错就可能加载失败。model dict( typeSupervisedFinetune, llmdict( typeAutoModelForCausalLM.from_pretrained, pretrained_model_name_or_pathpretrained_model_name_or_path, trust_remote_codeTrue, torch_dtypetorch.float16, # 计算精度 quantization_configdict( typeBitsAndBytesConfig, load_in_4bitTrue, # 启用4-bit加载 load_in_8bitFalse, # 与4-bit互斥 llm_int8_threshold6.0, llm_int8_has_fp16_weightFalse, bnb_4bit_compute_dtypetorch.float16, # 4-bit计算时用的精度 bnb_4bit_use_double_quantTrue, # 使用双重量化进一步压缩 bnb_4bit_quant_typenf4 # 量化类型nf4或fp4 )), loradict(...) )这里最容易出错的是bnb_4bit_compute_dtype。如果你显卡比较新比如RTX 3090/4090或A100可以设为torch.bfloat16以获得更好的数值稳定性和性能。但有些旧显卡或不支持bfloat16的卡设为bfloat16会导致训练崩溃这时就得老老实实用torch.float16。配置文件改好后不要急着开始长时间训练。先做一个快速启动测试跑几个step看看会不会报错。你可以通过修改配置文件里的max_epochs或max_steps为一个很小的值比如max_epochs1同时数据集很小或者直接在命令行传入参数覆盖# 只跑10个step快速验证配置是否正确 xtuner train ./your_config.py --max-steps 10如果这10个step能顺利跑完没有内存溢出OOM没有CUDA错误loss也在正常下降那说明你的配置基本没问题了可以放开步数进行正式训练。这个“冒烟测试”能帮你提前发现大部分配置错误避免浪费几天时间才发现问题。5. 训练过程中的“坑”与监控训练终于启动了看着loss曲线开始下降是不是觉得可以松口气了别急训练过程中还有不少“暗坑”等着你。第一个坑Loss变成NaN或者突然爆炸。这可能是学习率lr设得太高了。QLoRA微调通常使用很小的学习率一般在1e-4到5e-5之间。如果你用的是全量微调Full Fine-tuning学习率更要调低比如5e-6。在配置文件中找到lr参数把它调小试试。另外梯度裁剪max_norm也能防止梯度爆炸默认值1.0对大多数情况是安全的。第二个坑GPU内存显存占用越来越高最后OOM。这可能是由激活值activation内存累积造成的尤其是在使用很长的序列max_length时。解决方案是启用梯度检查点Gradient Checkpointing。在Xtuner的配置中你可以在model的llm配置里添加use_gradient_checkpointingTrue。llmdict( typeAutoModelForCausalLM.from_pretrained, pretrained_model_name_or_pathpretrained_model_name_or_path, trust_remote_codeTrue, torch_dtypetorch.float16, use_gradient_checkpointingTrue, # 启用梯度检查点 quantization_configdict(...) ),这个技术会用计算时间换内存空间可能会让训练速度慢一些但能显著降低显存峰值让你能使用更大的batch size或更长的序列。第三个坑训练速度慢得像蜗牛。首先检查GPU利用率用nvidia-smi命令看Volatile GPU-Util。如果利用率很低比如长期低于30%那可能是数据加载成了瓶颈。可以尝试增加dataloader_num_workers配置文件里用多个进程预加载数据。使用更快的存储比如NVMe SSD而不是机械硬盘。确保pack_to_max_lengthTrue这个选项会把多条短样本拼接到max_length减少padding提高GPU计算效率。如果GPU利用率已经很高了但你还是觉得慢可以考虑使用DeepSpeed ZeRO优化。Xtuner支持一键启用只需在训练命令后加上--deepspeed deepspeed_zero2或deepspeed_zero3。ZeRO-2可以优化优化器状态和梯度的内存ZeRO-3能进一步优化模型参数内存。对于单卡微调ZeRO-2通常就足够了。xtuner train ./your_config.py --deepspeed deepspeed_zero2第四个坑如何有效监控训练状态干等着不是办法。Xtuner集成了MMEngine的日志和可视化系统。训练开始后它会在work_dirs或你指定的--work-dir下生成一个以时间戳命名的文件夹里面有个vis_data子文件夹包含scalars.json文件。这个文件记录了loss、学习率等指标。你可以用TensorBoard来可视化# 在训练目录的上一级启动TensorBoard tensorboard --logdir ./work_dirs然后在浏览器打开http://localhost:6006就能看到漂亮的曲线图了。通过观察loss曲线你可以判断模型是否在正常学习loss应稳步下降后趋于平缓是否过拟合训练loss持续下降但验证loss开始上升或者学习率是否不合适loss剧烈震荡。6. 模型转换与测试最后的临门一脚训练完成后你会得到一堆.pth格式的检查点文件。但这些文件不能直接用于推理我们需要把它转换成Hugging Face标准的Adapter格式然后合并到原模型里。第一步PTH转HF Adapter。使用xtuner convert pth_to_hf命令。这里要注意路径别写错了。# 假设你的配置文件是 config.py最终权重是 iter_1200.pth xtuner convert pth_to_hf ./config.py ./work_dirs/your_exp/iter_1200.pth ./output_hf_adapter转换成功后./output_hf_adapter文件夹里会有adapter_config.json和adapter_model.bin等文件。这就是你的LoRA权重。第二步合并Adapter到原模型。使用xtuner convert merge命令。这一步会把LoRA权重合并进原模型得到一个完整的、可以独立加载的模型。# 设置这个环境变量可以避免一些线程冲突的警告 export MKL_SERVICE_FORCE_INTEL1 # 合并模型 xtuner convert merge ./original_model ./output_hf_adapter ./merged_model --max-shard-size 2GB./original_model: 原始基座模型的路径。./output_hf_adapter: 上一步生成的Adapter文件夹路径。./merged_model: 合并后模型的保存路径。--max-shard-size 2GB: 如果合并后的模型很大这个参数会把它分割成多个不超过2GB的小文件方便传输和加载。第三步对话测试。合并完成后一定要测试一下模型效果直接用Xtuner的chat功能# 测试合并后的完整模型 xtuner chat ./merged_model --prompt-template internlm2_chat # 或者你也可以不合并直接加载Adapter进行测试效果与合并后相同 xtuner chat ./original_model --adapter ./output_hf_adapter --prompt-template internlm2_chat在对话测试中你可以问一些训练数据里的问题看看模型是否学会了你想让它学的东西。同时也要问一些通用问题检查它原有的知识有没有被破坏即 catastrophic forgetting灾难性遗忘。如果发现模型只记得新知识把旧知识都忘了那可能是训练数据太少或者学习率太高、训练轮数太多导致的过拟合。这时候就需要调整训练策略比如在训练数据中混入一些通用的指令数据。常见合并错误如果在合并时出现维度不匹配的错误比如RuntimeError: The size of tensor a (4096) must match the size of tensor b (5120) ...这几乎可以肯定是因为你的Adapter和原模型不匹配。可能是你在训练后动了原模型文件或者训练时用的模型和现在合并用的模型根本不是同一个。务必确保合并时使用的原模型与训练时加载的基座模型是完全一致的版本。走完这六步从环境配置、解决冲突、调整配置、监控训练到最终合并测试一个完整的XtunerQLoRA微调流程才算真正跑通。每一步都有坑但每一个坑踩过之后你对整个微调技术的理解就会更深一层。

相关新闻

StructBERT创新应用:结合智能体的自动化评论审核系统

StructBERT创新应用:结合智能体的自动化评论审核系统

StructBERT创新应用:结合智能体的自动化评论审核系统 1. 引言 你有没有遇到过这样的情况:打开电商平台或社交媒体,看到评论区充斥着各种负面情绪、不当言论甚至恶意攻击?传统的评论审核往往依赖人工,效率低下且容易漏…

2026/7/6 0:39:00 阅读更多 →
Node.js安装避坑指南:从下载到配置淘宝镜像的全流程(附常见错误解决)

Node.js安装避坑指南:从下载到配置淘宝镜像的全流程(附常见错误解决)

Node.js 安装避坑指南:从下载到配置镜像的全流程深度解析 每次看到新手开发者兴致勃勃地打开 Node.js 官网,准备大展拳脚,却在安装和配置的第一步就踩进各种“坑”里,我都觉得特别可惜。这些坑,轻则让你折腾半天&#…

2026/7/5 5:39:42 阅读更多 →
TVBox解析管理全攻略:手把手教你配置绿豆盒子UI8的会员系统与代理提卡功能

TVBox解析管理全攻略:手把手教你配置绿豆盒子UI8的会员系统与代理提卡功能

TVBox解析管理全攻略:手把手教你配置绿豆盒子UI8的会员系统与代理提卡功能 最近和几个做本地影视服务的朋友聊天,发现大家普遍面临一个痛点:手头有不错的TVBox解析资源,但不知道怎么把它变成一个能稳定运营、还能赚钱的生意。要么…

2026/7/5 1:51:45 阅读更多 →

最新新闻

Windows CMD setx 命令详解:永久环境变量设置的3个关键陷阱与规避方案

Windows CMD setx 命令详解:永久环境变量设置的3个关键陷阱与规避方案

Windows CMD setx 命令详解:永久环境变量设置的3个关键陷阱与规避方案在Windows服务器运维和自动化脚本开发中,环境变量的配置是基础但至关重要的操作。setx命令作为微软官方提供的永久环境变量设置工具,其功能强大但暗藏玄机。本文将深入剖析…

2026/7/6 2:09:47 阅读更多 →
Docker run 命令 6 大核心参数实战:-v、-w、-e、-u、--rm、-it 组合解析

Docker run 命令 6 大核心参数实战:-v、-w、-e、-u、--rm、-it 组合解析

Docker Run 命令 6 大核心参数实战指南:-v、-w、-e、-u、--rm、-it 的组合艺术当你在终端输入docker run的那一刻,一个精密的容器化引擎便开始运作。但真正让这个简单的命令变得强大的,是那些看似不起眼的参数。本文将深入探讨六个最常用却常…

2026/7/6 2:05:46 阅读更多 →
3款轻量级骨架提取模型对比:MobilePose vs Lightweight OpenPose vs MoveNet,移动端实测 20+ FPS

3款轻量级骨架提取模型对比:MobilePose vs Lightweight OpenPose vs MoveNet,移动端实测 20+ FPS

3款轻量级骨架提取模型移动端实测:性能、精度与部署全解析在移动端和边缘计算设备上实现实时人体姿态估计一直是计算机视觉领域的难点。随着AI模型轻量化技术的进步,MobilePose、Lightweight OpenPose和MoveNet等模型让20FPS的实时骨架提取成为可能。本文…

2026/7/6 2:05:46 阅读更多 →
mRemoteNG免费远程连接管理器:3天从零到精通的完整教程

mRemoteNG免费远程连接管理器:3天从零到精通的完整教程

mRemoteNG免费远程连接管理器:3天从零到精通的完整教程 【免费下载链接】mRemoteNG mRemoteNG is the next generation of mRemote, open source, tabbed, multi-protocol, remote connections manager. 项目地址: https://gitcode.com/gh_mirrors/mr/mRemoteNG …

2026/7/6 2:03:45 阅读更多 →
抖店体验分怎么提升-4点8分实操方法-抖音电商2026规则落地

抖店体验分怎么提升-4点8分实操方法-抖音电商2026规则落地

抖店体验分怎么提升?提升到4.8全套实操方法|抖音电商2026规则落地 前言 2026抖音电商体验分权重重新划定:商品体验50%、服务体验35%、物流体验15%,4.8分是店铺核心分水岭。低于4.8分,千川流量、商品卡自然流权重、平台…

2026/7/6 2:01:44 阅读更多 →
Haiwell Cloud SCADA 3 与主流 PLC 协议对比:支持 3 类设备驱动的连接实测

Haiwell Cloud SCADA 3 与主流 PLC 协议对比:支持 3 类设备驱动的连接实测

Haiwell Cloud SCADA 3 与主流 PLC 协议深度兼容性实测报告在工业自动化系统集成领域,多品牌PLC设备的互联互通一直是工程师面临的现实挑战。海为科技最新发布的Cloud SCADA 3版本以"内置多种工业设备驱动"为核心卖点,宣称能够无缝对接西门子、…

2026/7/6 1:59:44 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻