diff --git a/docs/mindformers/docs/source_zh_cn/feature/tokenizer.md b/docs/mindformers/docs/source_zh_cn/feature/tokenizer.md new file mode 100644 index 0000000000000000000000000000000000000000..2ca3d772740d1097e4b500de6fc8e8417c2b9716 --- /dev/null +++ b/docs/mindformers/docs/source_zh_cn/feature/tokenizer.md @@ -0,0 +1,220 @@ +# Hugging Face Tokenizer迁移以及使用指导文档 + +当前直接复用`Hugging Face`的`Tokenizer`模型范围是使用新接口搭建的新模型,之前老接口搭建的模型依旧使用原有的`Tokenizer`。此外,`Hugging Face`的`Tokenizer`具体可以分为两大类:一种是`transformers`的内置`Tokenizer`,以`Qwen2_Tokenizer`为例;一种是继承`transformers`的`Tokenizer`的基类实现的外挂`Tokenizer`,并没有合入`transformers`,只是在`Hugging Face`的仓库上或者本地存在`Tokenizer`的Python文件,以`ChatGLM4Tokenizer`为例。 + +## 内置Tokenizer + +下面所有流程均以`Qwen2_Tokenizer`的使用为例。 + +### 推理流程 + +#### run_mindformer.py + +1. 修改yaml配置 + +```yaml +# Determine whether uses HF tokenizer +use_legacy: False + +model: + # dir path where store model_config(config.json, generation_config.json) and tokenizer(tokenizer_config.json, tokeinzier.json, vocab.json, merges.txt) + pretrained_model_dir: "path/to/qwen2_dir" +``` +> 除了上述修改之外,processor部分的tokenizer的配置可以全部删除。 + +2. 拉起任务 + +以`Qwen2-7b`的单卡推理为例,启动命令如下: + +```shell +python run_mindformer.py \ +--config research/qwen2/qwen2_7b/predict_qwen2_7b_instruct.yaml \ +--load_checkpoint /path/to/model_dir \ +--run_mode predict \ +--auto_trans_ckpt False \ +--predict_data 帮助我制定一份去上海的旅游攻略 +``` + +#### 自定义脚本 + +推理的自定义脚本一般调用`generate`接口实现,脚本中`tokenizer`实例化参考如下: + +```python +from transformers import AutoTokenizer + +tokenizer = AutoTokenizer.from_pretrained(pretrained_model_name_or_dir="path/to/pretrained_model_dir", + trust_remote_code=False) +``` + +参数说明: + +- pretrained_model_name_or_dir:`HuggingFace`下载的`tokenizer`相关的文件存储的文件夹路径 +- trust_remote_code:是否支持远程加载,默认值:`False`。 + +### 训练流程 + +#### 在线数据集加载 + +1. 修改yaml配置中`train_dataset`部分中和tokenizer相关的部分 + +```yaml +# Determine whether uses HF tokenizer +use_legacy: False + +train_dataset: &train_dataset + data_loader: + type: CommonDataLoader + handler: + - type: AlpacaInsturctDataHandler + tokenizer: + # dir path where store tokenizer(tokenizer_config.json, tokeinzier.json, vocab.json, merges.txt) + pretrained_model_dir: "path/to/qwen2_dir" + padding_side: "right" + trust_remote_code: False +``` + +参数说明: + +- pretrained_model_dir:`HuggingFace`下载的`tokenizer`相关的文件存储的文件夹路径。 +- padding_side: 指定`tokenizer`的padding的位置,训练时需要设置:`"right"`。 +- trust_remote_code:是否支持远程加载,默认值:`False`。 + +2. 拉起任务 + +```shell +bash scripts/msrun_launcher.sh "run_mindformer.py \ +--config research/qwen2/qwen2_7b/finetune_qwen2_7b.yaml \ +--run_mode finetune \ +--load_checkpoint /path/to/model_dir \ +--auto_trans_ckpt True" +``` + +#### 离线数据集预处理 + +将离线数据集预处理的脚本中`tokenizer`实例化的代码替换成以下代码即可: + +```python +from transformers import AutoTokenizer + +tokenizer = AutoTokenizer.from_pretrained(pretrained_model_name_or_dir="path/to/pretrained_model_dir", + trust_remote_code=False) +tokenizer.padding_side = "right" +``` + +参数说明: + +- pretrained_model_name_or_dir:`HuggingFace`下载的`tokenizer`相关的文件存储的文件夹路径。 +- trust_remote_code:是否支持远程加载,默认值:`False`。 + +## 外挂Tokenizer + +下面所有流程均以`ChatGLM4Tokenizer`的使用为例。 + +### 推理流程 + +#### run_mindformer.py + +1. 修改yaml配置 + +```yaml +# Determine whether uses HF tokenizer +use_legacy: False + +model: + # dir path where store model_config(config.json, generation_config.json) and tokenizer(tokenizer_config.json, tokeinzier.model, tokenization_chatglm.py) + pretrained_model_dir: "path/to/glm4_dir" +``` +> 除了上述修改之外,processor部分的tokenizer的配置可以全部删除。此外,`glm4_dir`还需要包括`tokenization_chatglm.py`。 + +2. 拉起任务 + +以`Qwen2-7b`的单卡推理为例,启动命令如下: + +```shell +python run_mindformer.py \ +--config research/qwen2/qwen2_7b/predict_qwen2_7b_instruct.yaml \ +--load_checkpoint /path/to/model_dir \ +--run_mode predict \ +--auto_trans_ckpt False \ +--predict_data 帮助我制定一份去上海的旅游攻略 \ +--trust_remote_code True +``` + +参数说明: + +- trust_remote_code:是否支持远程加载,一般类似glm4这种情况需要配置成`True`,默认值:`False`。 + +#### 自定义脚本 + +推理的自定义脚本一般调用`generate`接口实现,脚本中`tokenizer`实例化参考如下: + +```python +from transformers import AutoTokenizer + +tokenizer = AutoTokenizer.from_pretrained(pretrained_model_name_or_dir="path/to/pretrained_model_dir", + trust_remote_code=True) +``` +参数说明: + +- pretrained_model_name_or_dir:`HuggingFace`下载的`tokenizer`相关的文件存储的文件夹路径 +- trust_remote_code:是否支持远程加载,一般类似glm4这种情况需要配置成`True`,默认值:`False`。 + +### 训练流程 + +#### 在线数据集加载 + +1. 修改yaml配置中`train_dataset`部分中和tokenizer相关的部分 + +```yaml +# Determine whether uses HF tokenizer +use_legacy: False + +train_dataset: &train_dataset + data_loader: + type: CommonDataLoader + handler: + - type: AlpacaInsturctDataHandler + tokenizer: + # dir path where store tokenizer(tokenizer_config.json, tokeinzier.json, vocab.json, merges.txt) + pretrained_model_dir: "path/to/qwen2_dir" + padding_side: "right" + trust_remote_code: True +``` + +参数说明: + +- pretrained_model_dir:`HuggingFace`下载的`tokenizer`相关的文件存储的文件夹路径。 +- padding_side: 指定`tokenizer`的padding的位置,训练时需要设置:`"right"`。 +- trust_remote_code:是否支持远程加载,默认值:`False`。 + +2. 拉起任务 + +```shell +bash scripts/msrun_launcher.sh "run_mindformer.py \ +--config research/qwen2/qwen2_7b/finetune_qwen2_7b.yaml \ +--run_mode finetune \ +--load_checkpoint /path/to/model_dir \ +--auto_trans_ckpt True \ +--trust_remote_code True" +``` + +参数说明: + +- trust_remote_code:是否支持远程加载,一般类似glm4这种情况需要配置成`True`,默认值:`False`。 + +#### 离线数据集预处理 + +将离线数据集预处理的脚本中`tokenizer`实例化的代码替换成以下代码即可: + +```python +from transformers import AutoTokenizer + +tokenizer = AutoTokenizer.from_pretrained(pretrained_model_name_or_dir="path/to/pretrained_model_dir", + trust_remote_code=True) +tokenizer.padding_side = "right" +``` + +参数说明: + +- pretrained_model_name_or_dir:`HuggingFace`下载的`tokenizer`相关的文件存储的文件夹路径 +- trust_remote_code:是否支持远程加载,一般类似glm4这种情况需要配置成`True`,默认值:`False`。 \ No newline at end of file