J'essaie d'intégrer mon modèle Faster R-CNN dans une instance de conteneur sur ACI. Pour cela, j'ai besoin que mon image docker possède la version 3.5 de python. *. Je le spécifie dans mon fichier conda yaml, mais chaque fois que je lance une instance et que docker exécute -it *** / bin / bash
, je vois qu'il ne contient que Python 3.6.7.
Comment puis-je obtenir mon image Docker pour avoir la version Python 3.5. *? J'ai déjà essayé conda d'installer la version 3.5.2 de Python, mais cela n'a pas fonctionné car finalement il ne possédait pas 3.5.2, mais seulement 3.6.7. (dfimage vous permet de voir le dockerfile à partir duquel l'image a été créée, https: //hub.docker. com / r / chenzj / dfimage / ).
https://user-images.githubusercontent.com/21140767/50680673-d6245980-1008-11e9-9d48-71a7c150d925.png
Mon yaml :
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)
Cellule du bloc-notes: depuis 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())
Une autre cellule de notebook avec des spécifications ContainerImage.
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
Pour une meilleure lisibilité, consultez mon problème GitHub: ( https://github.com/Azure/MachineLearningNotebooks / issues / 163 ).
3 Réponses :
MODIFIER:
Ce n'est plus un problème pour moi. J'ai trouvé un autre moyen de faire fonctionner mon code avec la version 3.6.7 de python.
C'est cependant toujours un problème si vous me le demandez. Si à l'avenir j'ai besoin de la version 3.5 de python, il n'y aura pas de solution pour le moment.
Vous pouvez toujours publier une réponse si vous le souhaitez.
Actuellement, la version de Python est corrigée sur ce qui se trouve dans l'image de base d'Azure ML, lors du déploiement du service Web. Nous envisageons de supprimer cette limitation à l'avenir.
Comme il s'agit de l'une des meilleures réponses de Google lors de la recherche de "azureml python version", je poste la réponse ici. La documentation n'est pas très claire à ce sujet, mais ce qui suit fonctionnera:
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)
Cela suppose la structure de répertoires suivante:
où create_pipeline.py est le fichier ci-dessus, test.py est le script que vous souhaitez exécuter et environment.yml est le fichier d'environnement conda - y compris la version python.
Mes excuses. Je vois qu'il a déjà été supprimé. Merci.
La question elle-même semble correcte, mais je pense que vous avez reçu -4 pour le titre. Vous pouvez essayer de le supprimer et de le publier à nouveau, car celui-ci risque de ne pas avoir beaucoup de vues.
Il y a une étape dans Dockerfile qui est la suivante:
Étape 13/16: RUN sed -i '/ ^ \ s * - \ s * python \ s * [<> =] / d' '/ var / azureml -app / conda.yaml '&& cat' /var/azureml-app/conda.yaml '
. Il est donc impossible de définir quelle version de Python va être utilisée. Je suppose que cela a été fait pour éviter les problèmes avec d'autres versions mais, par exemple, pour moi, c'est un gros problème car je ne peux créer des images MLFlow qu'avec 3.5.2 ou 3.7.3 dans Databricks avec une erreur "opcode inconnu" lorsque déployer l'image.@FernandoOrtega, merci pour cet indice. Je me cognais la tête là-dessus pendant des heures.