SageMaker多模型部署报错:无法访问只读文件系统下的config.json
问题:Amazon SageMaker多模型部署时出现只读文件系统错误
尝试在Amazon SageMaker中创建多模型端点,执行以下代码:
boto_seasson = boto3.session.Session(region_name='us-east-1') sess = sagemaker.Session(boto_session=boto_seasson) iam = boto3.client('iam') role = iam.get_role(RoleName='sagemaker-role')['Role']['Arn'] huggingface_model = HuggingFaceModel(model_data='s3://bucket/path/model.tar.gz', transformers_version="4.12.3", pytorch_version="1.9.1", py_version='py38', role=role, sagemaker_session=sess) mme = MultiDataModel(name='model-name', model_data_prefix='s3://bucket/path/', model=huggingface_model, sagemaker_session=sess) predictor = mme.deploy(initial_instance_count=1, instance_type="ml.t2.medium")
执行预测操作时:
predictor.predict({"inputs": "test"}, target_model="model.tar.gz")
出现以下错误:
{ModelError}An error occurred (ModelError) when calling the InvokeEndpoint operation: Received client error (400) from primary with message "{ "code": 400, "type": "InternalServerException", "message": "[Errno 30] Read-only file system: '/opt/ml/models/d8379026esds430426d32321a85878f6b/model/config.json'" }
但使用HuggingFaceModel部署单模型时,代码如下,预测操作可正常执行:
huggingface_model = HuggingFaceModel(model_data='s3://bucket/path/model.tar.gz', transformers_version="4.12.3", pytorch_version="1.9.1", py_version='py38', role=role, sagemaker_session=sess) predictor = huggingface_model.deploy(initial_instance_count=1, instance_type="ml.t2.medium")
询问:使用MultiDataModel部署时出现只读文件系统错误的原因是什么?
原因分析
出现该错误的核心差异在于SageMaker单模型与多模型端点的模型存储目录权限:
- 单模型部署:模型会被解压到
/opt/ml/model目录,该目录默认具备可写权限。Hugging Face Transformers库加载模型时,若需要修改配置文件或写入缓存,可直接在该目录操作,不会触发权限问题。 - 多模型端点(MME)部署:每个模型会被独立下载解压到
/opt/ml/models/<唯一模型UUID>目录下,这个目录是只读挂载的。而Hugging Face的模型加载逻辑(比如自动更新config.json、写入模型组件缓存)会尝试写入模型所在目录,这就触发了只读文件系统的权限错误,也就是报错中提到的无法写入config.json的问题。
简单来说,MME的模型存储路径是只读的,而Hugging Face默认加载逻辑需要写入该路径,两者冲突导致了错误。
内容的提问来源于stack exchange,提问作者Mpizos Dimitris
相关产品推荐
相关产品推荐

