IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> 分布式GNN系统环境配置 -> 正文阅读

[开发工具]分布式GNN系统环境配置

DL环境

Anaconda

由于已经有部分机器已经安装了anaconda,同时有安装包,所以直接将其他包传输到所需机器上

scp命令

利用scp文件传输
scp Anaconda3-2021.05-Linux-x86_64.sh name@192.168.1.11:/home/name

使用scp传文件时出现“ECDSA host key for 。。。 has changed and you have requested strict checking.Host key verification fail”
解决方案:应该是远程服务器缓存问题,参考link

安装anaconda

直接按照此链接安装

conda 虚拟环境命名

参考Anaconda——如何“重命名”conda虚拟环境(通过复制和删除操作实现)

创建虚拟环境安装pytorch1.9.

链接

conda install pytorch==1.9.0 torchvision torchaudio cudatoolkit=11.1 -c pytorch -c conda-forge

最好不要规定torchvision跟torchaudio的版本,不然有可能对应不上,从而在验证

torch.cuda.is_available()时出现false

!!!由于中间服务器被其他人使用过,使用conda install时一直出现

CondaHTTPError: HTTP 000 CONNECTION
在网上查找时基本上都是让换源,相关操作有
vim ~/.condarc
conda config --show channels
conda config --add channels
conda config --set show_channel_urls yes
conda config –remove channels
但是基本上都不管用,于是就ping了下百度域名,提示出现bad address,ping百度ip却能ping通,这个时候才知道原来是DNS解析失败
基本的解决方案可以查看linuxUbuntu解决DNS问题,无法解析域名,修改nameserver之后就可以了

!!!conda现在安装的时候可能出现

PackagesNotFoundError: The following packages are not available from current channels

查了一下可能是channel的问题,link1,link2
这个时候需要

conda config --show channels
conda config --add channels conda-forge

另外还遇到了

conda创建环境报错:NotWritableError: The current user does not have write permissions to a required path.

查了一下是权限的问题,按照link即可解决

安装DGL库

关于图网络,最近看到一个特别不错的blog,link
根据link选择合适版本的dgl,我们选用cuda11.1,运行
conda install -c dglteam dgl-cuda11.1

配置VScode远程调试

Vscode配置link

!!!配置anaconda环境

1.打开setting.json,参考link
2.配置setting文件,很早之前配的如下
也可参考link上述配置信息标点及文件位置需要替换

    "python.condaPath":"~/.conda/envs/tf12/bin/conda",
    "python.pythonPath":"~/.conda/envs/tf12/bin/python3.6",
    "python.autoComplete.extraPaths": [
        "~/.conda/envs/tf12/bin/python"
    ],
    "python.autoComplete.addBrackets": true,
    "python.jediEnabled": false,
    "remote.SSH.showLoginTerminal": true,
    "workbench.editorAssociations": {
        "*.ipynb": "jupyter-notebook"
    },
    "python.defaultInterpreterPath": "~/.conda/envs/tf12/bin/python3.6",
    "python.analysis.extraPaths": [
        "~/.conda/envs/tf12/bin/python"
    ],
    "python.analysis.completeFunctionParens": true,
    "notebook.cellToolbarLocation": {
        "default": "right",
        "jupyter-notebook": "left"
    },
    "python.languageServer": "Microsoft",
    "window.zoomLevel": -1,
    "editor.fontSize": 15

配置debug的输入参数

查看vscode 调试python代码时添加参数(args)

分布式环境

根据dgl提供的tutorial进行分布式环境搭建,Distributed Node Classification

数据集处理

下载

数据集下载直接从ogb包下载,

from ogb.nodeproppred import DglNodePropPredDataset
data = DglNodePropPredDataset(name='ogbn-products')

图分割

dgl采用METIS库,具体调用使用

 dgl.distributed.partition_graph(graph, graph_name='ogbn-products', num_parts=2,
                                 out_path='2part_data',
                                 balance_ntypes=graph.ndata['train_mask'],
                                 balance_edges=True)

其中若想自定义切割,官方也提供了方法
主要是要一步步安装GKLib,METIS,ParMETIS库,这些库都是相互依赖的,详细链接为ParMETIS Installation
具体安装步骤大部分都为先

git github_url.git
make config [可加其他参数]
make install

自己的理解:其中make config应该是配置cmake 的编译器,如gcc,mpicc等以及编译环境等等之类的参数,最后使用make install在config中目标目录下生成可执行文件。
没有相关编译器使用

sudo apt-get install xxx

最后将METIS,ParMETIS安装路径添加到环境变量中(export balabala)
按照dgl文档说明的,先要将图的分割方案写成三个.txt文件,分别为xxx_nodes.txt,xxx_edges.txt,xxx_stats.txt,使用命令

mpirun -np 4 pm_dglpart xxx 2

