DeepSpeed-Chat 第二步 DPO 微调训练脚本实战:从 OPT-350m 到 Llama-2-7b 的模型替换与参数全解
示例工程【免费下载链接】DeepSpeedExamplesExample models using DeepSpeed项目地址https://gitcode.com/gh_mirrors/de/DeepSpeedExamples点击查看免费下载本指南聚焦 DeepSpeed-Chat 训练流水线第二步——Direct Preference OptimizationDPO偏好对齐微调中training_scripts/目录下的全部训练脚本你将学会如何用一条命令在单卡、单机多卡、多节点场景下启动 DPO 训练如何通过--model_name_or_path一键切换facebook/opt、EleutherAI/gpt-neo、meta-llama/Llama-2等模型家族理解 ZeRO 阶段、CPU 卸载、LoRA、梯度检查点等关键参数的作用并深入 DPO 损失函数的源码实现原理。一、训练脚本目录总览在 applications/DeepSpeed-Chat/training/step2_dpo_finetuning/ 下training_scripts/目录按模型家族与运行规模组织脚本其结构为training_scripts/ ├── llama2/ │ ├── run_llama2_7b.sh # Llama-2-7B 全参数 DPO │ └── run_llama2_7b_lora.sh # Llama-2-7B LoRA 高效 DPO └── opt/ ├── multi_node/ │ └── run_350m.sh # 多节点分布式 ├── single_gpu/ │ └── run_350m.sh # 单 GPU └── single_node/ ├── run_350m.sh # 单机多卡 └── sweep/ ├── run_step2_sweep.sh # 超参扫描入口 ├── run_single.sh # 单次运行封装 └── README.md如 training_scripts/README.md 所述每个文件夹中的 bash 脚本默认都以 facebook/opt 家族为示例。所有脚本最终都调用同一个入口 main.py区别仅在于传入的命令行参数组合因此理解一个脚本即可掌握整套脚本的用法。二、DPO 微调简介为什么训练参数与 Reward Model 微调几乎相同DPODirect Preference Optimization是一种直接偏好学习算法它不再显式训练奖励模型、再用强化学习RLHF 第三步优化策略而是利用奖励模型的特定参数化形式在闭式解中提取对应的最优策略通过一个简单的分类损失让语言模型直接与人类偏好对齐避开了 RLHF 的复杂性与不稳定性。正如 DPO 论文标题所言Your Language Model is Secretly a Reward Model——由于语言模型本身就蕴含奖励建模能力DPO 的训练参数与训练流程绝大部分与 step2 Reward Model (RM) finetuning 相同这也是两个 step 目录脚本结构几乎一致的原因。训练完成后你会得到一个已经与人类偏好对齐的语言模型。这一背景在 step2 DPO README 中有完整说明。三、快速上手OPT-350m 单机训练training_scripts/opt/single_node/run_350m.sh 是官方推荐的入门脚本在 step2 目录下直接执行bash training_scripts/opt/single_node/run_350m.sh脚本接受两个位置参数OUTPUT输出目录默认./output与ZERO_STAGE默认0。脚本核心命令如下deepspeed main.py \ --data_path Dahoas/rm-static Dahoas/full-hh-rlhf Dahoas/synthetic-instruct-gptj-pairwise yitingxie/rlhf-reward-datasets \ --data_split 2,4,4 \ --model_name_or_path facebook/opt-350m \ --per_device_train_batch_size 4 \ --per_device_eval_batch_size 4 \ --max_seq_len 512 \ --learning_rate 5e-5 \ --weight_decay 0.1 \ --num_train_epochs 1 \ --dropout 0.0 \ --gradient_accumulation_steps 1 \ --lr_scheduler_type cosine \ --num_warmup_steps 0 \ --seed 1234 \ --zero_stage $ZERO_STAGE \ --deepspeed \ --output_dir $OUTPUT \ $OUTPUT/training.log要点解读数据--data_path可同时传入多个偏好数据集Dahoas/rm-static、Dahoas/full-hh-rlhf、Dahoas/synthetic-instruct-gptj-pairwise、yitingxie/rlhf-reward-datasets多个数据集会被混合拼接--data_split 2,4,4表示三个训练阶段SFT/RM/PPO按 2:4:4 划分同一份数据DPO 使用其中的 phase 2 部分与 main.py 中train_phase 2的设定 对应。精度与硬件默认 ZeRO Stage 0--zero_stage 0OPT-350m 规模下单机即可训练--dtype默认fp16可切bf16。日志所有输出重定向到$OUTPUT/training.log便于后台观察训练进度。四、切换模型--model_name_or_path 就是唯一开关这是 training_scripts/README.md 的核心指导所有脚本都默认使用facebook/opt-350m想换成其他模型只需替换--model_name_or_path参数。例如把 OPT-350m 换成 EleutherAI 的 GPT-Neo 系列# 原命令 --model_name_or_path facebook/opt-350m # 替换为 --model_name_or_path EleutherAI/gpt-neo-125m由于脚本内部通过 Transformers 的AutoModelForCausalLM与load_hf_tokenizer自动加载模型和分词器见 main.py 中模型创建与分词器加载因此任何 Hugging Face 上的因果语言模型causal LM原则上都可以通过这一个参数接入例如将EleutherAI/gpt-j-6b作为目标模型。关于项目完整支持含 llama2 7B/13B、llama2-70b 等的模型清单请查阅 DeepSpeed-Chat 支持的模型列表即训练脚本 README 中所指 our landing page。更换模型时需要同步考虑两点一是显存规模二是学习率——大模型通常需要更小的学习率见下文 Llama-2 脚本中9.65e-6的取值。五、Llama-2-7B全参数训练与 LoRA 高效微调5.1 全参数训练training_scripts/llama2/run_llama2_7b.sh 展示了 7B 级模型的配置思路默认输出目录为./output_step2_llama_7b_epoch1_lr9.65e-6默认ZERO_STAGE3deepspeed main.py \ --data_path Dahoas/rm-static \ --data_split 2,4,4 \ --model_name_or_path meta-llama/Llama-2-7b-hf \ --per_device_train_batch_size 8 \ --per_device_eval_batch_size 8 \ --max_seq_len 512 \ --learning_rate 9.65e-6 \ --weight_decay 0.1 \ --num_train_epochs 1 \ --gradient_accumulation_steps 1 \ --lr_scheduler_type cosine \ --num_warmup_steps 0 \ --seed 1234 \ --gradient_checkpointing \ --zero_stage $ZERO_STAGE \ --deepspeed \ --offload \ --output_dir $OUTPUT \ $OUTPUT/training.log与 OPT-350m 脚本相比Llama-2 脚本的关键差异--zero_stage 3--offloadZeRO-3 将模型参数、梯度、优化器状态分片到所有 GPU--offload再把优化器状态等卸载到 CPU对应DeepSpeedCPUAdam优化器路径见 main.py 优化器选择使 7B 模型在有限显存下可训练。--gradient_checkpointing以少量计算换取显存进一步降低激活值占用。--learning_rate 9.65e-6远低于 OPT-350m 的5e-5符合大模型 DPO 微调常见做法。5.2 LoRA 高效微调training_scripts/llama2/run_llama2_7b_lora.sh 在上一脚本基础上叠加 LoRA 参数--lora_dim 128 \ --lora_module_name layers. \对应 main.py 的 LoRA 分支当--lora_dim 0时调用convert_linear_layer_to_lora将指定模块范围内的线性层替换为 LoRA 低秩分解结构配合--only_optimize_lora可以只优化 LoRA 参数冻结基座模型配合--lora_learning_rate默认5e-4单独设置 LoRA 学习率。训练结束保存时main.py 会调用convert_lora_to_linear_layer将 LoRA 权重合并回原模型再以标准 HF 格式保存。六、多节点与单卡场景多节点training_scripts/opt/multi_node/run_350m.sh 与单节点脚本参数一致仅将per_device_train_batch_size降到2多卡场景下总 batch 由 world size 放大配合 DeepSpeed 的分布式启动方式运行。单卡training_scripts/opt/single_gpu/run_350m.sh 是最精简的示例通过deepspeed --num_gpus 1 main.py显式限定单 GPU并将--gradient_accumulation_steps提升到4以模拟较大 batch同时开启 TensorBoard 记录deepspeed --num_gpus 1 main.py --model_name_or_path facebook/opt-350m \ --weight_decay 0.1 --dropout 0.0 --gradient_accumulation_steps 4 --zero_stage $ZERO_STAGE \ --enable_tensorboard \ --tensorboard_path $OUTPUT \ --deepspeed --output_dir $OUTPUT $OUTPUT/training.log其中--enable_tensorboard/--tensorboard_path对应 main.py 的 TensorBoard 日志参数默认路径为step2_tensorboard供后续用 TensorBoard 观察损失曲线。七、超参扫描sweep 脚本自动化跑批DPO 脚本还内置了一套超参扫描工具见 training_scripts/opt/single_node/sweep/。其 README.md 说明当前扫描覆盖ZeRO Stage ∈ {2, 3}与Offload ∈ {True, False}共 4 种组合。入口脚本 run_step2_sweep.sh 双层循环生成 4 个组合逐个调用 run_single.shfor z in {2..3} do for offload in true false do cmdbash training_scripts/opt/single_node/sweep/run_single.sh \ ${z} ${offload} z${z}_offload_${offload} $cmd pkill -9 python sleep 60 done done每次跑完一组后脚本会pkill -9 python并休眠 60 秒清理显存run_single.sh则把 ZeRO 阶段与 Offload 开关拼进deepspeed main.py命令Offload 为 true 时追加--offload。该框架可以很容易地扩展扫描维度学习率、weight decay 等只需在run_single.sh中追加参数变量即可。运行扫描只需一条命令在 step2 目录下bash training_scripts/opt/single_node/sweep/run_step2_sweep.sh八、main.py 核心参数全解所有脚本共享 main.py 的parse_args中定义的参数体系下表按功能分组整理关键参数类别参数默认值说明数据--data_pathDahoas/rm-static训练数据路径支持多个数据集混合数据--data_split2,4,4三阶段数据划分比例DPO 取 phase 2数据--data_output_path/tmp/data_files/预处理缓存shuffle index、tokenized .pt 文件存放位置建议放在节点本地存储模型--model_name_or_path必填预训练模型路径或 HF 模型 ID模型--max_seq_len512最大序列长度模型--dropoutNone覆盖模型默认 dropout脚本中常用0.0训练--per_device_train_batch_size16每设备训练 batch训练--per_device_eval_batch_size16每设备评估 batch训练--num_train_epochs1训练轮数训练--gradient_accumulation_steps1梯度累积步数优化--learning_rate1e-3初始学习率OPT 脚本用5e-5Llama-2 用9.65e-6优化--weight_decay0.0权重衰减脚本常用0.1优化--lr_scheduler_typecosine调度器类型linear/cosine/cosine_with_restarts/polynomial/constant/constant_with_warmup优化--num_warmup_steps0预热步数DPO 损失--beta1e-1DPO 损失温度参数典型取值 0.1~0.5beta 趋近 0 时等价于忽略参考模型DPO 损失--label_smoothing0.0标签平滑假设偏好存在噪声以该概率翻转DeepSpeed--zero_stage0ZeRO 优化阶段Actor 模型DeepSpeed--offload关闭启用 ZeRO CPU OffloadDeepSpeed--offload_reference_model关闭为参考模型单独启用 OffloadDeepSpeed--dtypefp16训练精度可选fp16/bf16显存--gradient_checkpointing关闭梯度检查点LoRA--lora_dim0大于 0 时启用 LoRA 高效训练LoRA--lora_module_namedecoder.layers.LoRA 作用模块范围LoRA--only_optimize_lora关闭只优化 LoRA 参数LoRA--lora_learning_rate5e-4LoRA 学习率精度--compute_fp32_loss关闭低精度fp16/bf16下用 fp32 计算损失日志--enable_tensorboard关闭开启 TensorBoard日志--tensorboard_pathstep2_tensorboardTensorBoard 日志目录其他--seed1234随机种子保证可复现其他--local_rank-1分布式训练 local_rank-1 表示单机两个需要展开的 DPO 专属参数其含义直接对应损失函数源码--beta温度参数控制对参考模型未对齐的初始策略偏离的惩罚强度。beta越大模型越不偏离参考模型beta - 0时损失退化为仅最大化 chosen 与 rejected 的对数概率差等价于忽略参考模型。--label_smoothing用于处理偏好标签噪声——假设偏好以该概率被翻转对应损失中logsigmoid(logits) * (1 - label_smoothing)与logsigmoid(-logits) * label_smoothing两项的加权。此外注意main.py会通过deepspeed.add_config_arguments(parser)挂接 DeepSpeed 的通用配置参数因此还可在命令行直接传入--deepspeed_config等标准 DeepSpeed 参数。九、源码层面DPO 损失是如何计算的理解训练脚本背后的计算逻辑能帮助你正确调参。DPO 训练需要同时前向两个模型——被训练的策略模型与冻结的参考模型main.py 中的ref_model构建逻辑 显示参考模型与 Actor 使用同一权重初始化且当zero_stage ! 3时参考模型以 ZeRO-0 加载假设显存足够容纳只有 ZeRO-3 场景才为参考模型复用分片配置并支持--offload_reference_model将参考模型卸载到 CPU。每次训练 step 的核心流程main.py 训练循环DataCollatorReward见 dschat/utils/data/data_utils.py 中的实现将每个样本的 chosen 与 rejected 序列拼接到同一 batchinput_ids前半为 chosen、后半为 rejected对每条样本计算 chosen 与 rejected 首个分叉 token 位置divergence_ind将该位置之前的label_mask置 0只对分歧之后的部分计算对数概率避免 prompt 前缀抵消get_batch_logpsmain.py L219-L229通过torch.gather从 logits 的 log_softmax 中取出每个真实 token 的对数概率并按 label_mask 求和得到序列级对数概率分别对策略模型model与参考模型ref_modeltorch.no_grad()计算chosen_logps、rejected_logps、ref_chosen_logps、ref_rejected_logps按如下公式计算 DPO 损失logits beta * ((chosen_logps - ref_chosen_logps) - (rejected_logps - ref_rejected_logps)) loss -logsigmoid(logits) * (1 - label_smoothing) - logsigmoid(-logits) * label_smoothing其中beta * (logps - ref_logps)正是隐式奖励的估计logsigmoid项则让 chosen 隐式奖励高于 rejected从而驱动策略对齐人类偏好。main.py 注释表明该实现参考了 DPO 开源实现与 Hugging Face TRL 的dpo_trainer。评估阶段main.pyevaluation函数以同样的方式计算验证集损失并额外输出chosen_rewards与rejected_rewards即隐式奖励均值供训练前后对比模型对齐程度。十、数据集格式每个样本一对 chosen / rejected由于 DPO 把语言模型当作奖励模型使用其数据集格式与 Reward Model 微调完全一致见 step2 DPO README 的 Datasets 小节同一输入 prompt 对应两条输出——一条 chosen被人类偏好与一条 rejected被拒绝。训练时模型的目标就是增大 chosen 序列的相对概率、压低 rejected 序列的相对概率。仓库默认使用的Dahoas/rm-static、Dahoas/full-hh-rlhf等开源偏好数据集均符合该格式。十一、训练后评估与模型输出DPO 训练产出的 checkpoint本质上就是一个对齐后的语言模型因此可以像 step1 Supervised Finetuning 那样直接评估如做生成测试、下游任务评测。模型保存逻辑见 main.py 保存部分默认以标准 HF 格式保存save_hf_format而当--zero_stage 3时因每个 GPU 只持有模型分片会额外调用save_zero_three_model完成 ZeRO-3 的权重聚合保存。总结如何选择训练脚本你的场景推荐脚本入门验证 / 单机多卡training_scripts/opt/single_node/run_350m.sh单 GPU 显存受限training_scripts/opt/single_gpu/run_350m.sh配合--gradient_accumulation_steps多节点集群training_scripts/opt/multi_node/run_350m.sh7B 级模型全参数training_scripts/llama2/run_llama2_7b.shZeRO-3 offload7B 级模型显存紧张training_scripts/llama2/run_llama2_7b_lora.shLoRA自动跑多组配置training_scripts/opt/single_node/sweep/run_step2_sweep.sh所有脚本只需修改--model_name_or_path即可切换到其他因果语言模型动手前记得同步评估显存规模并相应调整 ZeRO 阶段、Offload、batch size 与学习率。赞分享示例工程【免费下载链接】DeepSpeedExamplesExample models using DeepSpeed项目地址https://gitcode.com/gh_mirrors/de/DeepSpeedExamples点击查看免费下载相关推荐DeepSpeed-Chat Step 2 奖励模型微调训练脚本实战模型替换、参数全解与打分原理DeepSpeed Chat Step 2 奖励模型微调训练脚本实战模型替换、参数全解与打分原理 本文以 step2_reward_model_finetun示例工程DeepSpeed-Chat 第三阶段 RLHF 微调实战从训练脚本到混合引擎的原理与参数解析DeepSpeed Chat 第三阶段 RLHF 微调实战从训练脚本到混合引擎的原理与参数解析 导读 本文以 DeepSpeedExamples 仓库中 st示例工程ROCm 安装向导中的 GPU Selector 深度解析Instinct / Radeon / Ryzen 显卡与 gfx 架构映射全指南ROCm 安装向导中的 GPU Selector 深度解析Instinct / Radeon / Ryzen 显卡与 gfx 架构映射全指南 本文聚焦 AMD示例工程上一篇Mac美剧播放器终极指南爱美剧客户端的完整使用教程下一篇Tabliss性能优化技巧提升新标签页加载速度的7个方法创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

JSBSim 文档资源全解析:Jupyter 仿真用例、数据电子表格与 Doxygen 文档构建

JSBSim 文档资源全解析:Jupyter 仿真用例、数据电子表格与 Doxygen 文档构建

科学计算科研 【免费下载链接】jsbsim An open source flight dynamics & control software library 项目地址: https://gitcode.com/gh_mirrors/js/jsbsim 点击查看 免费下载 本文以 JSBSim 仓库中 doc/README.md 为线索,系统梳理该开源飞行动力学…

2026/10/5 1:57:25 阅读更多 →
to-spec 拆解:把会消失的对话,变成下一场会话能接手的规格文档

to-spec 拆解:把会消失的对话,变成下一场会话能接手的规格文档

to-spec 拆解:把会消失的对话,变成下一场会话能接手的规格文档 【免费下载链接】skills Skills for Real Engineers. Straight from my .agents directory. 项目地址: https://gitcode.com/GitHub_Trending/skills13/skills 一场会话刚跑完&#…

2026/10/5 1:57:25 阅读更多 →
Android P上添加自定义HIDL实例:从接口定义到SELinux的完整指南

Android P上添加自定义HIDL实例:从接口定义到SELinux的完整指南

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

2026/10/5 1:57:25 阅读更多 →

最新新闻

