libai icon indicating copy to clipboard operation
libai copied to clipboard

LiBai(李白): A Toolbox for Large-Scale Distributed Parallel Training

Results 97 libai issues
Sort by recently updated
recently updated
newest added

配置系统主要是为模型结构的定义和训练超参提供配置参数,好的配置系统可以让模型的定义以及训练流程更清晰,也可以让用户一眼能够了解到不同模型配置差异以及训练差异在哪里,而且还可以让模型的复现变得更加容易。 一个好的配置系统我认为有下面4个特点: - 生成的配置文件可以序列化和反序列化,这样的好处有两个:1. 用户可以通过 diff config 轻松获得两次训练的配置差异;2. 直接 load config 便能复现别人的结果,能够节省大量沟通的时间成本; - 配置系统层次清晰,比如模型结构相关的参数、网络训练的超参以及数据读取的参数能够清晰的分开; - 参数在配置之后是可修改的,因为有的时候需要根据数据集的 size 再动态设置训练的 iters 等,这就需要用户定义好配置之后,参数可以再次被修改,但是需要有一定的保护机制; - 用户可以灵活增加配置参数而不需要侵入式修改 libai 的内部代码,希望用户可以将 libai 作为一个 lib 进行使用,而不是 clone 之后在上面修改;...

## LiBai config 设计文档 [详情](https://github.com/Oneflow-Inc/libai/issues/12) trainer 设计文档 [详情](https://github.com/Oneflow-Inc/libai/issues/14) lr scheduler 设计文档 [详情](https://github.com/Oneflow-Inc/libai/issues/32) dataloader 设计文档 [详情](https://github.com/Oneflow-Inc/libai/issues/3) ## Megatron https://github.com/NVIDIA/Megatron-LM megatron 的整体结构如下 ```shell megatron data (和数据处理相关的代码) bert_dataset.py (bert 数据读取代码) gpt_dataset.py (gpt 数据读取代码)...

调研了一下detectron2, mmdet, ColossalAI, paddledetection ### paddledetection paddledetection则是直接定义了一个object, 比较冗长, 主要有trainer.train()函数去协调各个模块, 整体下来感官和ColoraIAI的并没有本质区别 如果要加新功能, 则在这个object里面进行改动, 改动会对旧版本造成较大的影响 [trainer.py](https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.3/ppdet/engine/trainer.py) ### detectron2 && mmdet 这两者的设计思路其实差不多, 先定义一个HookBase ```python class HookBase: def before_train(self): """ Called before the first...

这个pr要做的: - [x] 支持MT5转onnx的脚本, (目前需要在分支https://github.com/Oneflow-Inc/oneflow_convert/tree/fix_t5_export_onnx_bug下进行) - [x] 支持MT5 onnx 推理的脚本. 直接运行`python libai/onnx_export/onnx_inference/t5_onnx_infer.py`即可, 但是由于onnx的输入和输出都是numpy, 所以目前generate的功能没办法从libai中迁移过来, 目前只能以`model.py`中的的model.forward()的输入转换成numpy的格式进行推理

这个pr增加了`model.from_pretrained()`功能: ``` from libai.models import BertModel bert = BertModel.from_pretrained("/home/xiezipeng/libai/data_test/bert_utils_data") # or bert = BertModel.from_pretrained("/home/xiezipeng/libai/data_test/bert_utils_data", hidden_dropout_prob=0, attention_probs_dropout_prob=0,) ```

使用oneflow.async.thread将write_metrics放置在临时线程里,这样能加速eager的性能。加速效果大概是 | 测试模型 | 计算设备 | 单卡batch_size | 分布式情况 | oneflow性能 | pytorch性能 | | ---------- | -------- | -------------- | ---------- | --------------- | -------------- | | bert-large |...

rwkv 代码修正版: 跑loss对齐时的需要手动修改的代码: - 注释`libai/engine/default.py `的 729~730行: ```python # Global scheduler cfg # cfg.train.scheduler.warmup_iter = cfg.train.warmup_iter # cfg.train.scheduler.max_iter = cfg.train.train_iter ``` - 把`libai/data/build.py `下所有的 shuffle改为false, 并注释掉所有的`persistent_workers=True if num_workers > 0...