Windows环境下安装最新版本的DGL

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 StudioCmake。接下来将分别介绍CPUCUDA版本的dgl安装过程。

2.3.1 仅CPU版的dgl安装

在下载好的Visual Studio中,打开x64 Native Tools Command Prompt for VS 2022,并将路径切换为下载到本地的dgl文件夹,依次执行以下命令即可完成安装:

  1. md build
  2. cd build
  3. cmake -DCMAKE_CXX_FLAGS=“/DDGL_EXPORTS” -DCMAKE_CONFIGURATION_TYPES=“Release” -DDMLC_FORCE_SHARED_CRT=ON … -G “Visual Studio 17 2022”
  4. msbuild dgl.sln /m
  5. cd your_dgl_path/python
  6. 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官方提供的下载命令即可完成安装:

  1. md build
  2. cd build
  3. cmake -DCMAKE_CXX_FLAGS=“/DDGL_EXPORTS” -DCMAKE_CONFIGURATION_TYPES=“Release” -DDMLC_FORCE_SHARED_CRT=ON -DUSE_CUDA=ON … -G “Visual Studio 16 2019”
  4. msbuild dgl.sln /m
  5. cd your_dgl_path/python
  6. 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]

    这种乱码的出现可能是因为系统区域设置。解决方法如下:

    1. 在控制面板中,找到“区域”设置
    2. 在“管理”选项卡下找到并勾选“为全局系统启用 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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值