认识
2025年02月09日
一、认识
在 TFJS
中,一个完整的模型通常包含:
-
model.json
: 模型结构、权重路径等元数据(数据流图和权重清单文件) -
group1-shard\*of\*
: 二进制权重文件的集合
模型分片(Model Sharding
) 是将 model.json
中的 group1-shard1.bin
二进制权重文件分为多个小片,利用浏览器的并发请求能力,更快的加载模型, 这种方式减少单个文件的大小,提高并行加载能力和缓存效率。我们可以基于 tensorflowjs_converter
对模型中的 group1-shardXofY.bin
进行分片,并且可以通过 --weight_shard_size_bytes
分片大小。为什么要进行模型分片 Model Sharding
?: 1. 提高加载速度, 多个小文件可以利用浏览器的并发请求能力并行下载,比一个大文件下载更快; 2. 减少浏览器限制, 部分浏览器对大文件的下载、缓存或解析 有限制; 3. HTTP/2
多路复用支持并行请求多个小文件; 4. Service Worker
缓存策略更友好; 5. 降低内存占用, 部分设备一次性加载大模型会内存溢出,分片可减少一次性加载的内存消耗。
二、准备
1. 下载 tensorflow/tensorflow
镜像
docker pull --platform tensorflow/tensorflow:2.10.0
2. 运行 tensorflow/tensorflow
容器
docker run -it --rm tensorflow/tensorflow:2.10.0 bash
3. 安装 tensorflow==2.0.0 tensorflowjs
pip install tensorflow==2.0.0 tensorflowjs
4. 将本地模型发送到 Docker
容器
docker cp /path/to/my_model.h5 <container_id>:/tmp/layers_model/model.json
三、分片
将 tfjs_layers_model
格式的 model.json
中的 group1-shard1of1.bin
文件分片,每片最大为 200 KB
tensorflowjs_converter --input_format=tfjs_layers_model --output_format=tfjs_layers_model --weight_shard_size_bytes=200000 /tmp/layers_model/model.json /tmp/layers_model/shared_model