1. 关于DGL:
Deep Graph Library (DGL) 是一款涵盖了各种图神经网络模型的Python包,支持通过PyTorch、MXNet 和 TensorFlow等框架进行编译和搭建。它提供对消息传递的多功能控制,通过自动批量处理和高度调参的稀疏矩阵内核进行快速优化,支持多 GPU/CPU 训练,可扩展至数亿节点和边的图。
2. Windows环境下的dgl安装
2.1 通过pip或conda进行安装
DGI官方提供了对应不同torch和CUDA版本的Pip/Conda下载命令,支持dgl==2.2.1
版本及以下的安装:https://www.dgl.ai/pages/start.html。
也有推荐使用清华镜像安装 (link),看了一下仅适用于3.9及以下版本的Python,且对于较新GPU版本的镜像,如CUDA==12.1以上,相关网页暂时无法打开。
2.2 错误分析与解决方案:
2.2.1 安装过程中的常见错误及解决方案
目前官方已停止在Windows和Linux系统上更新DGI包,因此当直接使用pip install dgl下载时,默认安装dgl==2.2.1
版本,并且在调用过程中会产生如下错误:
FileNotFoundError: Cannot find DGL C++ graphbolt library at D:\Anacondal\Lib\site-packages\dgl\graphbolt\graphbolt_pytorch 2.4.1.dll
这是因为dgl==2.2.1
版本与torch==2.4.x
不适配,需要通过pip install torch==2.1.0
下调torch版本,并且在2.1节提到的网页中选择合适的下载命令。
这里推荐使用conda进行下载,因为通过pip下载后,包加载过程中会遇到如下错误:
FileNotFoundError: Could not find module ‘D:\Anaconda\envs\MyEnv\Lib\site-packages\dgl\dgl.dll’ (or one of its dependencies). Try using the full path with constructor syntax.
然而,即便使用低版本的torch也不能成功加载dgl包,新的错误随之而来:
ModuleNotFoundError: No module named ‘torch.utils._import_utils’
这里依旧是版本问题导致的错误,根据建议,使用torchdata==0.7.0
版本可避免上述错误。至此,dgl可以成功地安装并调用,但事情远还没有结束…
2.2.2 运行过程中的错误
通过上述方法,我们可以在python中通过dgl创建图。
import dgl
graph = dgl.DGLGraph()
graph.add_nodes(3)
graph.add_edges(0, 1)
但是在往图中添加节点和边时,会遇到以下错误:
RuntimeError: Could not infer dtype of numpy.int64
经过各种尝试,包括使用np.int64
, torch.Tensor
更改输入的节点或边的数据类型,仍无法解决以上问题,最终无奈放弃。这时再回过头来看这张图,官方提示可以通过install from source的方式在Windows中下载最新版本的dgl,这将避免与torch的版本兼容性问题。 因此,接下来我们将尝试通过source安装dgl。
2.3 Install dgl from source
官方也给出了直接从源头安装dgl的详细流程,参考:https://docs.dgl.ai/install/index.html#windows。首先通过Git把dgl的source文件下载到本地。
git clone --recurse-submodules https://github.com/dmlc/dgl.git
(Optional) Clone the repository first, and then run the following:
git submodule update --init --recursive
在正式安装前,需配置好编译环境,请先下载Visual Studio和Cmake。接下来将分别介绍CPU和CUDA版本的dgl安装过程。
2.3.1 仅CPU版的dgl安装
在下载好的Visual Studio中,打开x64 Native Tools Command Prompt for VS 2022,并将路径切换为下载到本地的dgl文件夹,依次执行以下命令即可完成安装:
- md build
- cd build
- cmake -DCMAKE_CXX_FLAGS=“/DDGL_EXPORTS” -DCMAKE_CONFIGURATION_TYPES=“Release” -DDMLC_FORCE_SHARED_CRT=ON … -G “Visual Studio 17 2022”
- msbuild dgl.sln /m
- cd your_dgl_path/python
- python setup.py install
注意:
- 若下载的是其它版本的Visual Studio,在执行第3条指令时,需改成相应的版本号,如VisualStudio 2019对应Visual Studio 16 2019
- 通过此方法安装的dgl,在使用python声明调用该包时,需向python添加指向该包的系统路径
2.3.2 CUDA版的dgl安装(以CUDA 12.3.2为例)
在进行CUDA版本安装前,需确定当前系统所使用的CUDA版本(可通过执行命令nvidia-smi
进行查阅)。接着可以在https://docs.nvidia.com/cuda/archive/找到相应CUDA版本所支持的Visual Studio。以CUDA 12.3.2为例,下载并解压相应的Archived Documentation
,在cuda-installation-guide-microsoft-windows
文件夹下点击index.html
打开网页,获得如下图所示信息:
从表中可知,CUDA 12.3仅支持VisualStudio 2022 17.0版本,若使用最新的VisualStudio 2022 17.x,则在安装dgl时会发生如下报错:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.3\include\crt/host_config.h(164): fatal error C1189: #error: – unsupported Microsoft Visual Studio version! Only the versions between 2017 and 2022 (inclusive) are supported! The nvcc flag ‘-allow-unsupported-compiler’ can be used to override this version check; however, using an unsupported host compiler may cause compilation failure or incorrect run time execution.
当前最新的CUDA 12.6已支持VisualStudio 2022 17.x,但若是使用更早版本的CUDA,建议安装VisualStudio 2019 16.x。然而目前从Visual Studio官网上暂时下载不了2019版本,这里放一个可直接下载Visual Studio 2019 (Community)的链接:https://aka.ms/vs/16/release/vs_community.exe。
以上环境配置好后即可着手进行dgl的安装。在下载好的Visual Studio中,打开x64 Native Tools Command Prompt for VS 2019,并将路径切换为下载到本地的dgl文件夹,使用DGL官方提供的下载命令即可完成安装:
- md build
- cd build
- cmake -DCMAKE_CXX_FLAGS=“/DDGL_EXPORTS” -DCMAKE_CONFIGURATION_TYPES=“Release” -DDMLC_FORCE_SHARED_CRT=ON -DUSE_CUDA=ON … -G “Visual Studio 16 2019”
- msbuild dgl.sln /m
- cd your_dgl_path/python
- python setup.py install
注意:
-
CUDA版本的安装过程较长,预计花费约一个小时
-
在执行第4步命令时,可能会出现如下警告,导致安装停滞:
23>D:/Softwares/dgl/third_party/cccl/cub\cub/warp/specializations/warp_exchange_shfl.cuh(1): warning C4819: 璇ユ枃浠跺寘鍚笉鑳藉湪褰撳墠浠g爜椤?936)涓〃绀虹殑瀛楃銆傝灏嗚鏂囦欢淇濆瓨涓?Unicode 鏍煎紡浠ラ槻姝㈡暟鎹涪澶? [D:\Softwares\dgl\build\dgl.vcxproj]
这种乱码的出现可能是因为系统区域设置。解决方法如下:
- 在控制面板中,找到“区域”设置
- 在“管理”选项卡下找到并勾选“为全局系统启用 UTF-8 支持”
-
若某一警告反复出现(以C4244为例),导致安装停滞,可以在
your_path_to_dgl/CMakeLists.txt
中找到以下命令:if (MSVC) add_definitions(-DWIN32_LEAN_AND_MEAN) add_definitions(-D_CRT_SECURE_NO_WARNINGS) add_definitions(-D_SCL_SECURE_NO_WARNINGS) add_definitions(-DNOMINMAX) set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS 1) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}/bigobj")
在后面添加
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc /MP /wd4244")
,保存并关闭CMakeLists.txt,重新启动安装即可忽略此警告。
3. 总结
- 自2024.06之后,DGL团队就不再更新Windows和Mac版本的包,然而使用旧版本的包会出现与torch的兼容性问题,因此若是习惯于Pytorch框架的用户,可以尝试使用PyG (torch-geometric),同样能进行图神经网络的搭建
- 若是一定要用dgl,优先考虑在Linux上安装。当然通过2.3节的流程,也能实现最新版本dgl在Windows环境的安装,经实测,CPU和CUDA版本均能成功运行并且兼容torch 2.4.x