Введение:
В этой части 2 статьи показано, как развернуть нашу предварительно обученную модель COVID-19 (в Часть 1) в рабочей области Azure ML. Как уже было сказано, в Части-1 мод тренировался в локальной среде, и мы сохранили нашу модель в файл формата .h5.
В Azure ML мы зарегистрируем нашу пользовательскую предварительно обученную модель и развернем ее в службе ACI (Azure Container Instances); чтобы он мог получить доступ из любого другого приложения или любых служб Azure.
Пожалуйста, прочитайте мою статью Часть 1 о наборе данных COVID-19, предварительной обработке изображений и построении модели глубокого обучения.
Я надеюсь, что конец этой статьи поможет читателю понять, как построить модель глубокого обучения для любого набора данных классификации изображений или распознавания объектов и как развернуть любую пользовательскую модель в Azure ML Workspace.
Предварительный запрос:
- У пользователя должна быть подписка Azure, и должна быть создана рабочая область Azure ML.
- Azure ML SDK (версия: ›= 1.4.0) должен быть установлен на локальном компьютере.
- Python (версия: ›= 3.7.3) должен быть установлен на локальном компьютере вместе с Anaconda.
Пошаговая инструкция по развертыванию нашей окончательной модели в Azure ML:
- Импорт всей необходимой библиотеки:
Во-первых, вам нужно импортировать приведенную ниже библиотеку, связанную с Azure ML, в свой блокнот.
from azureml.core import Workspace, Experiment, Run from azureml.core.model import Model from azureml.core.authentication import InteractiveLoginAuthentication from azureml.core.model import InferenceConfig from azureml.core.environment import Environment from azureml.core.conda_dependencies import CondaDependencies from azureml.core.webservice import AciWebservice,Webservice import requests import json import base64
2. Получить информацию о рабочей области Azure ML:
Используйте приведенный ниже код, чтобы получить информацию о рабочей области Azure ML в объекте «ws». Здесь пользователю необходимо ввести идентификатор клиента Azure для интерактивной аутентификации при входе, а также ввести идентификатор подписки, имя рабочей области и группу ресурсов. Эту информацию вы можете получить на своем лазурном портале.
Когда вы пытаетесь запустить приведенный ниже код, он открывает интерактивный экран входа в систему Azure для аутентификации.
interactive_auth = InteractiveLoginAuthentication(tenant_id="<Your Azure tenant Id>") ws = Workspace(subscription_id="<Your Azure Sub scription Id>", resource_group="<Resource Group>", workspace_name="<Your Workspace Name>", auth=interactive_auth)
2. Зарегистрируйте модель :
Используйте метод Model.register, чтобы зарегистрировать нашу обученную модель в рабочей области машинного обучения Azure. В соответствии с Частью 1 мы сохранили нашу обученную модель в файле .h5, и на нее следует ссылаться здесь вместе с объектом рабочей области.
model = Model.register(model_path = "Covid_Final_Best_model.h5", model_name = "Covid19Prediction", description = "COVID19 Prediction using xception model", workspace = ws)
После успешной регистрации модели вы можете увидеть информацию о зарегистрированной модели на портале Azure, как показано ниже.
3. Определить конфигурацию логического вывода:
Конфигурация вывода определяет среду, используемую для запуска развернутой модели. Конфигурация вывода ссылается на следующие объекты, которые используются для запуска модели при ее развертывании:
- Сценарий входа: этот файл (с именем modelscor.py) загружает модель при запуске развернутой службы. Он также отвечает за получение данных, передачу их в модель и последующий возврат ответа.
- Среда: Среда определяет программные зависимости, необходимые для запуска модели и сценария входа. Здесь мы должны добавить необходимые пакеты зависимостей Conda для нашей модели.
# Create the environment myenv = Environment(name="myenv") conda_dep = CondaDependencies() # Define the packages needed by the model and scripts conda_dep.add_conda_package("pandas") conda_dep.add_conda_package("numpy") conda_dep.add_conda_package("scikit-learn") conda_dep.add_conda_package("tensorflow") conda_dep.add_conda_package("keras") conda_dep.add_conda_package("opencv") # You must list azureml-defaults as a pip dependency conda_dep.add_pip_package("azureml-defaults") # Adds dependencies to PythonSection of myenv myenv.python.conda_dependencies=conda_dep inference_config = InferenceConfig(entry_script="modelscore.py", environment=myenv)
Сценарий входа:
Сценарий входа имеет только две обязательные функции: init() и run(data). Эти функции используются для инициализации службы при запуске и запуска модели с использованием данных запроса, переданных клиентом.
Здесь метод init () — это метод запуска, в нем нам нужно инициализировать объект «модель» и использовать функцию keras.models.load_model для загрузки из нашего зарегистрированного файла модели, как показано ниже.
# Called when the deployed service starts def init(): global model print("init method has been invoked") # The AZUREML_MODEL_DIR environment variable indicates # a directory containing the model file you registered. model_filename = 'Covid_Final_Best_model.h5' model_path = os.path.join(os.environ['AZUREML_MODEL_DIR'], model_filename) # load models model = load_model(model_path) print("init method has been completed")
В методе run(data) данные входного параметра должны быть сериализуемым объектом JSON. Этот объект данных изображения отправляется в метод imageDataPreProcessing, где он преобразуется в массив байтов, изменяет размер изображения до 150x150 и возвращает нормализованные данные изображения в виде массива numpy. Этот же шаг мы выполнили в Части 1 для предварительной обработки данных изображения. И, наконец, нормализованные входные данные изображения будут отправлены в метод прогнозирования, где он использует нашу загруженную модель и прогнозирует, что входные данные COVID-19 ПОЛОЖИТЕЛЬНЫ или НЕГАТИВНЫ. Здесь наша модель будет возвращать значение вероятности 0–1, и мы установили предел порогового значения как 0,5, если прогнозируемое значение больше 0,5, то это ПОЛОЖИТЕЛЬНОЕ, иначе оно возвращает ОТРИЦАТЕЛЬНОЕ.
# Handle requests to the service def run(data): try: print("run method has been invoked") imgInputData = imageDataPreProcess(data) prediction = predict(imgInputData) #Return prediction return prediction except Exception as e: error = str(e) print("ERROR :: ",error) return error def imageDataPreProcess(inputData): #Convert inputdata to Json object jsonData=json.loads(inputData) #Get image bytes imageByte=jsonData["data"].encode("utf-8") #Get base64 bytes imgByteArray=base64.b64decode(imageByte) #Convert to byte Array imgByteArray = bytearray(imgByteArray) image = np.asarray(imgByteArray, dtype="uint8") image = cv2.imdecode(image, cv2.IMREAD_COLOR) #Resize image to 150X150 resized_arr = cv2.resize(image, (150, 150)) #Normalize the image to 0-1 from 0-255 X=resized_arr/255 #Expand image dimension to (1,150,150,3) X = np.expand_dims(X, axis=0) return X # Predict input image data is COVID-19 POSITIVE or NEGATIVE using #the model def predict(imgData): start_at = time.time() # Prediction prediction=model.predict(imgData) print("Predicted Value :",prediction[0][0]) predictedValue=prediction[0][0] #Threshold limit value is 0.5 if(predictedValue > 0.5): label="POSITIVE" else: label="NEGATIVE" print("Predicted Label :",label) print("Process status :Completed") return {"label": label, "prediction": str(predictedValue), "elapsed_time": time.time()-start_at}
4. Разверните модель в ACI:
Теперь модель готова к развертыванию в ACI, здесь мы выбрали 1 CPU_cores и 4 ГБ памяти для этой модели в веб-службе ACI. Развертывание в Azure займет несколько минут. После успешного развертывания состояние службы ACI является работоспособным, и URL-адрес оценки должен быть доступен. Вы также можете проверить состояние службы ACI развернутой модели на портале Azure, как показано ниже. Теперь этот URL-адрес оценки может быть доступен для любых клиентских компонентов.
deployment_config = AciWebservice.deploy_configuration(cpu_cores = 1, memory_gb = 4) model = Model(ws, name='Covid19Prediction') service = Model.deploy(ws, 'covid19webservice', [model], inference_config, deployment_config) service.wait_for_deployment(True) print(service.state) print("scoring URI: " + service.scoring_uri)
5. Тестовая модель с использованием службы ACI:
Теперь мы можем протестировать нашу развернутую модель, используя приведенный ниже код, и мы можем увидеть ответ от нашей службы ACI, когда мы передаем файл рентгеновского изображения из локальной сети.
Вывод:
1. Мы обучили нашу модель в локальной среде и сохранили нашу лучшую модель в формате файла .h5 во время обучения с помощью функции обратного вызова.
2. Наконец, мы можем зарегистрировать нашу предварительно обученную модель в рабочей области Azure ML и развернуть ее в ACI (Azure Container Instances).
Репозиторий исходного кода:
Пожалуйста, найдите исходный код этого решения в репозитории my github.
Ссылка:
https://docs.microsoft.com/en-us/azure/machine-learning/how-to-deploy-existing-model
https://docs.microsoft.com/en-us/azure/machine-learning/how-to-consume-web-service