STM32电子时钟实战:从RTC校准到OLED驱动的硬核调试

STM32电子时钟实战:从RTC校准到OLED驱动的硬核调试

1. 这不是“又一个电子时钟”,而是STM32入门的实战锚点你搜“STM32电子时钟”,页面刷出来几百个教程——有的用51单片机冒充STM32,有的KEIL工程里连HAL库都没开,有的Proteus仿真图里OLED引脚全接错还标着“已实测”。我带过三届嵌…

2026/10/5 4:11:20 阅读更多 →
轴套类零件工程图全解析:视图、尺寸标注与公差配合

轴套类零件工程图全解析:视图、尺寸标注与公差配合

轴、套类零件是机械设计里最绕不开的两大基础件,几乎所有传动系统、支撑结构里都有它们的身影。但很多刚入行的朋友画这类零件的工程图时,容易陷入两个极端:要么视图表达不完整,要么尺寸标注混乱,一张图拿到加工师傅手…

2026/10/5 4:11:20 阅读更多 →
PHP内存管理:引用计数与循环引用GC的深度拆解与实战

PHP内存管理:引用计数与循环引用GC的深度拆解与实战

聊PHP内存管理,永远绕不开两个词:引用计数和循环引用GC。日常写业务代码,你很少直接感知它们,但一旦线上内存持续上涨、常驻进程越跑越臃肿、或者被问到“两个对象互相引用,PHP到底怎么回收”,就会发现在这…

2026/10/5 4:11:20 阅读更多 →
惊蛰唤醒指南:三步清理身体与生活,告别春季疲劳

惊蛰唤醒指南:三步清理身体与生活,告别春季疲劳

这两天我下班路上,看到小区里那排光秃秃的紫叶李终于冒出了花苞。说实话,年初那阵子我状态并不好,每天起床像被人拔了电源,明明睡了八小时还是困,办公桌上堆着去年的文件,回家只想瘫在沙发上刷手机&#xf…

2026/10/5 4:11:20 阅读更多 →
Jetson Nano实时内核编译实战:基于linux-6.6.119打造工业级确定性系统

Jetson Nano实时内核编译实战:基于linux-6.6.119打造工业级确定性系统

1. 项目概述:为什么Jetson Nano需要实时内核?Jetson Nano不是一块普通开发板,它是一台被封装进手掌大小PCB里的嵌入式Linux工作站——4核ARM Cortex-A57、128核Maxwell GPU、4GB LPDDR4内存,硬件规格足以跑通ROS 2的完整导航栈。但…

2026/10/5 4:11:20 阅读更多 →
用Python和SQLite打造“多米诺骨牌”刷题打卡追踪器

用Python和SQLite打造“多米诺骨牌”刷题打卡追踪器

那天晚上的场景我记得很清楚:晚上十一点半打开牛客网的每日一题,题目还没读完,手机弹出来一条消息,我顺手回完消息再回到电脑前,已经过了零点。当天的格子永远空掉了——我坚持了六十多天的连续记录,就此断…

2026/10/5 4:10:19 阅读更多 →

日新闻

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

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

2026/10/5 0:00:22 阅读更多 →
AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

1. 从“plugins”这个词说起:它到底在解决什么问题如果你最近在折腾 AI 编程工具,尤其是 Cursor、Codex CLI、Claude Code 这类带 CLI 的编辑器或命令行助手,那你大概率绕不开一个词——plugins。这个词本身不新鲜,从浏览器到 IDE…

2026/10/5 0:00:23 阅读更多 →
第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

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

2026/10/5 0:00:23 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/5 1:10:22 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/5 3:06:17 阅读更多 →

月新闻

我发现了一个新思路:用 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/4 11:40:45 阅读更多 →
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/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练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/4 20:14:29 阅读更多 →