Как передать аргументы в файл скоринга при развертывании модели в AzureML

Я развертываю обученную модель в конечной точке ACI в Машинном обучении Azure с помощью Python SDK. Я создал свой файл score.py, но мне бы хотелось, чтобы этот файл вызывался с переданным аргументом (как и в случае с обучающим файлом), который я могу интерпретировать с помощью argparse. Однако я, похоже, не нахожу, как передавать аргументы. Это код, который мне нужен для создания среды InferenceConfig, который, очевидно, не работает. Должен ли я вернуться к использованию дополнительных шагов файла Docker или около того?

from azureml.core.conda_dependencies import CondaDependencies
from azureml.core.environment import Environment
from azureml.core.model import InferenceConfig

env = Environment('my_hosted_environment')
env.python.conda_dependencies = CondaDependencies.create(
    conda_packages=['scikit-learn'],
    pip_packages=['azureml-defaults'])
scoring_script = 'score.py --model_name ' + model_name
inference_config = InferenceConfig(entry_script=scoring_script, environment=env)

Добавляем score.py для справки о том, как я хотел бы использовать аргументы в этом скрипте:

#removed imports
import argparse

def init():
    global model

    parser = argparse.ArgumentParser(description="Load sklearn model")
    parser.add_argument('--model_name', dest="model_name", required=True)
    args, _ = parser.parse_known_args()

    model_path = Model.get_model_path(model_name=args.model_name)
    model = joblib.load(model_path)

def run(raw_data):
    try:
        data = json.loads(raw_data)['data']
        data = np.array(data)
        result = model.predict(data)
        return result.tolist()

    except Exception as e:
        result = str(e)
        return result

Интересно услышать твои мысли


person Sam Vanhoutte    schedule 11.03.2020    source источник
comment
Не могли бы вы добавить более подробную информацию о получаемых журналах использования case / score.py и ошибок.   -  person Ram-msft    schedule 12.03.2020
comment
спасибо, добавил score.py   -  person Sam Vanhoutte    schedule 12.03.2020


Ответы (1)


Информацию о развертывании с использованием сред можно найти здесь model-register-and-deploy.ipynb. Класс InferenceConfig принимает source_directory и entry_script parameters, где source_directory - это путь к папке, содержащей все файлы (score.py и любые другие дополнительные файлы) для создания изображения.

Это multi-model-register-and-deploy.ipynb есть фрагменты кода о том, как создать InferenceConfig с source_directory и entry_script.

from azureml.core.webservice import Webservice
from azureml.core.model import InferenceConfig
from azureml.core.environment import Environment

myenv = Environment.from_conda_specification(name="myenv", file_path="myenv.yml")
inference_config = InferenceConfig(entry_script="score.py", environment=myenv)

service = Model.deploy(workspace=ws,
                       name='sklearn-mnist-svc',
                       models=[model], 
                       inference_config=inference_config,
                       deployment_config=aciconfig)

service.wait_for_deployment(show_output=True)

print(service.scoring_uri)
person Ram-msft    schedule 12.03.2020
comment
Привет, Рам, большое спасибо за отзыв. Однако мне, кажется, не хватает того, где фактические аргументы передаются в скрипт score.py? Кажется, они просто вызывают сценарий без каких-либо конкретных параметров, а название модели «жестко запрограммировано» в сценарии, насколько я понимаю? - person Sam Vanhoutte; 12.03.2020
comment
comment
Можете ли вы попробовать наш новый более простой способ сделать это с помощью parallelrunstep? docs.microsoft.com/ en-us / azure / machine-learning / - person Ram-msft; 12.03.2020
comment
Этот ответ не дает решения поставленного вопроса. - person Monaj; 08.07.2020