(Translated by https://www.hiragana.jp/)
GitHub - cstsunfu/dlk: A PyTorch Based Deep Learning Quick Develop Framework. One-Stop for train/predict/server/demo
Skip to content
/ dlk Public

A PyTorch Based Deep Learning Quick Develop Framework. One-Stop for train/predict/server/demo

License

Notifications You must be signed in to change notification settings

cstsunfu/dlk

Repository files navigation

Deep Learning toolKit (dlk)

Don't Repeat Yourself

Arch

简体ちゅうぶん | English

dlk                                  --
├── adv_method                       -- adversarial training method like free_lb, fgm, etc.
├── callback                         -- callbacks, like checkpoint, early_stop, etc.
├── data                             -- data processor part
│   ├── data_collate                 -- data collate for collate a batch of data from dataset to dataloader
│   ├── datamodule                   -- the datamodule a.k.a lightning.LightningDataModule
│   ├── dataset                      -- the dataset inherit the torch.Dataset
│   ├── postprocessor                -- the tasks postprocessor
│   ├── processor                    -- the default processor, which scheduler the subprocessors
│   └── subprocessor                 -- the subprocessors like tokenizer, token2id, etc.
├── display                          -- the tasks display setting
├── imodel                           -- the integrated model, which a.k.a the lightning.LightningModule
├── initmethod                       -- the initmethod, some classic parameter init methods
├── nn                               -- builtin nn modules
│   ├── base_module.py               --
│   ├── layer                        --
│   │   ├── decoder                  --
│   │   ├── embedding                --
│   │   ├── encoder                  --
│   │   └── token_gen_decoder        --
│   ├── loss                         --
│   ├── model                        --
│   ├── module                       --
│   └── utils                        --
├── token_sample                     -- for text generate, different sample strategies
├── optimizer                        -- optimizers
├── scheduler                        -- learning rate schedulers
├── trainer                          -- the trainer, a.k.a lightning.Trainer
├── utils                            --
├── preprocess.py                    -- preprocess datas for train|predict|demo|etc.
├── train.py                         -- train entry
├── online.py                        --
├── predict.py                       -- just predict a bunch of data using the pretrained model
├── server.py                        -- deploy this to server your pretrained model
├── demo.py                          -- demo main
└── version.txt                      --

虽然最近さいきんてき一年多通用大模型吸引了大部分人的注意力,ただししょうしん很多じんやめ经意识到にん务导むこうてき模型もけいざい现阶だん仍有其不可ふかがえだいてきいちめん,而且这些模型もけいざい处理ぼう特定とくていにん务时具有ぐゆうさらこのみてきもたれせいさらだかてき效率こうりつとく别是这些模型もけい以实现一些AgentらいあずかLLM进行配合はいごう

にん务导むこうてき模型もけい开发实际じょうぞうLLMいち样可以“一招鲜吃遍天”,而是ごと个任务的模型もけい需要じゅよう针对せいてき开发,而在工作こうさくちゅうわが们经つね需要じゅよう深度しんどしん经网络模がた进行快速かいそく实验,搜索そうさくさい优结构和さんすう,并将さい优模がた进行部署ぶしょゆう时还需要じゅよう做出demo进行验证.

くびさき不同ふどうにん务的开发实际じょうゆう很大いち部分ぶぶん是重これしげ复的,而同一个任务的训练、预测、部署ぶしょdemo这几个步骤的核心かくしんだい码也一致いっちてきただしざい实现うえ需要じゅよう一定いっていてきてきあらため动,如果ごと个步骤都独立どくりつ开发てき话,かい使とくせい个过ほど非常ひじょうわりきれ,而这造成ぞうせいてきだい码冗あまり对于长期てきだい码维护是灾难せいてき

DLKいち使用しようlightningてきTrainerintcconfig管理かんりけい统的しゅう模型もけい训练、さんすう构)搜索そうさく模型もけい预测、模型もけい部署ぶしょdemo一身いっしん,对于どう一个模型实现这些功能只需要依赖一份代码,だいだいくだてい开发维护成本なりもと.

どうDLKさく为一个通用的训练框架,わが们的かく种训练技巧ぎこう增强ぞうきょう方法ほうほう也可以非常ひじょう方便ほうべんてきよう不同ふどうてき模型もけい, 为此DLKうちおけりょう很多有用ゆうようてき组件。

じょりょうもと础组けんそとDLK还为主要しゅようてきにん提供ていきょうりょう丰富てきしめせれいさらてきしめせ例会れいかい慢慢添加てんか进来

You Can Edit Your DLK Config Like Python Code

もとintc ところ提供ていきょうてき强大きょうだいてきConfig管理かんり能力のうりょく, 你可以像编写pythonだい码一样编写你的configぶんけん

vscode nvim

Install

pip install dlk == 0.1.0

# or clone this repo and cd to the project root dir
pip install .

Demo

下面かめんいち些基于dlk开发てきしめせれい:

NOTE: よし于我目前もくぜんただゆういちだい拥有いちAMD Radeon VII 16GてきGPU32Gうちそんてき个人PC,さんりょくじゅう分有ぶんゆうげんいん此这さとしめせれいてきまいりすう很多还没ゆう优化いたりSOTA

Grid Search

dlkもとintc进行开发,いん此同样提供ていきょうりょうさんすう搜索そうさくてき能力のうりょく,而intcてき_search并不仅限于数值类がたてきまいりすう搜索そうさく,也可以对せい个模块进ぎょう搜索そうさくいんdlk实际じょう具有ぐゆう块级てき搜索そうさく能力のうりょく

