safetensors格式的权重分两种:一种是hugginface下载的safetensors格式,一种是mindspore支持的转换的safetensors。 两种虽然都是safetensors格式,但权重名称格式不一样。
场景一:safetensors转换为ckpt权重
1. 从huggingface下载的完整分片safetensors转分布式ckpt、完整ckpt
转换流程如下:

step1: 转name: 把huggingface的权重名称转换成mindspore的名称
huggingface和MindSpore的命名规则不一致,因此需要转name,转name后的输出结果和方法"unified_safetensors"的输出结果格式是一样的
转name可参考代码: https://gitee.com/cooingA/mindspore/blob/convert_weight/convert_weight.py
输出:和unified_safetensors输出格式一样

step2:切分safetensors权重
通过"load_distributed_checkpoint"方法可以将完整分片的safetensors权重转换为:
1)完整ckpt 2)分布式ckpt 3)完整safetensors 4)分布式safetensors
备注:输入:格式safetensors 输出:2.4.0版本输出格式只能是safetensors,2.4.0之后可以是ckpt或safetensors,默认'safetensors'
样例:完整分片的safetensors转完整单个权重
输入:

输出完整权重截图:

step3:(2.4.0必须) safetensors转ckpt
使用方法
样例:
输入:

输出完整权重截图:

2. 分布式safetensors转分布式ckpt
接口safetensors_to_ckpt可以实现如下
- 分布式safetensors权重转到分布式的ckpt权重(源目录必须按rank存储)
- 完整的单个safetensors权重转换到完整的单个ckpt权重(源目录必须按rank存储)
- 完整分片的safetensors权重转换到多个ckpt权重(需要指定到单个safetensores文件,转换后需要合并ckpt然后进行切分)
使用方法
file_path:源权重,包含 safetensors 文件的目录路径或单个 safetensors 文件 (.safetensors) 的路径。备注:指定目录时必须按照rank存储
save_path:转换为ckpt文件的目录
processes_num:整数,可取8,16,32等,根据自己机器内存、cpu使用情况决定
样例:只使用了一个rank进行转换,源目录指定到了rank的上一层路径
输入:

输出:

场景二:ckpt转换为safetensors权重
1. 把分布式ckpt或者完整ckpt权重转换成分布式或完整的safetensors权重,都可以使用ckpt_to_safetensors进行转换
接口ckpt_to_safetensors可以实现如下功能:
- 分布式ckpt权重转到分布式safetensors的权重(源目录必须按rank存储)
- 完整的单个ckpt权重转换到完整的单个safetensors权重(源目录必须按rank存储)
- 完整分片的ckpt权重转换到多个safetensors权重(需要指定到单个ckpt文件,转换后需要合并safetensors然后进行切分)
使用方法:
file_path:原始权重。
分布式权重:每个rank下面一个ckpt,指定到rank的上一层路径。
完整权重:指定到权重文件。
save_path:转换为safetensors文件的目录
processes_num:整数,可取8,16,32等,根据自己机器内存、cpu使用情况决定
样例1:完整ckpt转完整safetensors,指定到文件
输入:

输出:

样例2:指定目录按照rank存储
输入:

输出:

2. ckpt转Huggingface的safetensors
重要: 除了使用ckpt_to_safetensors以外,还需要进行name反向替换(可参考前面的正向替换代码,进行反向替换)
safetensors格式的权重分两种:一种是hugginface下载的safetensors格式,一种是mindspore支持的转换的safetensors。 两种虽然都是safetensors格式,但权重名称格式不一样。
场景一:safetensors转换为ckpt权重
1. 从huggingface下载的完整分片safetensors转分布式ckpt、完整ckpt
转换流程如下:
step1: 转name: 把huggingface的权重名称转换成mindspore的名称
huggingface和MindSpore的命名规则不一致,因此需要转name,转name后的输出结果和方法"unified_safetensors"的输出结果格式是一样的
转name可参考代码: https://gitee.com/cooingA/mindspore/blob/convert_weight/convert_weight.py
输出:和unified_safetensors输出格式一样
step2:切分safetensors权重
通过"load_distributed_checkpoint"方法可以将完整分片的safetensors权重转换为:
1)完整ckpt 2)分布式ckpt 3)完整safetensors 4)分布式safetensors
备注:输入:格式safetensors 输出:2.4.0版本输出格式只能是safetensors,2.4.0之后可以是ckpt或safetensors,默认'safetensors'
样例:完整分片的safetensors转完整单个权重
输入:
输出完整权重截图:
step3:(2.4.0必须) safetensors转ckpt
使用方法
样例:
输入:
输出完整权重截图:
2. 分布式safetensors转分布式ckpt
接口safetensors_to_ckpt可以实现如下
使用方法
file_path:源权重,包含 safetensors 文件的目录路径或单个 safetensors 文件 (.safetensors) 的路径。备注:指定目录时必须按照rank存储
save_path:转换为ckpt文件的目录
processes_num:整数,可取8,16,32等,根据自己机器内存、cpu使用情况决定
样例:只使用了一个rank进行转换,源目录指定到了rank的上一层路径
输入:
输出:
场景二:ckpt转换为safetensors权重
1. 把分布式ckpt或者完整ckpt权重转换成分布式或完整的safetensors权重,都可以使用ckpt_to_safetensors进行转换
接口ckpt_to_safetensors可以实现如下功能:
使用方法:
file_path:原始权重。
分布式权重:每个rank下面一个ckpt,指定到rank的上一层路径。
完整权重:指定到权重文件。
save_path:转换为safetensors文件的目录
processes_num:整数,可取8,16,32等,根据自己机器内存、cpu使用情况决定
样例1:完整ckpt转完整safetensors,指定到文件
输入:
输出:
样例2:指定目录按照rank存储
输入:
输出:
2. ckpt转Huggingface的safetensors
重要: 除了使用ckpt_to_safetensors以外,还需要进行name反向替换(可参考前面的正向替换代码,进行反向替换)