Comments (9)
如果用户新定义了一个dataset
:
class my_dataset:
def __init__(self, weigts, my_input1, my_input2):
...
...
那么对于方案一来说, 用户只需要修改lazyconfig:
dataloader.train = LazyCall(build_image_train_loader)(
dataset=[
LazyCall(my_dataset)(
root="/DATA/disk1/ImageNet/extract/",
weights=...,
my_input1=...,
my_input2=...
),
],
batch_size=16,
)
或者通过import的方式, 直接继承过来修改:
...
from default_config import dataloader
...
dataloader.train.dataset=[
LazyCall(my_dataset)(
root="/DATA/disk1/ImageNet/extract/",
weights=...,
my_input1=...,
my_input2=...
),
]
而对于方案二来说 用户需要修改的地方则为:
- config文件, 把自己的
my_input1
和自己的my_input2
加到config文件里面去 - trainer:
class Trainer:
def build_train_dataloader(self, data_path, weights, my_input1, my_input2):
dataset = build_my_dataset(data_path, weights, my_input1, my_input2)
sampler = CyclicSampler(...)
return Dataloader(dataset, batch_sampler=sampler, collate_fn=dataset.collate_fn)
def build_train_valid_test_dataloader(self, data_path, weights, splits, my_input1, my_input2):
train_dataset, valid_dataset, test_dataset = build_train_valid_test_dataset(data_path, weights, my_input1, my_input2)
train_sampler = CyclicSampler(...)
valid_sampler = SingleRoundSampler(...)
test_sampler = SingleRoundSampler(...)
train_dataloader = Dataloader(train_dataset, batch_sampler=sampler, collate_fn=dataset.collate_fn)
valid_dataloader = Dataloader(valid_dataset, batch_sampler=sampler, collate_fn=dataset.collate_fn)
test_dataloader = Dataloader(test_dataset, batch_sampler=sampler, collate_fn=dataset.collate_fn)
return train_dataloader, valid_dataloader, test_dataloader
from libai.
build_train_dataset和build_train_valid_test_dataset使用cfg进行传参,和方案一应该是一样的。只不过是把方案一里创建sampler和dataloader的步骤放到了trainer下面。
from libai.
我不理解为什么要把 sampler 写死,为啥只能有这两种 sampler,难道我不能按类别做重采样吗?把 collate fn 和 dataset 绑定也挺奇怪的,从来没有见过这种方式。
你把 build_train_dataset 和 build_train_valid_test_dataset 都用 cfg 传参,别人想在外部直接使用这个函数就变得根本不可能。
而且你只定义了 build_train_dataloader 和 build_train_valid_test_dataloader,只有 test_loader 的代码在哪里?
from libai.
- 我确实忽略了可能存在其他sampler的情形,但不一定只有lazycall才能做到这一点,我不相信lazycall出来前,所有的框架是sampler写死了,这个需求可以提出来,想办法解决,可以加一个参数,表明是否按类别重采样。
- collate_fn和dataset绑定,没见过这种方式,说明见的少,这里就有:https://github.com/pytorch/fairseq/blob/main/fairseq/data/language_pair_dataset.py#L344
- 别人想在外部使用build_train_dataset、build_train_valid_test_dataset变得不可能,我们能做的就是让这个用法简单,他们可以仿写即可,做自己的框架,为什么要关系别人外部使用的是否方便,而且,现在那种方法就算方便了吗?
- 只有 test_loader 的代码在哪里?我就举了几个例子,省略了一点,build_test_dataloader当然也按照那样写了。
- 我觉得核心问题在于,你们过分依赖lazycall,我查了很多资料,虽然很好,只有少数几个库使用,说明大部分用户不熟悉这个机制。fair团队是很厉害,普通的开发者是没有资格质疑他们做出来的成熟的东西。但其他的团队也不是吃干饭的,注册机制的应用范围很广,这个就值得怀疑了吗?再者,oneflow做的事情就是怀疑google、fair团队的事,所以不要盲目崇拜他们。而现在这种写法,只支持lazycall,之前写的注册机制相关的代码,相当于白写了。
from libai.
一个东西,在没有好的解决方案出来之前,大家通过比较麻烦的方式去解决了,现在有了更好的解决方案,为什么我们还要继续沿用麻烦的解决方案去搞。
你说话自相矛盾,你一会儿说我们不关心外面的人是否使用方便,一会儿又说我们要用注册机制因为用户不熟悉 lazycall,你到底想表达什么意思?我完全不知道你在说什么。
from libai.
一个东西做出来是给外面的用户用的,你给我说”为什么要关心别人外部使用是否方便“,我觉得你的**出了问题。
from libai.
这里其实也有自相矛盾的地方:
- 没见过这种方式, 并不是说这个东西没有市场, 而是说明你见得少, 所以我们可以这么做.
collate_fn和dataset绑定,没见过这种方式,说明见的少,这里就有
- 这里又说, 只有少数几个库再用, 说明大部分用户不熟悉这个机制.
只有少数几个库使用,说明大部分用户不熟悉这个机制
这个逻辑是怎么做到,
collate_fn和dataset绑定少量存在, 就是你见识不够
,
lazycall只有几个库再用, 又说明大部分用户不熟悉这个机制.
lazycall
应该是市场上最先进的config配置系统方式了, 我们没有以前别的库的历史包袱, 需要不停的兼容以前的版本, 导致又要支持注册, 又要支持lazycall, 甚至于有时候还要支持最原始的args.parser.
而且上来先直接写一版简洁干净并且可运行的代码, 我不觉得有什么不对.
from libai.
我觉得你有一个核心矛盾点在于,你说我们盲目崇拜fair团队,说我们使用LazyCall有问题,那你认为还有什么其他更好的解决方案吗,让你给你又没有给出来,你既然认为我们不能用别人团队设计的比较优秀的机制,那你倒是给出来一个更好的解决方案啊,那如果你没有办法给出来更好的解决方案,还是认为用yacs,argparse更好的的话,那是不是我也可以认为你在盲目崇拜别的团队,你这里是不是有些自相矛盾的点在里面
能用LazyCall轻松几十行代码解决的问题,你需要用注册修改好几个文件,到时候加一堆莫名其名的参数,让外部用户增加这种完全完全没必要的学习成本,人家还需要理解你每个参数的意思。有必要吗,用户只需要自己关心每个独立的组件就行了,这才是用户最简单易懂的修改方式
from libai.
还有一个点在于,不是我们过分依赖于LazyCall,是LazyCall帮忙我们解决了一大堆不必要的依赖,简化了一大堆不必要的设计,这个点我希望你仔细思考一下
from libai.
Related Issues (20)
- 多机训练报错 HOT 13
- 多机训练失败后,非master node的进程没有完全kill掉 HOT 3
- 关于benchmark实验结果的疑问 HOT 2
- [Bug]libai test error:File exists: './data_test/bert_data' HOT 3
- 微信群满了 HOT 3
- CI test 失效
- 纯tensor并行训练,4卡和8卡使用的集合通信算子不同 HOT 2
- TypeError: __init__() got an unexpected keyword argument 'flags' HOT 5
- GLM libai推理报错 HOT 2
- MT5和T5的区别 HOT 4
- [多机多卡][MT5]failed to connect to all addresses HOT 1
- GPT2预训练,libai的throughput和以前的数据不匹配 HOT 1
- 测试并行框架,张量并行结果与官网所给数据不一致
- GLM 10B CN推理加速耗时 HOT 1
- 运行教程的bash tools/train.sh tools/train_net.py configs/vit_imagenet.py 8 命令报错
- Project下的MAE多卡训练报错
- 运行GLM示例报错 module 'oneflow._C' has no attribute 'fused_multi_head_attention_inference_v2' HOT 1
- 建议requirements 中涉及requests指定一下具体版本
- 单机多卡跑gpt2_pretrain.py遇到如下问题
- LLaMA-7B SFT died with <Signals.SIGABRT: 6>
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from libai.