如何将Azure ML中的sklearn模型保存至指定Blob存储容器?
问题解答
Azure ML是否关联本地文件存储?
- Azure ML的计算实例和计算集群都配备了临时本地存储:
- 计算实例有固定的本地工作目录(如
/home/azureuser),存储会随实例保留(只要实例不被删除),但仅适合临时文件操作,不建议作为模型长期存储的方案。 - 计算集群的节点本地存储是临时态,节点停止或销毁后数据会被清除,仅用于任务执行过程中的临时缓存。
- 计算实例有固定的本地工作目录(如
- 这类本地存储并非必须使用,完全可以跳过本地保存步骤,直接将模型上传到目标Blob存储容器。
能否通过指向指定存储容器的Datastore完成模型保存?
完全可以,以下是两种无需本地文件的实现方案:
方案1:通过Datastore直接上传内存中的模型
将sklearn模型序列化到内存字节流,再通过Datastore直接上传到目标Blob容器:
from azureml.core import Workspace, Datastore import joblib import io # 加载工作区及已关联目标Blob容器的Datastore ws = Workspace.from_config() target_datastore = Datastore.get(ws, datastore_name="你的Datastore名称") # 假设你的sklearn模型变量名为model # 将模型序列化到内存字节流 model_stream = io.BytesIO() joblib.dump(model, model_stream) model_stream.seek(0) # 上传到Blob容器指定路径 target_datastore.upload_bytes( data=model_stream.getvalue(), target_path="models/sklearn_models/", # Blob容器内的存储路径 target_name="trained_model.joblib" # Blob文件名称 )
方案2:注册模型时直接关联Datastore
如果需要将模型纳入Azure ML模型注册表,可直接注册内存中的模型并指定存储到目标Datastore:
from azureml.core import Workspace, Model import joblib import io ws = Workspace.from_config() target_datastore = Datastore.get(ws, datastore_name="你的Datastore名称") # 序列化模型到内存 model_stream = io.BytesIO() joblib.dump(model, model_stream) model_stream.seek(0) # 注册模型并指定存储到目标Datastore registered_model = Model.register( workspace=ws, model_name="sklearn-classification-model", model_path=None, # 不指定本地文件路径 model_data=model_stream.getvalue(), # 传入内存中的模型数据 description="直接存储到目标Blob容器的Sklearn分类模型", datastore=target_datastore )
补充说明
- 两种方案均无需将模型写入本地文件,直接完成模型到目标Blob容器的存储。
- 确保你的Datastore已正确关联目标Blob容器,且当前Azure ML工作区拥有该Datastore的读写权限。
内容的提问来源于stack exchange,提问作者Mary
相关产品推荐
相关产品推荐

