
深度学习计算机视觉NLP多模态模型训练大模型【免费下载链接】corenetCoreNet: A library for training deep neural networks项目地址https://gitcode.com/GitHub_Trending/co/corenet点击查看免费下载本文以 CoreNet 仓库中 OpenELM 预训练指南projects/openelm/README-pretraining.md为骨架完整介绍 OpenELM-270M / 450M / 1.1B / 3B 四个模型的从零预训练流程包括四类公开语料的下载与重命名规范、general_lm数据集配置、四个预训练 YAML 配置文件的逐段解读、多节点多 GPU 启动命令以及官方发布的模型权重与完整训练 Checkpoint 的迭代对照表。读完本文你将能够按照 Apple 官方实验的设置在自己的集群上复现 OpenELM 的预训练管线并正确使用官方 Checkpoint 进行续训或评估。一、预训练总览数据、模型与硬件规模OpenELMOpen Efficient Language Models是一族面向开放训练与推理框架的高效语言模型。在 CoreNet 中OpenELM 的预训练数据由四类公开语料构成RefinedWeb约 5535 个 parquet 文件文本字段键为contentPILE去重后的 the_pile 数据集约 1650 个 parquet 文件文本字段键为textRedPajama子集包含 arxiv、book、github、stackexchange、wikipedia、c4 等子集均为 jsonl 文件Dolma v1.6子集包含 books、peS2o、reddit、stack、wiki 等子集均为 json.gz 文件。注意使用任何数据集之前请逐一接受各个数据集的许可协议。官方实验在多节点、每节点多 GPU的环境下完成训练具体使用的节点数与 GPU 数如 16 节点 × 8 张 A100/H100在 projects/openelm/pretraining_configs/ 下的四个配置文件中以注释形式给出。其中 270M 与 450M 规模不使用 FSDP靠更多节点摊薄显存而 1.1B 与 3B 使用 FSDP 激活检查点activation checkpointing来降低显存占用——这一点在后面的配置文件解读中会逐一展开。二、数据集准备train_data_info配置逐条详解预训练数据集以文件集合的形式被消费。CoreNet 的GeneralLMDataset实现见 corenet/data/datasets/language_modeling/general_lm.py支持读取.parquet、.jsonl与.json.gz三种格式并用一种文件标识符 区间的紧凑写法描述成百上千个文件而无需逐个罗列路径。每个数据集条目是一个包含三个必填键的字典源码check_list_of_dicts_with_mandatory_keys强制校验[file_name, text_key, file_id_range]见 general_lm.py键含义示例file_name文件路径模板其中{file_id:05d}等格式符会被真实文件序号替换.../refinedweb-{file_id:05d}-of-05534.parquettext_key每条文档JSON 对象中保存正文文本的字段名content、textfile_id_range文件序号区间[起始, 结束)左闭右开[0, 5534]表示序号 0 到 5533 共 5534 个文件源码中_prepare_dataset见 general_lm.py会遍历区间内的每个file_id调用file_name.format(file_id...)生成完整路径列表并在shuffle_data: true时对文件列表做随机打乱。理解这一机制后下面这段官方数据配置就一目了然了——它是 README 原文的核心内容可整段复制进自己的 YAMLdataset: language_modeling: shuffle_data: true general_lm: # path to HF dataset train_data_info: [ ####### RefinedWeb ######## # 可从 HuggingFace 的 falcon-refinedweb 数据集页面下载共 5535 个 parquet 文件。 # 官方将文件重命名为 refinedweb-{file_id:05d}-of-05534.parquet 格式。 { # file_name: REPLACE_WITH_LOCATION_OF_DOWNLOADED_REFINED_WEB_DATA/refinedweb-{file_id:05d}-of-05534.parquet, text_key: content, file_id_range: [0, 5534] }, ####### RedPAJAMA ######## # Redpajama 数据可从 data.together.xyz 提供的 urls.txt 清单下载。 # 建议按如下格式重命名区别于 CoreNet 默认期望的格式 # LOCATION_OF_DOWNLOADED_REDPAJAMA_DATA/REDPAJAMA_SUBSET_NAME/REDPAJAMA_SUBSET_NAME-FILE_ID-TOTAL_FILES.jsonl # 其中 FILE_ID 是子集内文件的唯一序号如 00001TOTAL_FILES 是该子集文件总数如 00099。 ### Arxiv假设子集有 100 个文件arxiv-00000-00099.jsonl ... arxiv-00099-00099.jsonl { # file_name: LOCATION_OF_DOWNLOADED_REDPAJAMA_DATA/arxiv/arxiv-{file_id:05d}-00099.jsonl, text_key: text, file_id_range: [0, 100] }, ### BooksRedPajama 中 book 子集仅 1 个文件 { # file_name: LOCATION_OF_DOWNLOADED_REDPAJAMA_DATA/book/book-{file_id:05d}-00001.jsonl, text_key: text, file_id_range: [0, 1] }, ### Github { # file_name: LOCATION_OF_DOWNLOADED_REDPAJAMA_DATA/github/github-{file_id:05d}-00098.jsonl, text_key: text, file_id_range: [0, 98] }, ### Stackexchange { # file_name: LOCATION_OF_DOWNLOADED_REDPAJAMA_DATA/stackexchange/stackexchange-{file_id:05d}-00001.jsonl, text_key: text, file_id_range: [0, 1] }, ### wikipedia { # file_name: LOCATION_OF_DOWNLOADED_REDPAJAMA_DATA/wikipedia/wiki-{file_id:05d}-00001.jsonl, text_key: text, file_id_range: [0, 1] }, ### C4 { # file_name: LOCATION_OF_DOWNLOADED_REDPAJAMA_DATA/c4/c4-{file_id:05d}-01024.jsonl, text_key: text, file_id_range: [0, 1024] }, ####### PILE ######## # 可从 HuggingFace 的 the_pile_deduplicated 数据集页面下载共 1650 个 parquet 文件。 # 与 RefinedWeb 类似建议按如下格式重命名 { # file_name: LOCATION_OF_DOWNLOADED_PILE_DATA/pile-{file_id:05d}-of-01650.parquet, text_key: text, file_id_range: [0, 1650] }, ####### Dolma v1.6 ######## # Dolma v1.6 的下载地址清单可在 HuggingFace 的 allenai/dolma 数据集页面的 urls/v1_6.txt 中找到。 # 文件以 json.gz 格式提供同样建议按如下命名规范重命名 ### Gutenberg books { # file_name: LOCATION_OF_DOWNLOADED_DOLMAv1.6_DATA/books/books-{file_id:04d}.json.gz, text_key: text, file_id_range: [0, 3] }, ### peS2o { # file_name: LOCATION_OF_DOWNLOADED_DOLMAv1.6_DATA/pes2o/pes2o_v2-{file_id:04d}.json.gz, text_key: text, file_id_range: [0, 26] }, ### reddit { # file_name: LOCATION_OF_DOWNLOADED_DOLMAv1.6_DATA/reddit/reddit-v5-dedupe-pii-nsfw-toxic-{file_id:04d}.json.gz, text_key: text, file_id_range: [0, 78] }, ### stack { # file_name: LOCATION_OF_DOWNLOADED_DOLMAv1.6_DATA/stack/stack-v4-train-{file_id:04d}.json.gz, text_key: text, file_id_range: [0, 149] }, ### wiki { # file_name: LOCATION_OF_DOWNLOADED_DOLMAv1.6_DATA/wiki/en_simple_wiki_v0-{file_id:04d}.json.gz, text_key: text, file_id_range: [0, 2] }, ]三个实操要点重命名是硬性要求CoreNet 依靠{file_id:...}占位符批量展开路径下载后必须把文件名统一成文档规定的模式例如 RefinedWeb 的refinedweb-00000-of-05534.parquet。官方明确说明 RefinedWeb 与 PILE 下载后需要重命名RedPajama 与 Dolma 也推荐按同样思路处理。file_id_range左闭右开[0, 5534]实际展开为序号 05533 共 5534 个文件。若某个子集只有单文件如 book、wikipedia区间写成[0, 1]即可源码在 general_lm.py 的注释中专门说明了单文件场景。支持本地与远端路径file_name既可以是本地绝对路径也可以是 S3 等远端地址GeneralLMDataset的_download_if_required见 general_lm.py 起会在需要时自动拉取远端文件到本地缓存。三、预训练配置文件逐段解读四个模型的预训练配置分别位于openelm_270M.yamlopenelm_450M.yamlopenelm_1_1B.yamlopenelm_3B.yaml四个文件结构高度一致差异集中在模型名、学习率与 FSDP 开关上。下面以 270M 为例逐段拆解文中引用行号均对应 openelm_270M.yaml。3.1 共享锚点YAML 锚点taskname: [OpenELM-270M] _anchor_context_length: _anchor_context_length 2048 # 实际 vocab size 为 32001含 padding token再补几个 token 使其对硬件更友好 _anchor_vocab_size: _anchor_vocab_size 32128 _anchor_padding_index: _anchor_padding_index 32000文件开头的锚点定义了三个贯穿全文件的常量上下文长度 2048、词表大小 32128、padding 索引 32000。注释说明LLaMA 词表实际为 32001追加 padding token 后向上取整到 3212864 的倍数可以让分类层logits 层的矩阵运算对硬件GPU 张量核更友好padding 位置 32000 在损失计算时被忽略。3.2common训练基础设施common: run_label: train log_freq: 500 auto_resume: true grad_clip: 1.0 save_all_checkpoints: true save_interval_freq: 5000 eval_every_k_iterations: 10000 mixed_precision: true mixed_precision_dtype: bfloat16auto_resume: true崩溃后自动从最近的 Checkpoint 恢复训练配合下文的数据状态机制grad_clip: 1.0梯度裁剪阈值save_interval_freq: 5000每 5000 迭代保存一次 Checkpointsave_all_checkpoints: true保留全部而非仅最优mixed_precision_dtype: bfloat16混合精度使用 bf16。270M 与 450M 走的是common层的混合精度开关而 1.1B 与 3B 因启用 FSDP其精度策略在fsdp段单独声明FSDP 在内部自行处理混合精度不使用 autocast 与 GradScaler这一点可从 corenet/engine/fsdp_trainer.py 的gradient_scaler属性注释得到印证。3.3dataset语料与采样策略dataset: root_train: disable_val: true # 有效 batch size 约为 4M tokens16 条序列 x 8 张 A100 80GB x 16 节点 x 2048 tokens/序列 train_batch_size0: 16 workers: 4 persistent_workers: true pin_memory: true category: language_modeling name: general_lm language_modeling: sequence_length: *_anchor_context_length # 过滤 token 化后不足 512 tokens 的文本避免过多 padding min_tokens_per_text: 256 # 过滤 token 化前不足 200 字符的文本 min_characters_per_text: 200 shuffle_data: true general_lm: train_data_info: [ ... ] # 即上一节的数据配置关键点train_batch_size0: 16是单卡batch size16 序列 × 2048 tokens 每卡 32768 tokens乘以 8 卡 × 16 节点后每迭代有效样本量约为4M tokens270M 注释强调未使用 FSDP 与激活检查点因此用更多节点即通过更多节点弥补单卡显存限制min_tokens_per_text与min_characters_per_text两道文本过滤器保证短文本不会在 2048 长度的序列里制造大量 paddingdisable_val: true表示预训练阶段不设验证集训练本身就是持续评估eval_every_k_iterations每 1 万迭代算一次训练 loss。3.4text_tokenizerLLaMA SentencePiecetext_tokenizer: name: sentence_piece sentence_piece: enable_nfc_normalization: true append_sot_token: true append_eot_token: true # model_path: PATH_OF_LLAMA_SPM_MODEL # 取消注释并填入 LLaMA SentencePiece 模型路径OpenELM 沿用LLaMA v1/v2 的 SentencePiece tokenizer需自行从官方仓库下载模型文件后填入model_path。append_sot_token/append_eot_token在序列首尾附加开始/结束标记enable_nfc_normalization启用 Unicode NFC 归一化。3.5loss交叉熵 z-lossloss: category: language_modeling language_modeling: name: cross_entropy cross_entropy: ignore_index: *_anchor_padding_index use_z_loss: trueignore_index: 32000padding token 不参与损失计算use_z_loss: true在 softmax logits 上叠加 z-loss 辅助项稳定大规模训练中 logits 的数值范围。3.6optim与schedulerAdamW 余弦退火optim: name: adamw weight_decay: 0.1 no_decay_bn_filter_bias: true adamw: beta1: 0.9 beta2: 0.95 eps: 1.e-8 scheduler: is_iteration_based: true # 总共训练约 1.4-1.5T tokens max_iterations: 350000 name: cosine warmup_init_lr: 1.e-06 # 前 5000 迭代约 20B tokens线性预热 warmup_iterations: 5000 cosine: max_lr: 0.0053 # 270M # 论文惯例 min_lr 0.1 x max_lr min_lr: 0.00053AdamW 使用weight_decay0.1、beta(0.9, 0.95)并对 bias 与 BN 参数豁免衰减is_iteration_based: true调度器按迭代而非 epoch 推进max_iterations: 350000配合 4M tokens/迭代整个预训练约消耗 1.41.5T tokens前 5000 迭代从1e-6线性预热到max_lr随后余弦退火至min_lr 0.1 × max_lr。各模型的峰值学习率汇总如下对应各自配置文件cosine.max_lr模型max_lrmin_lrFSDP激活检查点OpenELM-270M0.00530.00053否否OpenELM-450M0.00390.00039否是OpenELM-1.1B0.00240.00024是是OpenELM-3B0.00120.00012是是3.7model、stats与 3B 特有的fsdp段model: activation_checkpointing: false # 1.1B/3B 为 true language_modeling: name: general_gpt general_gpt: model_name: OpenELM-270M vocab_size: *_anchor_vocab_size max_context_length: *_anchor_context_length padding_index: *_anchor_padding_index stats: val: [ loss] train: [loss] checkpoint_metric: loss.total_loss checkpoint_metric_max: falsegeneral_gpt是 OpenELM 在 CoreNet 中的模型实现源码位于 corenet/modeling/models/language_modeling/general_gpt.pymodel_name决定模型结构stats.checkpoint_metric: loss.total_losscheckpoint_metric_max: false以损失越小越好为保存 Checkpoint 的判据。1.1B 与 3B 额外启用 FSDP 段见 openelm_3B.yamltrain_eval_pipeline: name: fsdp_train_eval_pipeline fsdp: sharding_strategy: full_shard parameter_datatype: *_anchor_forward_dtype # bfloat16 gradient_reduction_datatype: *_anchor_backward_dtype # float32 buffer_datatype: *_anchor_forward_dtype # bfloat16 cpu_offload: false limit_all_gathers: true并定义_anchor_forward_dtype: bfloat16、_anchor_backward_dtype: float32两个精度锚点前向计算用 bf16 省显存、梯度归约用 fp32 保精度。fsdp_train_eval_pipeline对应源码 corenet/train_eval_pipelines/fsdp_train_eval.py它要求必须启用分布式训练--ddp.use-distributed并将模型包装为FullyShardedDataParallelWrapper同时对指定子模块套用激活检查点见 fsdp_train_eval.py。相应地FSDP 模式下common段不再使用mixed_precision开关而是完全由fsdp段接管精度策略。四、多节点多 GPU 启动训练预训练在多节点、每节点多 GPU环境下进行。官方给出在第i个节点上启动训练的示例命令export CFG_FILEPATH_TO_OPENELM_MODEL_CONFIGURATION_FILE export RANKNODE_ID * NUM_GPUS_PER_NODE export WORLD_SIZENUM_NODES * NUM_GPUS_PER_NODE corenet-train --common.config-file $CFG_FILE --ddp.rank $RANK --ddp.world-size $WORLD_SIZE --ddp.dist-url tcp://IP_OF_NODE0:FREEPORT参数含义参数含义示例16 节点 × 8 GPU第 3 个节点--common.config-file模型配置文件路径projects/openelm/pretraining_configs/openelm_3B.yaml--ddp.rank全局进程 rank 节点号 × 每节点 GPU 数2 × 8 16--ddp.world-size总进程数 节点数 × 每节点 GPU 数16 × 8 128--ddp.dist-url0 号节点的 TCP 地址与空闲端口tcp://NODE0_IP:PORT启动流程拆解每个节点上为每张 GPU 启动一个进程各自的RANK在0到WORLD_SIZE-1之间全局唯一例如节点 0 的 8 个 GPU 对应 rank 07节点 1 对应 815依此类推所有进程通过 0 号节点的dist-url建立分布式通信corenet-train是 CoreNet 的训练入口命令。从源码看其 CLI 实现在 corenet/cli/entrypoints.py底层调用链为入口 → corenet/cli/main_train.py 的main_worker→ 解析参数得到train_eval_pipeline由--train-eval-pipeline.name决定默认default_train_eval_pipeline大模型用fsdp_train_eval_pipeline→ 由 pipeline 装配 model / criteria / optimizer / scheduler 并启动 launcher 在每个 GPU worker 上执行训练循环。续训与数据状态机制预训练语料动辄数万个文件、训练时长以周计中断恢复至关重要。CoreNet 为此实现了数据状态data state机制见 general_lm.py每个 rank 的每个 worker 会把当前正在处理的文件序号file、块序号chunk、epoch 序号周期性序列化保存到results_loc/run_label/data_states/data_state_{rank}_{worker_id}.pkl状态保存间隔由dataset.language_modeling.general_lm.data_state_save_interval控制默认 15 分钟文件级与 epoch 级切换时自动重置 chunk 计数配合common.auto_resume: true与完整训练 Checkpoint含优化器状态训练崩溃后可从几乎相同的文档位置无缝续跑避免重复消耗海量语料。五、官方预训练 Checkpoint、模型权重与日志Apple 官方在文档中发布了 OpenELM 预训练各阶段的 Checkpoint分为两类5.1 模型权重 Checkpoint仅包含模型权重适合直接用于评估或微调。文件命名遵循checkpoint_epoch_0_iter_{ITER}.pt规律ITER为训练迭代号文档按迭代步与模型尺寸给出对照表迭代步OpenELM-270MOpenELM-450MOpenELM-1.1BOpenELM-3B50kcheckpoint_epoch_0_iter_49999.pt同左列命名规律同左列命名规律同左列命名规律100kcheckpoint_epoch_0_iter_99999.pt.........150kcheckpoint_epoch_0_iter_149999.pt.........200kcheckpoint_epoch_0_iter_199999.pt.........250kcheckpoint_epoch_0_iter_249999.pt.........300kcheckpoint_epoch_0_iter_299999.pt.........330kcheckpoint_epoch_0_iter_329999.pt.........335kcheckpoint_epoch_0_iter_334999.pt.........340kcheckpoint_epoch_0_iter_339999.pt.........345kcheckpoint_epoch_0_iter_344999.pt.........350kcheckpoint_epoch_0_iter_349999.pt.........末 5 个 Checkpoint 平均checkpoint_average.pt.........训练日志training_logs.txt.........各文件的完整下载地址见原文档表格托管于 Apple 官方文档资源域名下的corenet/v0.1.0/openelm/pretrained/{270M|450M|1.1B|3B}/目录。checkpoint_average.pt是训练末尾 5 个 Checkpoint 权重的平均通常作为评估与后续阶段指令微调、LoRA 微调的推荐起点。5.2 完整训练 Checkpoint包含训练状态信息模型权重 优化器状态等适用于从断点恢复训练。命名规律为training_checkpoint_epoch_0_iter_{ITER}.pt此外还有training_checkpoint_last.pt表示训练结束时的最终完整状态迭代步OpenELM-270MOpenELM-450MOpenELM-1.1BOpenELM-3B50k / 100k / 150k / 200k / 250k / 300k / 330k / 335k / 340k / 345k / 350ktraining_checkpoint_epoch_0_iter_49999.pt 起依迭代号递增同左同左同左训练结束training_checkpoint_last.pt.........两类 Checkpoint 的分工与 README 中的使用建议一致评估/微调用权重 Checkpoint续训用完整 Checkpoint。六、总结与进一步阅读在 CoreNet 中预训练 OpenELM 的完整链路可归纳为四步准备语料下载 RefinedWeb、PILE、RedPajama、Dolma v1.6按文档规范重命名并在train_data_info中用file_nametext_keyfile_id_range描述文件集合配置训练从 projects/openelm/pretraining_configs/ 选取对应模型配置填入 tokenizer 路径与数据路径小模型270M/450M走常规混合精度大模型1.1B/3B启用fsdp_train_eval_pipeline与激活检查点多节点启动按RANK NODE_ID × GPUS_PER_NODE、WORLD_SIZE NODES × GPUS_PER_NODE逐节点执行corenet-train依赖自动续训与数据状态机制保障长周期训练的可恢复性成果使用使用官方发布的两类 Checkpoint 分别进行续训、评估或下游微调。预训练完成之后官方还提供了后续环节的完整配套指令微调projects/openelm/README-instruct.md、参数高效微调 LoRAprojects/openelm/README-peft.md以及将模型转换为 MLX 格式在 Apple 芯片上推理的方案mlx_examples/open_elm/README.md可继续深入。赞分享深度学习计算机视觉NLP多模态模型训练大模型【免费下载链接】corenetCoreNet: A library for training deep neural networks项目地址https://gitcode.com/GitHub_Trending/co/corenet点击查看免费下载相关推荐ESPnet2 日语多方言 TTS 实战JMD Recipe 数据准备、Tacotron2 训练与预训练模型使用指南ESPnet2 日语多方言 TTS 实战JMD Recipe 数据准备、Tacotron2 训练与预训练模型使用指南 本文以 ESPnet2 的 egs2/j人工智能语音音频深度学习NLPOceanBase 安全基线检查实操指南从默认账号风险到整改闭环OceanBase 安全基线检查实操指南从默认账号风险到整改闭环 一个没改名的默认账号如何变成未授权访问 渗透测试报告里最常见的一条发现sys 租户的 r深度学习计算机视觉NLP多模态模型训练大模型用 abogen 文本转语音 5 分钟把电子书变成带字幕的有声读物用 abogen 文本转语音 5 分钟把电子书变成带字幕的有声读物 abogen 是一款开源的有声读物生成器用文本转语音技术把 EPUB、PDF、MarkdoAI 应用语音音频媒体生成本地部署上一篇如何快速配置GoCD与CloudSigma Object StorageS3兼容存储全链路集成终极指南下一篇不靠云 APIGenkit Ollama 如何用 5 条 Pokémon 记录跑通本地 RAG 全流程nomic-embed-text phi3.5创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考