Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 直接从S3读取预训练的huggingface变压器_Amazon S3_Huggingface Transformers - Fatal编程技术网

Amazon s3 直接从S3读取预训练的huggingface变压器

Amazon s3 直接从S3读取预训练的huggingface变压器,amazon-s3,huggingface-transformers,Amazon S3,Huggingface Transformers,加载模型需要将模型保存在本地(如上所述),这样您只需将本地路径传递给模型和配置: model=PreTrainedModel.from\u pretrained('path/to/model',local\u files\u only=True) 当模型存储在S3上时,这可以实现吗?回答我自己的问题。。。(显然) 我使用一个临时文件(NamedTemporaryFile)实现了这一点,它实现了这个技巧。我希望找到一个内存中的解决方案(即将字节数直接从_pretrained传递到),但这需要对转

加载模型需要将模型保存在本地(如上所述),这样您只需将本地路径传递给模型和配置:

model=PreTrainedModel.from\u pretrained('path/to/model',local\u files\u only=True)

当模型存储在S3上时,这可以实现吗?

回答我自己的问题。。。(显然)

我使用一个临时文件(
NamedTemporaryFile
)实现了这一点,它实现了这个技巧。我希望找到一个内存中的解决方案(即将
字节数
直接从_pretrained传递到
),但这需要对
转换器
代码库进行修补

导入boto3
导入json
从contextlib导入contextmanager
从io导入字节io
从tempfile导入NamedTemporaryFile
从transformers导入PretrainedConfig、PreTrainedModel
@上下文管理器
def s3_文件对象(桶,钥匙):
“”“从{bucket}/{key}处的文件名生成文件对象”“”
s3=两个客户端(“s3”)
obj=s3.get_对象(Bucket=Bucket,Key=Key)
产生字节(obj[“Body”].read())
def装载模型(铲斗、路径到模型、模型名称='pytorch\u模型'):
"""
在给定的S3路径加载模型。假设您的模型存储在密钥:
“{path_to_model}/{model_name}.bin”
并且在同一路径上也生成了一个配置,该路径名为:
f'{path_to_model}/config.json'
"""
tempfile=NamedTemporaryFile()
将s3_fileobj(f'{path_to_model}/{model_name}.bin')作为f:
tempfile.write(f.read())
将s3_fileobj(f'{path_to_model}/config.json')作为f:
dict_data=json.load(f)
config=PretrainedConfig.from_dict(dict_数据)
model=PreTrainedModel.from_pretrained(tempfile.name,config=config)
回归模型
模型=加载模型(“我的存储桶”、“路径/到/模型”)