最近在使用华为云的模型训练服务平台时,发现一个问题:当算法需要一个预训练模型的时候,怎么去上传呢?在平台上面只找到了一个数据集上传的接口,但这个接口最大上传容量时80M,而算法需要的预训练模型远远大于80M, 那该怎么办呢?既然没办法直接上传,只能考虑分块上传再合并,但是由于这个平台和本地操作还是有一些区别,对于不熟悉的平台的新手来说(比如我),中间可能需要踩很多次坑。为了避免下一次我使用的时时候踩很多坑,所以做个笔记简单记录一下模型上传的整个流程。下面以pytorch的预训练模型resnet50.pth.tar为例子,展示整个操作流程。
1. 本地切分模型
利用以下代码在本地将resnet50的模型以50MB为单位进行切分
def split(orgFile, chunkSize, saveDir):
'''
:param orgFile: 原模型存储的位置, 比如 ./checkpoint/resnet50.pth.tar
:param chunkSize: 文件切分字节数,比如以50M为单位切分原模型,chunkSize 1024*1024*50
:param saveDir: 切分后的文件储存路径, 比如 ./resnet50
:return:
'''
if not os.path.exists(orgFile):
print("Cannot find orgFile:{0}".format(orgFile))
return -1
if not os.path.exists(saveDir):
os.makedirs(saveDir)
partNum = 0
with open(orgFile, 'rb') as inputFile:
while True:
chunk = inputFile.read(chunkSize)
if not chunk:
break
partNum += 1
fileName = os.path.join(saveDir, 'part%04d' % partNum)
with open(fileName, 'wb') as f:
f.write(chunk)
return partNum
切分后的数据.png
2. 分批上传模型
如下图所示,分批上传分割后的模型,数据类别一定要选择其他。
模型上传.png
上传完毕之后,可以在数据集的目录下看到已经上传好的模型
模型上传成功.png
3. 合并模型
运行下面的代码进行合并
# -*- coding: utf-8 -*-
from __future__ import print_function # do not delete this line if you want to save your log file.
import softcomai as sai
import numpy
import os
import shutil
import torch
def joinFile():
# 获取各个文件的路径
filePaths = []
for i in range(1,5):
entityName = "resnet50_{0}".format(i)
data_reference = sai.data_reference.get_data_reference(dataset="Default", dataset_entity=entityName)
filePaths.append(data_reference.get_files_paths()) # 注意data_reference.get_files_paths()返回的是一个列表
# 获取平台的sdk返回模型保存路径
saveDir = sai.context.param(sai.context.MODEL_PATH)
fileName = 'resnet50.pth.tar'
savePath = os.path.join(saveDir, fileName)
outFile = open(savePath, 'wb')
# 合并文件
for filePath in filePaths:
inFile = open(filePath[0], 'rb')
data = inFile.read()
outFile.write(data)
inFile.close()
outFile.close()
return savePath
if __name__ == "__main__":
savePath = joinFile()
# 测试合并后的文件是否可用
checkpoint = torch.load(savePath,map_location='cpu')
print(checkpoint.keys())
运行完后,可以在任务目录下找到已经保存好的预训练模型
文件合并成功.png
网友评论