使用 HuggingFace transformers 进行模型分片存储
在HuggingFace transformers 的模型库中常常会见到这种pytorch_model.bin.index.json
参数名 与 模型bin文件的映射表,在如今的大模型中更为常见。本文主要介绍如何利用HuggingFace transformers进模型保存分片。
pytorch_model.bin.index.json
1 | { |
权重结构:
1 | saved_pt |
在HuggingFace transformers 的模型库中常常会见到这种pytorch_model.bin.index.json
参数名 与 模型bin文件的映射表,在如今的大模型中更为常见。本文主要介绍如何利用HuggingFace transformers进模型保存分片。
pytorch_model.bin.index.json
1 | { |
权重结构:
1 | saved_pt |
正则表达式,真的是一段时间不用就会忘记,于是就简单记录一下日常用到的一些正则表达式的例子,以便日后复盘。
这在序列标注任务中 常常会用到
text:[以后][在全国范围][普遍][推广]
code:
1 | import re |
out:
1 | ['以后', '在全国范围', '普遍', '推广'] |
Note: 建议使用regex 替换 re
1 | import regex as re |
在TensorFlow2.x中,通过下面代码,显示当前学习率。
1 | optimizer._decayed_lr(tf.float32).numpy() |
以下代码展示了在TensorFlow2.x中,如何实时打印当前学习率。
这里以bert使用的adamw为例,模型构建部分省略。
tf.where(condition, x=None, y=None, name=None)
如果x,y均为空,则返回满足条件的索引indices
1 | a = tf.Variable([[1,2,3,4],[3,4,2,1]]) |
out:
1 | <tf.Tensor: shape=(2, 2), dtype=int64, numpy= |
如果x,y均不为空,则 满足条件位置的值为x相应位置的值,其余为y相应位置的值。(非常实用)
1 | a = tf.Variable([[1,2,3,4],[3,4,2,1]]) |
out:
1 | <tf.Tensor: shape=(2, 4), dtype=int32, numpy= |
模型训练完后,往往需要将模型应用到生产环境中。最常见的就是通过TensorFlow Serving来将模型部署到服务器端,以便客户端进行访问。
简单的记录下,如何怎么结合CheckpointManager和Callback ,实现按一定周期保存最近N个模型。
1 | N = 5 |
keras自动炼丹器
占坑 待更新
https://keras-team.github.io/keras-tuner/
https://github.com/keras-team/keras-tuner
https://blog.tensorflow.org/2020/01/hyperparameter-tuning-with-keras-tuner.html?linkId=81371017
TFRecord是一种高效的数据存储格式,尤其是在处理大数据集时,我们无法对数据进行一次读取,这时我们就可以将文件存储为TFRecord,然后再进行读取。这样可以可以提高数据移动、读取、处理等速度。
在对小数据集进行读取时,可以直接使用tf.data
API来进行处理。
在TFRecord中是将每个样本example 以字典的方式进行存储。
主要的数据类型如下:
tf.train.Feature(int64_list = tf.train.Int64List(value=输入))
tf.train.Feature(float_list = tf.train.FloatList(value=输入))
tf.train.Feature(bytes_list=tf.train.BytesList(value=输入))
这里我们举一个NLP中常见例子。
sentence
,每个句子有128个token_id
。label
。token weight (mask)
Embedding
后的 句子matrix
,tensor
(两者是同一个东西,只是为了后面介绍两种不同的存储方式。)那么我们怎样将这些转换为TFRecord
呢?