Последнее обновление: в текущем выпуске ссылки для проверки c публикации Задания Stream Analytics развертывание контейнера ACI не поддерживается. Таким образом, я закрою этот вопрос до дальнейшего уведомления. Для получения дополнительной информации следуйте ветке GitHub, опубликованной ниже.
Примечание. Проблема возникает, когда значением Deployment является контейнер ACI, а не кластер AKS. В кластерах Kubernetes сервисная функция Azure ML успешно создана. Хотя я хочу протестировать свою функцию с контейнером ACI, а не с кластером AKS.
Я пытаюсь создать служебную функцию Azure ML в службе заданий Stream Analytics. Для этого я использую уже развернутую модель ml в Azure Экземпляре контейнера (он же ACI). Тем не менее, я получаю эту ошибку:
![enter image description here](https://i.stack.imgur.com/kL84T.png)
ссылка о проблеме на GitHub и документе Microsoft
Эта ошибка присутствует, несмотря на наличие следующих трех факторов:
Фактор 1: Когда я использую URL оценки (контейнера ACI) для оценки некоторых значений локально (в Jupyter Notebook), тогда выигрыш будет успешным.
Фактор 2: Я уже вывел схему входных данных в моем файле Score.py.
Фактор 3: Я помещаю модуль infer-schema [numpy -support] в качестве зависимости от файла среды.
Что я делаю не так?
Экземпляр контейнера ACI развернутый с ключом авторизации (первичный), плюс я определяю схему образца ввода и вывода в моем файле Score.py. Однако задание Stream не может распознать файл подмены. Поскольку я определяю схему для файла Score.py, я прочитал , что файл swagger. json будет сгенерирован автоматически.
Пример моего файла Score.py:
import json
import numpy as np
import os
import itertools
import joblib
from sklearn.ensemble import RandomForestRegressor
from azureml.core.model import Model
from inference_schema.schema_decorators import input_schema, output_schema
from inference_schema.parameter_types.numpy_parameter_type import NumpyParameterType
def init():
global model
# retrieve the path to the model file using the model name
model_path = Model.get_model_path('<model_name>')
model = joblib.load(model_path)
input_sample = np.array([["0", 0, 0, 0, 0, 0]])
output_sample = np.array([0])
@input_schema('raw_data', NumpyParameterType(input_sample))
@output_schema(NumpyParameterType(output_sample))
def run(raw_data):
try:
data = np.array(raw_data)
result=[]
for array in data:
prediction_result=model[array[0]].predict(array[1:].reshape(1,-1))
result.append(prediction_result.tolist())
result=list(itertools.chain.from_iterable(result))
# you can return any data type as long as it is JSON-serializable
return result
except Exception as e:
error = str(e)
return error
Пример моего файла env.yml:
name: project_environment
dependencies:
- python=3.7.3
- pip:
- azureml-defaults
- inference-schema[numpy-support]
- joblib
- numpy
- scikit-learn==0.20.3
Буду признателен за любые комментарии по этому вопросу, чтобы решить его.
Поиск ключа:
Я сравнил файл swagger. json кластера AKS и файла контейнера ACI. И разница между двумя файлами чванства заключается в ключевых «путях». В AKS путь в сваггере. json: "пути": {"/ api / v1 / service / aks-service /": .... и т. Д. В ACI путь в сваггере. json: «пути»: {"/":....etc
Часть Swagger. json кластера AKS:
![enter image description here](https://i.stack.imgur.com/lkDnE.png)
Часть Swagger. json кластера ACI:
![enter image description here](https://i.stack.imgur.com/L036b.png)
И я предполагаю, что это может быть root из проблема. Возможно, функции задания Stream Analytics не могут распознать путь "/" для автоматической генерации сигнатуры функции для контейнера ACI.