对数据集进行切割,其中的参数可以再dgl文档中查看
最后使用dgl提供的convert.py将ParMETIS切完后的图转换为dgl统一的图结构。

文件共享环境

dgl采用NFS来共享文件

Server端

首先在server上安装

sudo apt-get install nfs-kernel-server

然后将数据集区(切完的图)共享出来
最后配置/etc/exports

内容格式为

<输出目录> [客户端1 选项(访问权限,用户映射,其他)] [客户端2 选项(访问权限,用户映射,其他)]

例如:

/home/ubuntu/workspace  192.168.0.0/16(rw,sync,no_subtree_check)

最后完成配置

sudo systemctl restart nfs-kernel-server

client端

安装

sudo apt-get install nfs-common

然后指定客户端及共享目录

sudo mount -t nfs <nfs-server-ip>:/home/ubuntu/workspace /home/ubuntu/workspace

前面是server目录,后面是client端的目录
最后

sudo mount -a

ok,现在就可以在client端访问server共享的文件了。

SSH免密访问

按照文档How to Setup Passwordless SSH Login进行操作即可
查看ssh key pair是否存在

ls -al ~/.ssh/id_*.pub

若不存在,生成SSH key pair并发送至邮箱

ssh-keygen -t rsa -b 4096 -C "your_email@domain.com"

查看是否生成成功

ls ~/.ssh/id_*

将密码发送至server端

ssh-copy-id remote_username@server_ip_address

如果ssh-copy-id无法使用,试试

cat ~/.ssh/id_rsa.pub | ssh remote_username@server_ip_address "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

此时即可无密码访问server端

一些问题

在运行分布式的命令

python3 ~/workspace/dgl/tools/launch.py   --workspace ~/workspace/   --num_trainers 1   --num_samplers 0   --num_servers 1   --part_config 4part_data/ogbn-products.json   --ip_config ip_config.txt   "python3 train_dist.py"

遇到了各种问题

相关包没有安装

pip install ogb
conda install scikit-learn

Failed bind on 192.168.1.7:30050 , error: Address already in use

这个问题主要是调试的时候30050(dgl默认端口)端口一直在被占用,所以会报错,把相关进程kill掉即可
查看所有端口占用

sudo netstat -nultp

查看特定端口占用

sudo netstat -anp |grep 22

bash conda: command not found

这个问题好像是通过ssh连的时候会连到一个奇怪的位置,这里面的python版本是2.7,应该是系统自带的python环境,通过在launch.py中添加source anaconda位置解决了,但是依然出现一些问题,例如以下这个:

/usr/bin/python: No module named torch.distributed

这个问题给我的感觉是进程运行的环境不对,它直接定位到了系统自带的python环境,而我的python环境均安装在conda环境中了,dgl的launch.py中有一个选项是

    parser.add_argument('--extra_envs', nargs='+', type=str, default=[],
                        help='Extra environment parameters need to be set. For example, \
                        you can set the LD_LIBRARY_PATH and NCCL_DEBUG by adding: \
                        --extra_envs LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH NCCL_DEBUG=INFO ')

其中关于这个nargs的使用可以参考argparse模块用法实例详解,这里面需要把这个参数放在中间位置,因为它会将最后的“python xxx.py”也当成参数的一部分了暂时还不知道怎么让他停止读参只能改变顺序以下个传递参数为终止。
于是我就想通过这个参数将conda的环境变量加进去,

export PATH=$PATH:/home/username/anaconda3/bin

通过这种方法(export不用加因为launch.py会自动加)让它知道conda的路径,但是这样还是会报一样的错。
最后将server对client端的命令抓取出来发现,该命令为

ssh -o StrictHostKeyChecking=no -p 22 192.168.1.7 'cd /home/amax/gnn-tutorial/distributed_node_classification; (export DGL_ROLE=server DGL_NUM_SAMPLER=0 OMP_NUM_THREADS=1 DGL_NUM_CLIENT=2 DGL_CONF_PATH=2part_data/ogbn-products.json DGL_IP_CONFIG=ip_config.txt DGL_NUM_SERVER=1 DGL_GRAPH_FORMAT=csc  DGL_SERVER_ID=0; source activate torch;python main.py

尝试将引号里的内容直接在client端跑,其中只有一台机器出现等待链接,其他机器一直在报如下错

/opt/dgl/src/rpc/network/tcp_socket.cc:76: Failed bind on 192.168.1.9:30050 , error: Cannot assign requested address

这个问题查的时候说是端口占用,但是输入

sudo netstat -anp |grep 30050

时发现端口并没有被占用,而将ipconfig中的端口号更改之后还是会报一样的错误。

TensorDispatcher: dlopen failed: libtorch_cuda_cpp.so: cannot open shared object file: No such file or directory

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-11-11 12:55:00  更:2021-11-11 12:55:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 20:30:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码