![](/img/trans.png)
[英]Azure machine learning unable to load pytorch Model from the outputs folder
[英]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.