大模型微调性能优化:MCoreAdapter让LLaMA Factory秒变Megatron专家!

大模型微调性能优化:MCoreAdapter让LLaMA Factory秒变Megatron专家!

序言

LLaMA Factory 是一个广受欢迎的开源大模型微调平台,以其简洁的 API、丰富的训练范式支持(如 (增量)预训练、(多模态)指令监督微调、奖励模型训练、PPO 训练、DPO 训练、KTO 训练、ORPO 训练等)和活跃的中文社区,
成为国内开发者进行LLM 微调的首选工具之一。其基于 Hugging Face Transformers生态构建,支持使用 AccelerateDeepSpeed 作为训练加速后端,在单机多卡场景下表现优异。

然而,当面对百亿参数以上的大模型大规模多节点分布式训练需求时,传统基于数据并行的训练方案(如 ZeROFSDP)往往面临通信瓶颈与显存效率不足的问题。
此时,若能将 LLaMA Factory强大的数据处理与训练配置能力,与 NVIDIA Megatron-LM 这类专为超大规模模型设计的高性能分布式训练框架相结合,将显著提升训练吞吐与可扩展性。

本文将介绍一种高效且实用的技术路径:借助 MCoreAdapter 桥接层,利用 LLaMA Factory 的生态优势驱动 Megatron-LM,实现 SFT、DPO 和 ORPO 等主流微调任务的分布式加速训练

简介

Megatron-LMNVIDIA 开源的、面向超大规模 Transformer模型的分布式训练框架。它在 PyTorch 基础上深度优化,针对NVIDIA GPU架构实现了高度工程化的并行策略,被广泛应用于千亿参数级别模型的预训练与微调,已成为工业级大模型训练的事实标准之一。

其核心优势在于对多维模型并行Multi-dimensional Model Parallelism)的极致优化:

  • 灵活的并行组合:原生支持张量并行(TP)、流水线并行(PP)、序列并行(SP)、上下文并行(CP)及专家并行(EP),可按需组合(如 DP + TP + PP),有效应对不同规模与硬件配置下的训练挑战。
  • 极低的通信开销:通过计算与通信重叠、定制化NCCL 调优等技术,在千卡集群上仍能保持高训练效率。
  • 超大模型友好:相比ZeRO-3FSDP等基于状态切分的数据并行方案,Megatron-LM通过对模型结构本身(如注意力头、FFN层、MoE 专家)进行物理切分,使大部分计算本地化,大幅减少跨设备同步,尤其适合 >100B参数模型的高效训练。

那么,如何让 LLaMA Factory这样以易用性见长的框架,与 Megatron-LM这样以性能见长的引擎协同工作?

答案是:MCoreAdapter

MCoreAdapter 是阿里巴巴开源的 轻量级桥接工具包,最初作为强化学习框架 Roll 的 Megatron 集成组件而开发。它巧妙融合了 Megatron-LM的分布式训练能力与 Hugging Face Transformers风格的简洁接口,不仅支持强化学习场景,
也完整覆盖 预训练PreTraining)等主流LLM/VLM 训练范式。

得益于其模块化设计,MCoreAdapter 可无缝接入 LLaMA Factory 的数据管道与训练配置体系,使得用户既能享受LLaMA Factory的便捷性,又能释放 Megatron-LM在大规模分布式环境下的性能潜力。

本文后续将详细介绍如何基于 MCoreAdapter,使用 LLaMA Factory 的数据格式与配置方式,在 Megatron-LM 上高效执行 SFT、DPO 和 ORPO 微调任务。

快速开始

环境配置

需要提前准备以下环境:

CUDA 版本 >= 12.4cuDNN 版本 >= 9.1.0PyTorch >= 2.5.1SGlang >= 0.4.3vLLM >= 0.7.3 

可以利用conda安装,当然你会只用docker,也可以使用roll社区官方提供的镜像作为基础环境。
官方提供的可选镜像

torch2.6.0 + SGlang0.4.6: roll-registry.cn-hangzhou.cr.aliyuncs.com/roll/pytorch:nvcr-24.05-py3-torch260-sglang046torch2.6.0 + vLLM0.8.4: roll-registry.cn-hangzhou.cr.aliyuncs.com/roll/pytorch:nvcr-24.05-py3-torch260-vllm084torch2.8.0 + vLLM0.10.2: roll-registry-vpc.cn-hangzhou.cr.aliyuncs.com/roll/pytorch:nvcr-25.06-py3-torch280-vllm0102 

当前这里就不讲具体的安装过程了,下面主要介绍下关键的操作。

在基础环境上安装 LLaMA-FactoryMCoreAdapter,操作如下:

git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git && \cd LLaMA-Factory && \pip install -e ".[torch,metrics]" && \pip install "git+https://github.com/alibaba/roll.git#subdirectory=mcore_adapter" 

编写训练启动脚本

脚本名称为run_train.py

import functoolsimport hashlibimport osfrom copy import deepcopyfrom dataclasses import dataclass, fieldfrom typing import Any, Dict, Sequence, Tupleimport torchfrom filelock import FileLockfrom huggingface_hub import snapshot_downloadfrom llamafactory.data import get_dataset, get_template_and_fix_tokenizerfrom llamafactory.data.collator import PairwiseDataCollatorWithPadding, SFTDataCollatorWith4DAttentionMaskfrom llamafactory.hparams import DataArguments, FinetuningArguments, GeneratingArguments, ModelArgumentsfrom llamafactory.model import load_tokenizerfrom llamafactory.train.callbacks import SaveProcessorCallbackfrom llamafactory.train.dpo import run_dpofrom llamafactory.train.pt import run_ptfrom llamafactory.train.sft import run_sftfrom transformers import DataCollatorForSeq2Seq, HfArgumentParserfrom transformers.trainer_callback import TrainerCallbackfrom mcore_adapter.models import AutoConfig, AutoModelfrom mcore_adapter.trainer import DPOTrainer, McaTrainerfrom mcore_adapter.trainer.dpo_config import DPOConfigfrom mcore_adapter.training_args import Seq2SeqTrainingArgumentsdef download_model(model_name_or_path: str, local_dir: str = None) -> str: if os.path.isdir(model_name_or_path): return model_name_or_path use_model_scope = os.getenv("USE_MODELSCOPE", "0") == "1" temp_lock_path = os.path.join( "~/.cache/mcore_adapter/temp_lock", f"{hashlib.md5(model_name_or_path.encode()).hexdigest()}.lock", ) with FileLock(temp_lock_path): if use_model_scope: from modelscope.hub.snapshot_download import snapshot_download as ms_snapshot_download return ms_snapshot_download(model_name_or_path, local_dir=local_dir) return snapshot_download(model_name_or_path, local_dir=local_dir)class ProfCallback(TrainerCallback): def __init__(self, prof): self.prof = prof def on_step_end(self, args, state, control, **kwargs): self.prof.step()@dataclassclass UseMcaArguments: enable_mca: bool = field( default=True, metadata={"help": "Use MCA training pipeline"} # 只生成 --enable_mca / --enable-mca )def get_args() -> Tuple[ Seq2SeqTrainingArguments, ModelArguments, DataArguments, FinetuningArguments, GeneratingArguments, UseMcaArguments,]: parser = HfArgumentParser(( Seq2SeqTrainingArguments, ModelArguments, DataArguments, FinetuningArguments, GeneratingArguments, UseMcaArguments, )) training_args, model_args, data_args, finetuning_args, generating_args, use_mca_args = parser.parse_args_into_dataclasses() if not use_mca_args.enable_mca: from transformers import Seq2SeqTrainingArguments as HFSeq2SeqTrainingArguments training_args = HFSeq2SeqTrainingArguments(**vars(training_args)) model_args.model_name_or_path = download_model(model_args.model_name_or_path) return training_args, model_args, data_args, finetuning_args, generating_args, use_mca_argsdef data_collator_wrapper(data_collator): @functools.wraps(data_collator) def wrapper(features: Sequence[Dict[str, Any]]): labels_key = [k for k in features[0].keys() if k.endswith("labels")] input_ids_key = [k for k in features[0].keys() if k.endswith("input_ids")] for feature in features: if len(labels_key) == 0: # pt feature["labels"] = deepcopy(feature["input_ids"])[1:] for k in labels_key: feature[k] = feature[k][1:] for k in input_ids_key: feature[k] = feature[k][:-1] for k in ["attention_mask", "position_ids"]: if k in feature: feature[k] = feature[k][:-1] return data_collator(features) return wrapperdef pt_mca_train( training_args: Seq2SeqTrainingArguments, model_args: ModelArguments, data_args: DataArguments, finetuning_args: FinetuningArguments,): tokenizer_module = load_tokenizer(model_args) tokenizer = tokenizer_module["tokenizer"] template = get_template_and_fix_tokenizer(tokenizer, data_args) model = AutoModel.from_pretrained(model_args.model_name_or_path, training_args) data_args.cutoff_len += 1 dataset_module = get_dataset(template, model_args, data_args, training_args, stage="pt", **tokenizer_module) data_args.cutoff_len -= 1 data_collator = DataCollatorForSeq2Seq( tokenizer=tokenizer, pad_to_multiple_of=8, label_pad_token_id=-100, ) data_collator = data_collator_wrapper(data_collator) trainer = McaTrainer( model=model, args=training_args, tokenizer=tokenizer, data_collator=data_collator, **dataset_module, ) # with torch.profiler.profile(activities=[torch.profiler.ProfilerActivity.CPU, # torch.profiler.ProfilerActivity.CUDA], # schedule=torch.profiler.schedule(skip_first=0, wait=0, warmup=1, active=2, repeat=1), # on_trace_ready=torch.profiler.tensorboard_trace_handler(f"output_dir_tp2pp1_{training_args.process_index}"), # profile_memory=True, # with_stack=True, # record_shapes=True) as prof: # trainer.add_callback(ProfCallback(prof=prof)) # trainer.train() if "processor" in tokenizer_module and tokenizer_module["processor"] is not None: trainer.add_callback(SaveProcessorCallback(tokenizer_module["processor"])) trainer.train(training_args.resume_from_checkpoint)def sft_mca_train( training_args: Seq2SeqTrainingArguments, model_args: ModelArguments, data_args: DataArguments, finetuning_args: FinetuningArguments,): data_args.neat_packing = training_args.sequence_packing = data_args.neat_packing or training_args.sequence_packing data_args.packing = data_args.neat_packing or data_args.packing tokenizer_module = load_tokenizer(model_args) tokenizer = tokenizer_module["tokenizer"] template = get_template_and_fix_tokenizer(tokenizer, data_args) model = AutoModel.from_pretrained(model_args.model_name_or_path, training_args) data_args.cutoff_len += 1 dataset_module = get_dataset(template, model_args, data_args, training_args, stage="sft", **tokenizer_module) data_args.cutoff_len -= 1 if model.config.hf_model_type in ["qwen2_vl"] and finetuning_args.freeze_vision_tower: for name, p in model.named_parameters(): if any(name.startswith(k) for k in ["vision_model.blocks", "vision_model.patch_embed"]): p.requires_grad_(False) if model.config.hf_model_type in ["qwen2_vl"] and finetuning_args.freeze_multi_modal_projector: for name, p in model.named_parameters(): if any(name.startswith(k) for k in ["multi_modal_projector"]): p.requires_grad_(False) if model.config.hf_model_type in ["qwen2_vl"] and finetuning_args.freeze_language_model: for name, p in model.named_parameters(): if any(name.startswith(k) for k in ["embedding", "decoder", "output_layer"]): p.requires_grad_(False) pad_to_max = training_args.expert_model_parallel_size is not None and training_args.expert_model_parallel_size > 1 and not training_args.variable_seq_lengths data_collator = SFTDataCollatorWith4DAttentionMask( template=template, if pad_to_max else "longest", max_length=data_args.cutoff_len if pad_to_max else None, pad_to_multiple_of=64, label_pad_token_id=-100, **tokenizer_module, ) data_collator = data_collator_wrapper(data_collator) trainer = McaTrainer( model=model, args=training_args, tokenizer=tokenizer, data_collator=data_collator, **dataset_module, ) if "processor" in tokenizer_module and tokenizer_module["processor"] is not None: trainer.add_callback(SaveProcessorCallback(tokenizer_module["processor"])) trainer.train(training_args.resume_from_checkpoint)def dpo_mca_train( training_args: Seq2SeqTrainingArguments, model_args: ModelArguments, data_args: DataArguments, finetuning_args: FinetuningArguments,): tokenizer_module = load_tokenizer(model_args) tokenizer = tokenizer_module["tokenizer"] template = get_template_and_fix_tokenizer(tokenizer, data_args) model = AutoModel.from_pretrained(model_args.model_name_or_path, training_args) if finetuning_args.use_ref_model: ref_config = AutoConfig.from_pretrained(model_args.model_name_or_path, training_args) ref_model = AutoModel.from_config(ref_config) ref_model.load_state_dict(model.state_dict()) else: ref_model = None data_args.cutoff_len += 1 dataset_module = get_dataset(template, model_args, data_args, training_args, stage="rm", **tokenizer_module) data_args.cutoff_len -= 1 pad_to_max = training_args.expert_model_parallel_size is not None and training_args.expert_model_parallel_size > 1 dpo_config = DPOConfig( beta=finetuning_args.pref_beta, pref_loss=finetuning_args.pref_loss, label_smoothing=finetuning_args.dpo_label_smoothing, ) data_collator = PairwiseDataCollatorWithPadding( template=template, pad_to_multiple_of=64, if pad_to_max else "longest", max_length=data_args.cutoff_len if pad_to_max else None, label_pad_token_id=-100, **tokenizer_module, ) data_collator = data_collator_wrapper(data_collator) trainer = DPOTrainer( model=model, ref_model=ref_model, args=training_args, train_config=dpo_config, tokenizer=tokenizer, data_collator=data_collator, **dataset_module, ) if "processor" in tokenizer_module and tokenizer_module["processor"] is not None: trainer.add_callback(SaveProcessorCallback(tokenizer_module["processor"])) trainer.train(training_args.resume_from_checkpoint)def mca_train( training_args: Seq2SeqTrainingArguments, model_args: ModelArguments, data_args: DataArguments, finetuning_args: FinetuningArguments,): if finetuning_args.stage == "pt": pt_mca_train(training_args, model_args, data_args, finetuning_args) elif finetuning_args.stage == "sft": sft_mca_train(training_args, model_args, data_args, finetuning_args) elif finetuning_args.stage == "dpo": dpo_mca_train(training_args, model_args, data_args, finetuning_args) else: raise ValueError("Unknown task: {}.".format(finetuning_args.stage))def llama_factory_train(training_args, model_args, data_args, finetuning_args, generating_args): data_args.cutoff_len += 1 callbacks = None if finetuning_args.stage == "pt": run_pt(model_args, data_args, training_args, finetuning_args, callbacks) elif finetuning_args.stage == "sft": run_sft(model_args, data_args, training_args, finetuning_args, generating_args, callbacks) elif finetuning_args.stage == "dpo": run_dpo(model_args, data_args, training_args, finetuning_args, callbacks) else: raise ValueError("Unknown task: {}.".format(finetuning_args.stage))def main(): training_args, model_args, data_args, finetuning_args, generating_args, use_mca_args = get_args() model_args.model_max_length = data_args.cutoff_len model_args.block_diag_attn = data_args.neat_packing data_args.packing = data_args.packing if data_args.packing is not None else finetuning_args.stage == "pt" if use_mca_args.enable_mca: mca_train(training_args, model_args, data_args, finetuning_args) else: llama_factory_train(training_args, model_args, data_args, finetuning_args, generating_args)if __name__ == "__main__": main() 

run_train.py脚本参考MCoreAdapter中example。
当然在用户官方提供的脚本时,出现了use_mca参数设置冲突问题,因此这里有所修改。

编写训练配置脚本

以下以训练 Qwen2.5-1.5B-InstructSFTLoRA为例。该示例使用了 LLaMA-Factory 内置 data 目录中的数据集,因此建议将脚本置于 LLaMA-Factory 根目录下。

#!/bin/bash# Get script directoryworkdir=$(cd $(dirname $0); pwd)parent_dir=$(dirname "$workdir")# Default configurationsNPROC_PER_NODE=${NPROC_PER_NODE:-1}TENSOR_MODEL_PARALLEL_SIZE=${TENSOR_MODEL_PARALLEL_SIZE:-$NPROC_PER_NODE}PIPELINE_MODEL_PARALLEL_SIZE=1MODEL_NAME="/models/Qwen2.5-1.5B-Instruct"export DISABLE_VERSION_CHECK=1USE_MCA=true# Parallel configuration optionsmca_options=" \ --tensor_model_parallel_size ${TENSOR_MODEL_PARALLEL_SIZE} \ --sequence_parallel \ --pipeline_model_parallel_size ${PIPELINE_MODEL_PARALLEL_SIZE} \ --use_distributed_optimizer \ --bias_activation_fusion \ --apply_rope_fusion \ --overlap_param_gather \ --overlap_grad_reduce"llama_factory_options=" \ --deepspeed=${parent_dir}/examples/deepspeed/ds_z3_config.json"# Training parametersoptions=" \ --do_train \ --stage=sft \ --finetuning_type=lora \ --lora_target=all \ --dataset=identity,alpaca_en_demo \ --preprocessing_num_workers=8 \ --cutoff_len=1024 \ --template=qwen \ --model_name_or_path=$MODEL_NAME \ --output_dir=./tmp/ \ --per_device_train_batch_size=1 \ --gradient_accumulation_steps=4 \ --calculate_per_token_loss=True \ --max_steps=10 \ --learning_rate=2e-5 \ --logging_steps=1 \ --save_steps=50 \ --lr_scheduler_type=cosine \ --bf16 \ --num_train_epochs=10.0 \ --overwrite_cache \ --overwrite_output_dir \ --per_device_eval_batch_size=1 \ --warmup_ratio=0.1 \ --val_size=0.1 \ --eval_strategy=steps \ --eval_steps=500 \ --max_samples=1000 \ --use_swanlab=false \ --swanlab_project=llamafactory \ --swanlab_run_name=Qwen2.5-1.5B-Instruct \ --swanlab_api_key=G015uugTzA1cFFWpSer8V \ --ddp_timeout=180000000"# Add options based on USE_MCAif [ "$USE_MCA" = true ]; then options="$options $mca_options --enable_mca" echo "[$(date '+%Y-%m-%d %H:%M:%S')] [INFO] MCA optimization enabled"else NPROC_PER_NODE=$(($NPROC_PER_NODE / $TENSOR_MODEL_PARALLEL_SIZE / $PIPELINE_MODEL_PARALLEL_SIZE)) options="$options $llama_factory_options --enable_mca=False" echo "[$(date '+%Y-%m-%d %H:%M:%S')] [INFO] DeepSpeed optimization enabled"fiecho "[$(date '+%Y-%m-%d %H:%M:%S')] [INFO] Starting single-node training"torchrun --nproc_per_node=$NPROC_PER_NODE $workdir/run_train.py $optionsecho "[$(date '+%Y-%m-%d %H:%M:%S')] [INFO] Training job completed" 

脚本参考 MCoreAdapter 中的示例。

  • USE_MCA: 默认为 true,表示启用 MCoreAdapter优化。
  • NPROC_PER_NODE: 设置每个节点的 GPU 数量,应与实际分配的 GPU数一致。多卡训练时需相应增加该值;多机多卡训练可通过 torchrun 实现,本文不再展开。
  • TENSOR_MODEL_PARALLEL_SIZE: 张量并行度,默认为 1(即单卡训练)。
  • --dataset: 使用 LLaMA Factory 标准格式的数据集。此处直接调用其内置示例数据集。
  • --model_name_or_path: 指定模型路径,支持标准 Hugging Face 格式的模型。

从训练配置可以看出,绝大多数参数沿用了 LLaMA Factory 原生配置。唯一区别在于:使用 Megatron 时无需指定 --deepspeed,而是替换为 Megatron 相关的并行配置项

如果训练的是 MoE 模型(如 Qwen/Qwen3-235B-A22B),可额外添加如下 MoE 专用配置:

--moe_grouped_gemm=True # grouped gemm 加速 moe mlp 计算速度--moe_token_dispatcher_type=alltoall--expert_model_parallel_size=8# moe layer 的中间状态显存占用较高,可以加 recompute 来节省显存--moe_layer_recompute=True # 以下为非 MoE 配置,训练 Qwen3-235B 所需# 模型权重过大,通过 pipeline 并行分散模型参数。注意开启 pipeline 并行时 gradient_accumulation_steps 需要是 pp 的倍数,如 8, 16--pipeline_model_parallel_size=8 --virtual_pipeline_model_parallel_size=6# 235B 有94层,因此 lm-head 和 embedding 也算作一层,凑够 96层--account_for_loss_in_pipeline_split --account_for_embedding_in_pipeline_split 

模型权重转回 huggingface 格式

通过 Megatron 训练得到的模型权重格式与 Hugging Face不兼容,需进行转换。

MCoreAdapter 框架支持在保存时直接输出为HF 格式:只需启用 --save_hf_model=True。但该选项会增加 checkpoint保存耗时并占用额外显存。

若训练完成后再转换,可直接使用项目提供的转换脚本:

python tools/convert.py --checkpoint_path path_to_megatron_model --output_path path_to_output_hf_model 

与其他 Adapter 框架集成Megatron的方式不同,MCoreAdapter 支持直接加载 Hugging Face 格式的原始模型进行 Megatron 训练,无需预先将 HF 模型转换为 Megatron 格式,极大简化了使用流程。

由于篇幅限制,本文仅简要介绍了如何通过 MCoreAdapterMegatron-LM 无缝接入 LLaMA Factory 以执行 SFT 训练,并以一个小型 Dense 模型(Qwen2.5-1.5B)为例进行演示。在此规模下,性能收益可能并不显著,与标准 LLaMA Factory训练体验相近。

真正的优势体现在超大规模模型(如百亿/千亿参数)——此时Megatron 的多维并行能力可充分发挥,显著提升训练效率与资源利用率。例如MoE模型的训练。

如何系统的学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

一直在更新,更多的大模型学习和面试资料已经上传带到ZEEKLOG的官方了,有需要的朋友可以扫描下方二维码免费领取【保证100%免费】👇👇

在这里插入图片描述

01.大模型风口已至:月薪30K+的AI岗正在批量诞生

在这里插入图片描述

2025年大模型应用呈现爆发式增长,根据工信部最新数据:

国内大模型相关岗位缺口达47万

初级工程师平均薪资28K(数据来源:BOSS直聘报告)

70%企业存在"能用模型不会调优"的痛点

真实案例:某二本机械专业学员,通过4个月系统学习,成功拿到某AI医疗公司大模型优化岗offer,薪资直接翻3倍!

02.大模型 AI 学习和面试资料

1️⃣ 提示词工程:把ChatGPT从玩具变成生产工具
2️⃣ RAG系统:让大模型精准输出行业知识
3️⃣ 智能体开发:用AutoGPT打造24小时数字员工

📦熬了三个大夜整理的《AI进化工具包》送你:
✔️ 大厂内部LLM落地手册(含58个真实案例)
✔️ 提示词设计模板库(覆盖12大应用场景)
✔️ 私藏学习路径图(0基础到项目实战仅需90天)

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述
在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传ZEEKLOG,朋友们如果需要可以微信扫描下方ZEEKLOG官方认证二维码免费领取【保证100%免费
在这里插入图片描述

Read more

从思考到实现:在 VS Code 中集成 MiniMax M2.1,解锁 AI 编程新范式

从思考到实现:在 VS Code 中集成 MiniMax M2.1,解锁 AI 编程新范式

在 AI 辅助编程(AI Coding)百家争鸣的今天,开发者们一直在寻找那个既能理解复杂逻辑、又能精准产出代码的“神队友”。最近,MiniMax M2.1 凭借其独特的 Interleaved Thinking(交错思考) 机制,在编程圈引起了广泛关注。 为什么选择 MiniMax 进行编程? 1. 逻辑严密的“交错思考”:不同于普通模型直接输出代码,M2.1 会先在 <think> 标签内进行深度推理,分析架构后再下笔,极大地减少了逻辑断层。 2. 超大上下文支持:在处理大型项目或重构复杂函数时,M2.1 能够精准捕捉全局上下文信息。 3. 极速中文理解:作为国产大模型的佼佼者,它在中文注释理解和响应速度上有着天然优势,拒绝“小作文”式的废话。 选购指南:主流

AI的提示词专栏:低资源模型(7B)Prompt 高质量输出策略

AI的提示词专栏:低资源模型(7B)Prompt 高质量输出策略

AI的提示词专栏:低资源模型(7B)Prompt 高质量输出策略 本文聚焦参数量约 70 亿的低资源模型,先分析其部署成本低但存在知识覆盖有限、逻辑连贯性不足等输出痛点,再从指令简化与目标聚焦、知识注入与上下文补充、示例引导与格式约束、逻辑引导与多轮交互四方面,提出核心 Prompt 优化策略。随后结合内容创作、编程、数据分析三大行业场景,通过优化前后 Prompt 对比、预期输出及技巧点分析提供实战案例,并给出准确性、完整性等效果评估指标与迭代优化等调优方法,还补充硬件配置、模型量化等环境适配建议,为低资源模型高效生成高质量内容提供全面指导。 人工智能专栏介绍     人工智能学习合集专栏是 AI 学习者的实用工具。它像一个全面的 AI 知识库,把提示词设计、AI 创作、智能绘图等多个细分领域的知识整合起来。无论你是刚接触 AI 的新手,还是有一定基础想提升的人,都能在这里找到合适的内容。从最基础的工具操作方法,到背后深层的技术原理,专栏都有讲解,还搭配了实例教程和实战案例。这些内容能帮助学习者一步步搭建完整的

告别AI失忆!移动云大云海山数据库解锁OpenClaw云端长期记忆

告别AI失忆!移动云大云海山数据库解锁OpenClaw云端长期记忆

在数字化办公的今天,你是否需要一位真正“懂你”的AI助手? OpenClaw正是这样的存在:它能快速学习你的工作习惯,通过技能/插件灵活接入外部工具,帮你高效处理任务。同时,它采用“本地优先”设计,核心数据优先留存本机,体验流畅、隐私边界清晰,离线也可用。 但本地化部署也带来了新的难题: 在公司电脑里聊得火热,回到家打开笔记本,它却像初次见面般“失忆”。不仅跨设备会出现记忆断层,即便在同一终端进行多轮交互,也常常面临历史上下文丢失、长期记忆不足的问题。 要让OpenClaw真正实现跨设备、跨场景的“有记忆、能复用”,就必须为它搭建一个稳定可靠的云端长期记忆底座。而在落地过程中,云端记忆通常会面临三大核心挑战: 1、持续写入与反复更新:记忆不是一次写入就结束,而是会被不断补充、修订与清理。 2、对话时的高频检索与读峰值:平时写入较平缓,但一进入对话就需要快速、并发地召回。 3、追溯/回滚/审计:出错时要能定位原因,必要时能回到可信版本。 #移动云大云海山数据库

拒绝 AI 盲目梭哈:拆解 Garry Tan 的 gstack 架构逻辑

拒绝 AI 盲目梭哈:拆解 Garry Tan 的 gstack 架构逻辑

拒绝 AI 盲目梭哈:拆解 Garry Tan 的 gstack 架构逻辑 YC 的 Garry Tan 把他那套压箱底的 AI 开发流开源了,名字很直白,叫 gstack。看了一圈源码,这东西的本质不是什么自动化写代码的脚本,而是给 Claude Code 这种暴力工具装上了一个基于现代软件工程流程的约束框架。它把 Claude 从一个随时可能失控的单兵,强行捏合成了一个由 CEO、工程经理和 QA 组成的虚拟公司。 如果你觉得现在的 AI 编程只是在玩简单的 Prompt 对话,那 gstack 的思路可能会让你清醒一点:它不是在教 AI 怎么写代码,而是在教 AI 怎么像个正经的工程团队一样协同。我看重的是它对冲动编码的抑制,这才是架构师该有的思维。 https: