当cloudlab有多个节点需要配置环境时,手动配置过于麻烦,可以执行脚本来统一配置 1.登录其中一个节点,生成公钥,将这个节点 公钥添加到cloudlab ![image.png](https://might-image-bed.oss-cn-hangzhou.aliyuncs.com/imgbed/20241001112455.png) 此时可以通过node0来登录其他所有的node

2.编写每个节点配置环境的脚本,放在共享目录下
比如脚本为
image.png
可以放在
/proj/nsccgz-storage-PG0/exp/

3.在node0编写执行脚本,脚本来源自永锋师兄

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/bin/bash

set -x
server_hosts=(
"node0"
"node1"
"node2"
"node3"
"node4"
"node5"
"node6"
"node7"
"node8"
"node9"
"node10"
"node11"
"node12"
"node13"
"node14"
"node15"
)

init_session_name="init_tmux"

for server_host in "${server_hosts[@]}"
do
ssh-keyscan ${server_host} >> ~/.ssh/known_hosts
echo "server_host: $server_host"
ssh -o StrictHostKeyChecking=no $server_host /bin/bash <<EOF
set -x
cat /etc/hostname;
tmux kill-session -t ${init_session_name} 2>/dev/null || true;
tmux new-session -d -s ${init_session_name};
tmux send-keys -t ${init_session_name} "/proj/nsccgz-storage-PG0/shs_data/set_cloudlab.sh >> /proj/nsccgz-storage-PG0/shs_data/set_cloudlab_output.log 2>&1" C-m;
EOF
done

4.在node0执行这个脚本

MPI程序配置
数据都放在/proj/nsccgz-storage-PG0/GraphData/
代码进行了修改放在/proj/nsccgz-storage-PG0/exp/DC/GeminiGraph/
配置脚本在/proj/nsccgz-storage-PG0/exp/DC/scripts/set_cloudlab.sh
执行配置的脚本如上所示

1
2
3
4
5
6
7
mpirun -np 4 --hosts node1,node2,node3,node4 ~/GeminiGraph/toolkits/pagerank /proj/nsccgz-storage-PG0/shs_data/rMat24Bin 16800000 1

mpirun -np 16 --hostfile hostfile ~/GeminiGraph/toolkits/pagerank /proj/nsccgz-storage-PG0/shs_data/rMat24Bin 16800000 1

mpirun -np 4 --hosts node1,node2,node3,node4 ~/GeminiGraph/toolkits/pagerank /proj/nsccgz-storage-PG0/shs_data/rMat24Bin 16800000 1


在cloudlab添加公钥后要等一会公钥才会添加到各个节点,且之后如果直接ssh会没有权限,应该是没有加入known_hosts,可以跑一下init脚本,脚本里面会加入known_hosts
所以执行mpi发现没有权限的情况就是没有加入known_hosts

现在把cloudlab的数据都放在/proj/nsccgz-storage-PG0/shs_data
需要先在node0创建公钥,加入到cloudlab