Visitar URL original
学习代码的时候写了一个教程,希望可以帮到其他同学 · Issue #73 · jingyaogong/minimind · GitHub
Skip to content

学习代码的时候写了一个教程,希望可以帮到其他同学 #73

Open

Description

@pengqianhan

本教程参考官方 readme 和 不是Issue,一点个人训练minimind的记录 #26

由于本人手头只有一台Macbook (M1 Pro),因此这个项目只是用来debug和学习代码,完全没有训练出一个可用的模型。在大佬的代码基础上减少了epoch,同时在一个epoch内只用很少的数据进行训练,代码可正常运行从而可以学习代码运行的逻辑。以下是我学习代码的流程:

  1. train tokenizer

    • 下载 | 【tokenizer训练集】 | HuggingFace / 百度网盘 文件为 tokenizer_train.jsonl
    • 博客或视频讲解
    • 运行 train_tokenizer.py, 运行结束后,在’model/minimind_tokenizer/‘下得到merges.txt,tokenizer_config.json,tokenizer.json,vocab.json 四个文件
  2. data_process.py 处理数据,为pretrain 数据集做准备

    • 下载 | 【Pretrain数据】 | Seq-Monkey官方 / 百度网盘 / HuggingFace | 此处是从hugging face下载 mobvoi_seq_monkey_general_open_corpus.jsonl 文件,大小为 14.5GB,解压后为33.39GB
    • 运行 data_process.py ,处理mobvoi_seq_monkey_general_open_corpus.jsonl,
      • if process_type == 1:在dataset目录下生成了pretrain_data.bin和clean_seq_monkey.bin两个文件
      • process_type == 2:
      • process_type == 3:
  3. 预训练model,1-pretrain.py

    • 使用 ./dataset/pretrain_data.bin 来预训练,直接运行1-pretrain.py即可,运行结束后在./out 目录下保存一个pretrain_512.pth 的模型文件
  4. 有监督微调(Supervised Fine-Tuning,SFT)3-full_sft.py

    • 读取 './dataset/sft_data_single.csv' 文件来进行 full sft 训练,运行3-full_sft.py即可,结束后在./out 目录下保存一个 full_sft_512.pth 的模型文件
    • 读取 './dataset/sft_data_multi.csv' 文件来进行 full sft 训练,运行3-full_sft.py即可,结束后在./out 目录下保存一个 full_sft_512.pth 的模型文件,也可以修改‘ckp = f'{args.save_dir}/full_sft_{lm_config.dim}{moe_path}.pth’这行中文件名称
  5. 现在可以运行2-eval.py 来进行评估

  6. LoRA SFT,4-lora_sft.py

  7. 5-dpo_train.py

    • 在hugging face 下载 dpo_dpo_zh_demo.json,然后放在'./dataset/dpo/'
    • 这部分代码还没跑通

Activity

  1. jingyaogong commented on Oct 26, 2024

    @jingyaogong
    Owner

    image

    很不错的记录,谢谢!

  2. clevertension commented on Dec 26, 2024

    @clevertension

    LoRA SFT, 这个怎么用前面自己训练好的模型,不要从hf上下载

  3. jingyaogong commented on Dec 26, 2024

    @jingyaogong
    Owner

    LoRA SFT, 这个怎么用前面自己训练好的模型,不要从hf上下载

    export_model 把你的模型导出成transformers格式,再按照from_pretrained加载它

  4. anonhl commented on Feb 1, 2025

    @anonhl

    谢谢你的教程!

  5. zer0yu commented on Feb 9, 2025

    @zer0yu

    所以有 checkpoint 了之后,如何跑通 5-dpo_train.py 呀? 求大佬补充细节 @jingyaogong

    不知道按照下面这种方式直接 patch init_model 函数可以吗?

    def init_model():
        lm_config = LMConfig()
        tokenizer = AutoTokenizer.from_pretrained('./model/minimind_tokenizer')
        model_from = 1  # 1从权重,2用transformers
    
        def count_parameters(model):
            return sum(p.numel() for p in model.parameters() if p.requires_grad)
    
        if model_from == 1:
            model = Transformer(lm_config)
            moe_path = '_moe' if lm_config.use_moe else ''
            ckp = f'./out/pretrain_{lm_config.dim}{moe_path}.pth'
            state_dict = torch.load(ckp, map_location=lambda storage, loc: storage.cuda(0))
            unwanted_prefix = '_orig_mod.'
            for k, v in list(state_dict.items()):
                if k.startswith(unwanted_prefix):
                    state_dict[k[len(unwanted_prefix):]] = state_dict.pop(k)
            model.load_state_dict(state_dict, strict=False)
        else:
            model = AutoModelForCausalLM.from_pretrained('./minimind-v1-small', trust_remote_code=True)
    
        Logger(f'LLM总参数量:{count_parameters(model) / 1e6:.3f} 百万')
        model = model.to('cuda:1')
    
  6. yeyeyehuimei commented on Jul 31, 2025

    @yeyeyehuimei

    dpo跑通了吗

  7. pengqianhan commented on Jul 31, 2025

    @pengqianhan
    Author

    我用最新的代码是跑通了的,我本地是3块3090,torchrun --nproc_per_node 3 train_dpo.py, 在最新的代码是可以正常运行的

  8. yeyeyehuimei commented on Aug 21, 2025

    @yeyeyehuimei

    我用最新的代码是跑通了的,我本地是3块3090,torchrun --nproc_per_node 3 train_dpo.py, 在最新的代码是可以正常运行的

    跑通之后测试的数据有问题吗大佬,我能跑通,但是用eval试的时候全是乱码

  9. yeyeyehuimei commented on Aug 21, 2025

    @yeyeyehuimei

    dpo_dpo_zh_demo.json 这个好像打不开,了能在分享下吗大佬

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions