AzureML环境中基于setup.py安装MultiScaleDeformableAttention的相关问题
问题背景
我正在AzureML上部署DINO:DETR进行模型训练,已成功创建包含CUDA 11.3和torch 1.12.0的环境stc-cuda-env。根据项目安装指南第4步,需通过python setup.py build install安装MultiScaleDeformableAttention包。
问题1:能否直接在stc-cuda-env环境中安装该setup.py?
问题2:如何在AzureML上成功安装并导入该包?
当前执行情况:
- 在main.py中通过subprocess执行安装命令
subprocess.run(["python", "setup.py", "build", "install"]),日志显示安装成功:Installed /opt/conda/envs/ptca/lib/python3.8/site-packages/MultiScaleDeformableAttention-1.0-py3.8-linux-x86_64.egg
Processing dependencies for MultiScaleDeformableAttention1.0
Finished processing dependencies for MultiScaleDeformableAttention1.0 - 但导入MultiScaleDeformableAttention时(手动导入或调用
build_model_main()函数)出现错误:ModuleNotFoundError: No module named 'MultiScaleDeformableAttention' - 已通过
print(torch.cuda.is_available())确认GPU可用,输出为True
解答
针对问题1
可以直接在stc-cuda-env环境中安装该setup.py,但必须确保执行安装命令时使用的是环境内的Python解释器,而非系统或其他环境的Python。
针对问题2
尝试以下方法解决导入失败问题:
确保Python解释器路径一致
先在main.py中打印当前运行环境的Python路径:import sys print(sys.executable)确认subprocess调用的Python路径与上述输出一致,改用绝对路径执行安装:
subprocess.run(["/opt/conda/envs/stc-cuda-env/bin/python", "setup.py", "build", "install"])在环境初始化阶段提前安装
避免在main.py中动态安装,改为在AzureML环境配置阶段完成安装:- 在conda环境的yml文件中添加自定义构建脚本,或者在AzureML环境构建命令中执行:
cd path/to/MultiScaleDeformableAttention && python setup.py build install
确保包在环境启动时就已完成安装,规避运行时动态安装的路径冲突。
- 在conda环境的yml文件中添加自定义构建脚本,或者在AzureML环境构建命令中执行:
改用pip安装替代setup.py
pip会更规范地处理包注册,进入MultiScaleDeformableAttention目录后执行:pip install .若之前安装过旧版本,可添加
--force-reinstall参数强制覆盖:pip install . --force-reinstall验证包安装路径与Python识别路径匹配
在main.py中打印Python的site-packages路径:import site print(site.getsitepackages())检查输出路径是否包含安装日志中的
/opt/conda/envs/ptca/lib/python3.8/site-packages,若不一致,说明包安装到了错误的环境。
内容的提问来源于stack exchange,提问作者olivier