./examples/grid_search_expさとめん提供ていきょうりょう一个对超参数进行搜索的示例

训练かん模型もけいきさき执行:

tensorboard --logdir ./logs
grid search hyperparameters grid search scalar

Task Demo

Demo ひとしexamples录下,训练かん模型もけいきさき执行:

streamlit run ./demo.py
span_rel seq_lab
img_cls image caption
summary text match
txt_reg text classification

Usage and Feature

使用しよう方法ほうほう

一般来说一个常见的dlk开发にん包含ほうがん两个pipeline,そくすうすえ预处pipeline模型もけい推理すいりpipeline. 实际じょう这两个步骤是以放いたどういち个pipelineちゅうてき, とうまえしめせれいちゅうてきだい多数たすうにん务都需要じゅよう对预处理すうすえてき复用,いん使用しよう两个pipeline

かずすえ预处pipeline对应てきないおけ入口いりくちdlk.preprocess.Processわが们需よう编写process.jsonc configぶんけんらい对预处理过程(训练、推理すいり、deploy过程ぜん复用同一どういつ个文けんいん配置はいちぶんけん中有ちゅうう针对不同ふどうstageてき不同ふどう设置)进行配置はいち并初はじめProcess, しょうすうすえ传入并执ぎょうrunそく要求ようきゅう输出预处このみてきすうすえ

模型もけい训练pipeline对应てきないおけ入口いりくちdlk.train.Train, わが们需よう编写fit.jsonc configぶんけんらい对模がた训练(推理すいりdeploy过程也同样复よう这个ぶんけん),使用しよう配置はいちぶんけんはつはじめTrainこれきさき执行runそく获得训练このみてき模型もけい

demo则只需要じゅよう导入训练过程ちゅうしょうどうてきprocess.jsoncfit.jsonc以及训练このみてき模型もけいゆかりcheckpoint callback组件保存ほぞんそく

模型もけい部署ぶしょただ需将dlk.server.Server实例ふん发到对应てきふく务器,つうServer.fit接受せつじゅ单条あるいち个batchてきすうすえそく(TODO: しめせれい

かたぎ块注さつ

DLK赖两个注さつけい统,いち套是intcてきconfigちゅうさつcregisterいち套是dlk自己じこてき块注さつちゅうさつげん则是一致いっちてきみやこただししょういち个模块以module_typemodule_namekeyちゅうさついたちゅうさつちゅうこれ所以ゆえん选择两层てき命名めいめいさくkeyいん为这样更方便ほうべん区分くぶん不同ふどうてき块类がた

dlk.nn.layer.embedding.static 为例,わが们将StaticEmbeddingConfig さくStaticEmbeddingてきconfig("embedding", "static")为keyちゅうさついたintcてきcregisterなか,以同样的keyはたStaticEmbeddingちゅうさついたdlkてき块注さつregisterなか

使用しようちゅうさつてきこう处是,わが们可以不必关ちゅう具体ぐたい类在哪里实现,ただよう知道ともみちちゅうさつてき名称めいしょう就可以直接ちょくせつ获取这个类,这使わが们可以非常ひじょう方便ほうべんてきざい任意にんい位置いち扩展embeddingてき类型,对于わが们在自己じこてき项目さとめん扩展dlk非常ひじょう重要じゅうようちゅうさつ块对于intc也同样重要じゅうようざいわが们已StaticEmbeddingてきちゅうさつめいてきじょう况下,获取这个块的方法ほうほう非常ひじょう简单,直接ちょくせつregister.get("embedding", "static")そく,而不必关ちゅうてき实际そん位置いち(cregister也有やゆうどう样的こうのう)

部分ぶぶんないおけ块介绍

callback

dlkてきTrainerもとlightning.Trainer实现てきいんdlkどう样可以使用しようlightning提供ていきょうてきcallback, dlk.callbackちゅう包含ほうがんいち常用じょうようてきcallback

きょ拟对こう训练

Adversarial Training一种常见的提升模型效果的技巧,dlkうちおけりょう一些常用的针对embeddingてきadv方法ほうほう(dlk.adv_method),./examples/adv_exp一个使用示例

复杂训练ひかえせい

dlkてきdlk.schedulerかたぎ提供ていきょうりょう种的训练schedulerdlk.nn.lossかたぎ块中てきmulti_lossどう样针对多个loss提供ていきょうりょう自由じゆうひかえせいかくlossてき能力のうりょく

ぶんほん生成せいせい

dlk参考さんこうfairseqてき实现,实现りょう种的token_sample方法ほうほう,为文ほん生成せいせい提供ていきょう非常ひじょう强大きょうだいてきひかえせい能力のうりょく

实现你自己じこてき模型もけい

参考さんこう./examples/001_first_example 实现你自己じこてき模型もけい

かんれいきさきただし你可能会のうかいゆううたぐ问,这似乎并わが直接ちょくせつ实现いち个模がた简单,甚至ゆう很多概念がいねん让我觉得这看おこりらいさら复杂。 てき,如果你只そう训练一个简单的模型,需要じゅようこう虑预测、えんじしめせとうぼつ错,ただしこれdlk提供ていきょうりょう一个非常统一的框架,让你ただ需按あきら骤来实现しょう应的组件,就可以获とくいち个可ようてき模型もけい。并且所有しょゆうてき工作こうさく重用じゅうようてき包括ほうかつ你刚刚实现的组件。

而且dlk提供ていきょうりょう很多优化方面ほうめんてき工具こうぐ,让你とめ于简单模がた

记住这个つつみてきげん则是Donot Repeat Yourself

More Document

TODO