簡體   English   中英

在 Azure Machine Learning Studio 中注冊並獲取一個環境,該環境源自自創的 Docker 圖像

[英]Registering and getting an environment in Azure Machine Learning Studio that derives from a self-created Docker image

我需要在 Azure Machine Learning Studio 中注冊一個環境,該環境源自自創的 Docker 圖像。 我在 Microsoft 找到了這個文檔,它描述了使用自定義 Docker 圖像作為環境的過程。

不幸的是,該文檔沒有解釋如何將生成的環境注冊到工作空間中,以便在需要時獲取環境。

通常,您描述並注冊這樣的環境:

from azureml.core import Environment
from azureml.core.conda_dependencies import CondaDependencies

# Create a Python environment for the experiment
diabetes_env = Environment("diabetes-experiment-env")
diabetes_env.python.user_managed_dependencies = False # Let Azure ML manage dependencies
diabetes_env.docker.enabled = True # Use a docker container

# Create a set of package dependencies (conda or pip as required)
diabetes_packages = CondaDependencies.create(conda_packages=['scikit-learn','ipykernel','matplotlib','pandas','pip'],
                                             pip_packages=['azureml-sdk','pyarrow'])

# Add the dependencies to the environment
diabetes_env.python.conda_dependencies = diabetes_packages

# Register the environment
diabetes_env.register(workspace=ws)

然后,當您需要定義的環境時,您可以通過以下方式獲得它:

# get the registered environment
registered_env = Environment.get(ws, 'diabetes-experiment-env')

來源

在我看來,這種方法不適用於從自行創建的 Docker 圖像派生的環境。

例如,我定義並注冊了這樣一個環境:

from azureml.core import Environment
from azureml.core import ContainerRegistry

registry = ContainerRegistry()
registry.address = "name_of_container_registry.azurecr.io"
registry.username = "username"
registry.password = "password"
myenv = Environment.from_docker_image('env_name', 'name_of_container_registry.azurecr.io/docker_image_name:latest', container_registry=registry, conda_specification=None, pip_requirements=None)
myenv.register(workspace=ws)

然后,在我需要具有上述定義環境的腳本中:

from azureml.core.model import Model
from azureml.core import Environment
from azureml.core.model import InferenceConfig
from azureml.core.webservice import LocalWebservice

model = Model(ws, 'exemplarily_model')

registered_env = Environment.get(ws, 'env_name')

inference_config = InferenceConfig(environment=registered_env, 
                                   source_directory='./source_dir', 
                                   entry_script='./score.py') 

deployment_config = LocalWebservice.deploy_configuration(port=6789)

service = Model.deploy(
    ws,
    "myservice",
    [model],
    inference_config,
    deployment_config,
    overwrite=True,
)

service.wait_for_deployment(show_output=True)
print(service.get_logs())

每次推理服務部署失敗時出現異常“容器注冊表名稱_of_container_registry.azurecr.io 的身份驗證失敗”。 但是,當我將environment=registered_env更改為environment=myenv時,推理服務成功啟動,沒有任何錯誤。

這讓我得出結論,在 Azure Machine Learning Studio 中注冊和獲取一個環境,該環境源自自創的 Docker 圖像,其工作方式不同。

因此,我想詢問在 Azure 機器學習工作室中注冊和獲取環境的正確命令,該環境源自自創的 Docker 圖像。

更新:
我發現有可能獲得源自自創 Docker 圖像的環境:

您可以使用命令myenv.save_to_directory(path="./env", overwrite=True)將環境保存到目錄,而不是使用命令myenv.register(workspace=ws)注冊環境。 然后,您可以使用newenv = Environment.load_from_directory(path="./env")在不同的腳本中加載環境。 這種方法適用於我部署推理服務。 我在這里找到了保存環境的可能性: 鏈接

@Daniel, register() 返回一個已注冊的環境實例。 如果之前注冊了環境,則返回相應的版本,否則 AzureML 服務將創建一個新版本並返回給客戶端。 現在,當您在指定版本的情況下執行 Environment.get() 時,它會返回您最新注冊的信息,這可能與您期望在您的環境中玩很多東西不同。 那么,您能不能只看repr由 register() 和 get() 返回的環境。 或者簡單地檢查 env.register(ws).version 和 Environment.get(ws, name).version。 我相信這將揭開這個謎團。 請不要依賴最新版本,但請指定確切的版本或 label,后者更靈活且首選

您能否確認 register() 返回的環境與您檢索的最新環境(未指定版本)Environment.get() 相同?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM