Как изменить версию Python в Azure Machine Learning SDK ContainerImage с помощью CondaDependencies
Я пытаюсь перевести мою модель Faster R-CNN в экземпляр контейнера на ACI. Для этого мне нужно, чтобы мой образ докера имел версию Python 3.5. *. Я указываю это в моем файле conda yaml, но каждый раз, когда я запускаю экземпляр и docker run -it *** /bin/bash
в него я вижу, что он имеет только Python 3.6.7.
https://user-images.githubusercontent.com/21140767/50680590-82b20b80-1008-11e9-9bfe-4a0e71084ce0.png
Как я могу получить свой образ Docker для Python версии 3.5.*? Я уже пробовал conda, устанавливая Python версии 3.5.2, но это не сработало, так как в итоге у него не было 3.5.2, а только 3.6.7. (dfimage позволяет вам увидеть файл docker, из которого было создано изображение, https://hub.docker.com/r/chenzj/dfimage/).
https://user-images.githubusercontent.com/21140767/50680673-d6245980-1008-11e9-9d48-71a7c150d925.png
Мой ямл:
name: project_environment
dependencies:
- python=3.5.2
- pip:
- matplotlib
- opencv-python==3.4.3.18
- azureml-core==1.0.6
- numpy
- cntk
- cython
channels:
- anaconda
Ячейка записной книжки: из azureml.core.conda_dependencies import CondaDependencies
svmandss = CondaDependencies.create(python_version="3.5.2", pip_packages=[
"matplotlib",
"opencv-python==3.4.3.18",
"azureml-core",
"numpy",
"cntk",
"cython"], )
svmandss.add_channel('anaconda')
with open("fasterrcnn.yml","w") as f:
f.write(svmandss.serialize_to_string())
Еще одна ячейка ноутбука со спецификациями ContainerImage.
image_config = ContainerImage.image_configuration(execution_script="score_fasterrcnn.py",runtime="python",conda_file="./fasterrcnn.yml",dependencies=listdir("utils"),docker_file="./Dockerfile")
service = Webservice.deploy_from_model(workspace=ws,
name='faster-rcnn',
deployment_config=aciconfig,
models=[Model(workspace=ws, name='Faster-RCNN')],
image_config=image_config)
service.wait_for_deployment(show_output=True)
Заметка
Для лучшей читабельности смотрите мою проблему с GitHub: ( https://github.com/Azure/MachineLearningNotebooks/issues/163).
4 ответа
В настоящее время при развертывании веб-службы версия Python соответствует базовому образу Azure ML. Мы расследуем устранение этого ограничения в будущем.
Поскольку это один из лучших ответов Google при поиске "версии azureml python", я отправляю ответ здесь. Документация не очень ясна, когда дело доходит до этого, но следующее будет работать:
from azureml.core import Workspace
from azureml.core.runconfig import RunConfiguration
from azureml.core.conda_dependencies import CondaDependencies
ws = Workspace.from_config()
# This is the important part
conda_dep = CondaDependencies(conda_dependencies_file_path="pipeline/environment.yml")
aml_run_config = RunConfiguration(conda_dependencies=conda_dep)
# Define compute target - must be preconfigured in th workspace
compute_target = ws.compute_targets['my-azureml-target']
aml_run_config.target = compute_target
from azureml.pipeline.steps import PythonScriptStep
script_source_dir = "./pipeline"
step_1_script = "test.py"
step_1 = PythonScriptStep(
script_name=step_1_script,
source_directory=script_source_dir,
compute_target=compute_target,
runconfig=aml_run_config,
allow_reuse=True
)
from azureml.pipeline.core import Pipeline
# Build the pipeline
pipeline1 = Pipeline(workspace=ws, steps=[step_1])
from azureml.core import Experiment
# Submit the pipeline to be run
pipeline_run1 = Experiment(ws, 'Test-pipeline').submit(pipeline1)
pipeline_run1.wait_for_completion(show_output=True)
Это предполагает следующую структуру каталогов:
- корень /
- create_pipeline.py
- трубопровод/
- test.py
- environment.yml
где create_pipeline.py - это файл выше, test.py - это сценарий, который вы хотите запустить, а environment.yml - файл среды conda, включая версию python.
Мне удалось изменить версию Python, зарегистрировав среду в Azure ML Workspace:
from azureml.core.environment import Environment, Workspace
environment = Environment.from_conda_specification(name='myenv', file_path='environment.yml')
environment.python.user_managed_dependencies = False
workspace = Workspace.from_config()
environment = environment.register(workspace=workspace)
env_build = environment.build(workspace=workspace)
Затем настройте конечную точку для публикации следующим образом:
from azureml.core.model import InferenceConfig
environment = Environment.get(workspace=workspace, name='myenv')
inference_config = InferenceConfig(
entry_script='inference.py',
source_directory='.',
environment=environment
)
Используется пакет SDK для Azure ML 1.29.0. Возможно, это уже было исправлено, и оригинальный метод тоже работает, но я это не тестировал.
РЕДАКТИРОВАТЬ:
Это больше не проблема для меня. Я нашел другой способ заставить мой код работать с версией Python 3.6.7.
Это все еще проблема, если вы спросите меня. Если в будущем мне понадобится Python версии 3.5, то решения на данный момент не будет.
Вы все еще можете опубликовать ответ, если хотите.