如何将数据资产上传到Azure端点的评分脚本中

5uzkadbs  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(113)

我正在尝试在端点中部署机器学习模型。我已经将模型注册为“ModelTest”。我试图根据历史数据预测销售额,因此为了预测下个月的销售额,我将前六个月的销售额传递给模型。为此,我需要访问历史数据。将历史数据上传到Azure中的数据资产中。
我知道我应该在评分脚本中编写预处理代码,但我找不到将历史数据从数据资产上载到端点的正确方法。
我尝试按照Azure文档中的示例部署模型而不进行预处理,它运行得很顺利。

import os
import logging
import json
import numpy
import pickle

def init():
    """
    This function is called when the container is initialized/started, typically after create/update of the deployment.
    You can write the logic here to perform init operations like caching the model in memory
    """
    global model
    # AZUREML_MODEL_DIR is an environment variable created during deployment.
    # It is the path to the model folder (./azureml-models/$MODEL_NAME/$VERSION)
    # Please provide your model's folder name if there is one
    model_path = os.path.join(
        os.getenv("AZUREML_MODEL_DIR"), "ModelTest.sav"
    )
    # deserialize the model file back into a sklearn model
    model = pickle.load(open(model_path,'rb'))
    logging.info("Init complete")

def run(raw_data):
    """
    This function is called for every invocation of the endpoint to perform the actual scoring/prediction.
    In the example we extract the data from the json input and call the scikit-learn model's predict()
    method and return the result back
    """
    logging.info("model 1: request received")
    data = json.loads(raw_data)["data"]
    data = numpy.array(data)
    
    result = model.predict(data)
    logging.info("Request processed")
    return result.tolist()

字符串
然后,我尝试使用“pd.read_csv”在init函数中上载数据资产。我已经尝试了资产的“数据源”选项卡中的所有三个路径,但它们都给予了错误,因为容器无法访问数据。例如使用以下

Data=pd.read_csv('https://machinelearnin6474979439.blob.core.windows.net/azureml-blobstore-b6321cf2-b0da-411e-97bb-9be13a8d1c89/UI/2023-06-26_132526_UTC/Data.csv'')


我得到“URL链接错误. HTTP错误:HTTP错误409:此存储帐户不允许公共访问。”,而对于其他路径,它无法识别它们。
我认为read_csv应该可以工作,因为pickle.load可以,所以我认为这是一个使用正确路径的问题。

but5z9lq

but5z9lq1#

根据这些信息,您正在尝试使用数据资产的URL访问评分脚本中的数据资产。
pd.read_csv()将工作,如果你给予数据集作为输入环境路径。

的数据
如果您想直接在评分脚本中访问数据资产,那么一个可能的解决方案是通过在init()函数中添加以下代码来使用Dataset包。下面是一个示例代码片段:

from azureml.core import Workspace, Dataset
import pandas as pd

# Replace these values with your own
subscription_id = 'your_subscription_id'
resource_group = 'your_resource_group'
workspace_name = 'your_workspace_name'
dataset_name = 'your_dataset_name'

# Connect to your workspace
workspace = Workspace(subscription_id, resource_group, workspace_name)

# Get the registered dataset
dataset = Dataset.get_by_name(workspace, "test_dataset")

# Load the data into a pandas DataFrame
historic_data = dataset.to_pandas_dataframe()
historic_data

字符串



其他可能的解决方案是在init()中使用csv数据文件的SAS URL,并使用pd.read_csv().

读取

相关问题