commit files
Python版本需要3.7及以上。
安装Python依赖包和系统的OpenCV库
pip3 install -r requirements.txt sudo apt update sudo apt install python3-opencv
用如下命令安装Python依赖包,除torch和torchvision外都会安装成功。
cat requirements.txt | sed -e '/^\s*#.*$/d' -e '/^\s*$/d' | xargs -n 1 pip install
下载安装torch和torchvision的wheel
wget https://github.com/zsnjuts/pytorch-armv7l/archive/refs/tags/v1.0.zip unzip v1.0.zip pip3 install pytorch-armv7l-1.0/torch-1.7.0a0-cp37-cp37m-linux_armv7l.whl pip3 install pytorch-armv7l-1.0/torchvision-0.8.0a0+45f960c-cp37-cp37m-linux_armv7l.whl rm -rf pytorch-armv7l-1.0/ v1.0.zip
安装系统的依赖库
sudo apt update sudo apt install libatlas-base-dev libopenblas-dev python3-opencv python3-numpy python3-scipy
要确保如下的设备访问路径可行,即client可以通过特定的IP端口号访问到相应的server。
虽然Worker也会作为client请求Master,但是系统内部通过grpc的流式回复实现了这一功能,所以无需配置。
使用 cgroup 和 tc 对指定进程进行限速。基本原理就是,tc对指定cgroup的所有进程限制总带宽为一个特定值。这里我们只需要对一个进程限速,所以cgroup中只会有一个进程。
tc系统自带,只需安装cgroup工具,以便使用cgexec命令。
sudo apt install cgroup-tools
对网卡wlan0创建带宽上限为1MB/s的cgroup命令如下:
# 在net_cls下创建名为mylim的cgroup cd /sys/fs/cgroup/net_cls/ sudo su mkdir mylim cd mylim/ echo 0x10010 > net_cls.classid # 创建对于wlan0网卡的root规则,qdisc编号为1 tc qdisc add dev wlan0 root handle 1: htb # 添加过滤器,使用cgroup号作为class tc filter add dev wlan0 parent 1: handle 1: cgroup # 添加class,cgroup号为1:10的进程网速限制为1MB/s tc class add dev wlan0 parent 1: classid 1:10 htb rate 1mbps
上述命令已封装在tool/set_net_lim.sh里,使用方法:
bash tool/set_net_lim.sh <带宽上限, 单位MB/s>
如bash tool/set_net_lim.sh 4表示创建一个名为mylim的cgroup,这个cgroup下面的进程带宽上限为4MB/s.
bash tool/set_net_lim.sh 4
cgroup配置关机以后会失效。
因为树莓派经常开关机,所以可以把上述的cgroup配置脚本配置到开机启动项中。
以带宽上限为4MB/s为例,在/etc/rc.local文件的exit 0前添加如下代码,相应的log文件会记录配置后的所有tc class。
exit 0
bash /home/pi/cnn-video/tool/set_net_lim.sh 4 > /home/pi/cnn-video/tool/set_net_lim.log
查看设备wlan0上已有的规则(输出的Mbit表示Mbit/s,除以8为MB/s)
tc class ls dev wlan0
修改规则中的限速为4MB/s(把上面添加命令中的add改成change,1mbps改成4mbps)
sudo tc class change dev wlan0 parent 1: classid 1:10 htb rate 4mbps
以启动worker0为例,命令如下(即lim_net_start.sh)
sudo -E PATH=$PATH PYTHONPATH=$(python -c "import sys; print(':'.join(sys.path))") cgexec -g net_cls:mylim /usr/bin/python3.7 main.py worker -i 0
cgexec -g net_cls:mylim 指定后面的命令启动的进程运行在net_cls下的mylim这个cgroup中
cgexec -g net_cls:mylim
cgexec需要sudo权限,但是因为Python的包都是安装在当前用户下而不是系统安装,所以root用户目录下运行python会找不到很多包。所以这里要设置PATH和PYTHONPATH(就是sys.path)告诉解释器从哪里加载包。此外,sudo的E选项表示运行后面命令时保留当前的环境变量。
sys.path
同样使用cgroup进行限制。比如限制mylim下的进程CPU占用率为40%,即只能使用一个核的40%(8个核总共可以用800%),使用如下代码
cd /sys/fs/cgroup/cpu,cpuacct sudo mkdir mylim cd mylim # quota为时间周期长度内能使用的CPU时间,单位微秒(us) echo 100000 > cpu.cfs_quota_us # period为时间周期长度,单位微秒(us) echo 250000 > cpu.cfs_period_us
类似地,在该cgroup中启动,命令如下(即lim_cpu_start.sh)
sudo -E PATH="$PATH" PYTHONPATH=$(python -c "import sys; print(':'.join(sys.path))") cgexec -g cpu,cpuacct:mylim /usr/bin/python3 main.py "$@"
网络就绪后,就可以运行实验了。
首先在rpc目录下运行脚本msg_compile.cmd,生成grpc文件。
然后在config.yml中填写相关配置。
启动Trainer
python3 main.py trainer
如果不限速直接启动各个Worker,如Worker0:
python3 main.py worker -i 0
如果已经按照之前所述的方法配置了cgroup和tc规则,并且要限制Worker0的出站速度,则通过lim_start.sh进行启动,命令如下:
/bin/bash lim_start.sh worker -i 0
最后启动Master(注意Master要在Worker和Trainer之后启动)
python3 main.py master
类似地,要限速的话,命令是:
/bin/bash lim_start.sh master
小tip:如果想把执行lim_start.sh配置到PyCharm的Run/Debug Configuration中的话,可以添加一个SSH的Python解释器,但是这个Python解释器的路径设置成/bin/bash。其他的都和远程执行Python脚本一样。
用于评估冷冻电镜三维重构局部分辨率的工具。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
使用说明
环境配置
Python版本需要3.7及以上。
Ubuntu
安装Python依赖包和系统的OpenCV库
树莓派
用如下命令安装Python依赖包,除torch和torchvision外都会安装成功。
下载安装torch和torchvision的wheel
安装系统的依赖库
网络配置
拓扑结构
要确保如下的设备访问路径可行,即client可以通过特定的IP端口号访问到相应的server。
虽然Worker也会作为client请求Master,但是系统内部通过grpc的流式回复实现了这一功能,所以无需配置。
网络限速
使用 cgroup 和 tc 对指定进程进行限速。基本原理就是,tc对指定cgroup的所有进程限制总带宽为一个特定值。这里我们只需要对一个进程限速,所以cgroup中只会有一个进程。
安装
tc系统自带,只需安装cgroup工具,以便使用cgexec命令。
创建cgroup和tc规则
创建命令
对网卡wlan0创建带宽上限为1MB/s的cgroup命令如下:
上述命令已封装在tool/set_net_lim.sh里,使用方法:
如
bash tool/set_net_lim.sh 4表示创建一个名为mylim的cgroup,这个cgroup下面的进程带宽上限为4MB/s.开机自动配置
cgroup配置关机以后会失效。
因为树莓派经常开关机,所以可以把上述的cgroup配置脚本配置到开机启动项中。
以带宽上限为4MB/s为例,在/etc/rc.local文件的
exit 0前添加如下代码,相应的log文件会记录配置后的所有tc class。相关命令
查看设备wlan0上已有的规则(输出的Mbit表示Mbit/s,除以8为MB/s)
修改规则中的限速为4MB/s(把上面添加命令中的add改成change,1mbps改成4mbps)
把服务运行在指定cgroup中
以启动worker0为例,命令如下(即lim_net_start.sh)
cgexec -g net_cls:mylim指定后面的命令启动的进程运行在net_cls下的mylim这个cgroup中cgexec需要sudo权限,但是因为Python的包都是安装在当前用户下而不是系统安装,所以root用户目录下运行python会找不到很多包。所以这里要设置PATH和PYTHONPATH(就是
sys.path)告诉解释器从哪里加载包。此外,sudo的E选项表示运行后面命令时保留当前的环境变量。CPU限制
同样使用cgroup进行限制。比如限制mylim下的进程CPU占用率为40%,即只能使用一个核的40%(8个核总共可以用800%),使用如下代码
类似地,在该cgroup中启动,命令如下(即lim_cpu_start.sh)
运行实验
网络就绪后,就可以运行实验了。
首先在rpc目录下运行脚本msg_compile.cmd,生成grpc文件。
然后在config.yml中填写相关配置。
启动Trainer
如果不限速直接启动各个Worker,如Worker0:
如果已经按照之前所述的方法配置了cgroup和tc规则,并且要限制Worker0的出站速度,则通过lim_start.sh进行启动,命令如下:
最后启动Master(注意Master要在Worker和Trainer之后启动)
类似地,要限速的话,命令是: