Azure ML SDK V2计算集群Python版本为何从3.8变为3.10?
问题原因分析
差异的核心在于Azure ML SDK V1和V2的环境构建逻辑不同:
SDK V1的行为:你通过
CondaDependencies定义环境时,Azure ML会在你提供的Docker镜像基础上,自动创建一个Conda环境,该环境默认使用Python 3.8(匹配当时Azure ML服务的默认Conda环境配置)。你的任务运行时会激活这个Conda环境,因此实际使用的是Python 3.8,而非基础镜像的系统Python版本。SDK V2的行为:你使用
BuildContext直接构建Docker镜像,整个流程完全基于你编写的Dockerfile逻辑。而mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04:latest镜像基于Ubuntu 22.04,系统默认的Python 3版本为3.10;同时你的Dockerfile中没有创建Conda环境或指定Python版本,因此最终环境直接使用了系统的Python 3.10。
解决方案
你可以通过以下两种方式修复Python版本不兼容的问题:
方式一:在Dockerfile中指定Python 3.8版本
修改Dockerfile,安装Python 3.8并设置为默认版本,确保后续pip安装依赖使用该版本:
FROM mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04:latest RUN mkdir -p /usr/share/man/man1 # 更新源并安装Python 3.8及依赖 RUN apt-get -y update \ && apt-get install openjdk-19-jdk python3.8 python3.8-distutils python3-pip -y \ && update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1 \ && update-alternatives --install /usr/bin/python python /usr/bin/python3.8 1 \ && rm -rf /var/lib/apt/lists/* # 升级pip到适配Python 3.8的版本 RUN python -m pip install --upgrade pip COPY requirements.txt . RUN pip install -r requirements.txt && rm requirements.txt CMD ["bash"]
方式二:使用Conda配置创建环境
在V2中复用类似V1的Conda环境逻辑,通过CondaConfiguration指定Python 3.8版本:
- 编写
conda.yml文件:
name: my_experiment_env channels: - conda-forge dependencies: - python=3.8 - pip - pip: - pandas - databricks-connect==10.4
- 修改Python代码:
from azure.ai.ml.entities import Environment, CondaConfiguration # 关联conda配置文件 conda_config = CondaConfiguration(conda_file_path="path/to/conda.yml") azureml_env = Environment( name="my_experiment", conda_configuration=conda_config, image="mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu22.04:latest" ) azureml_env.validate() self.ml_client.environments.create_or_update(azureml_env)
这样Azure ML会自动在基础镜像上创建指定Python 3.8的Conda环境,与V1的行为一致。
内容的提问来源于stack exchange,提问作者BeGreen
相关产品推荐
相关产品推荐

