# ASC22
**Repository Path**: Lucky-duck/ASC22
## Basic Information
- **Project Name**: ASC22
- **Description**: 世界大学生超级计算机竞赛ASC20-21 ASC22项目整理
- **Primary Language**: Python
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-08-02
- **Last Updated**: 2022-08-09
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# ASC20-21/22
#### # 项目介绍
本项目是针对本人做过的ASC20-21/22的某些赛题的整理。
一直以来都想把自己做过的东西踩过的坑记录下来,自己深深感受到当时作为一名小白第一次参加这类超算比赛但是没人指引的痛苦。当时在网上搜索啦很多关于ASC赛题的东西,但是都不够具体,这里我将之前参加比赛积累的一些文档和代码分享出来供以后有需要的小白使用。
还记得刚开始装Linux双系统都折腾了一个多星期。记得第一次搞ASC21里的Presto赛题时编译安装软件的痛苦...小白的痛苦我最懂,大多数新手参加这类比赛刚开始都会缺乏基本的能力但是最坑的是不知道自己缺什么,迷茫到不知道该学什么!他们大多没人指导,我们又是学校第一届参加这类比赛的,很多坑都得自己去踩一踩才能知道。
# Contents
- 给大家的一段话
- [HPL](#hpl)
- [HPCG](#hpcg)
- [gpu-accelerate](#gpu-accelerate)
- [ASC20-21 Presto](#presto)
- [ASC22 Yuan](#yuan)
- [ASC22 Deepmd-kit](#deepmd-kit)
# 给大家的一段话
**赛前准备篇**:
大家在开始比赛前可以花两三天时间学习一下以下基础知识,花两三天时间去学这会节省后面大量的调错时间。
1、关于Shell编程 2020全新shell脚本从入门到精通实战教程:https://www.bilibili.com/video/BV1j541157Sr?p=4
2、linux FHS文件系统(了解就行) https://www.cnblogs.com/ysuwangqiang/p/11341323.html
3、静态库与动态库 https://www.bilibili.com/video/BV1xt4y1S7EH?spm_id_from=333.999.0.0
4、linux环境变量:PATH和LD_LIBRARY_PATH环境变量
5、vim的编辑技巧,如快速移动光标、复制粘贴,以行、列为单位修改
**经验贴**:
2016亚洲超算比赛经验贴 https://www.cnblogs.com/kinsang/p/6838933.html
ASC18世界大学生超算竞赛题目分析以及思路总结 https://blog.csdn.net/baoLidanyang/article/details/79868593?utm_source=app&app_version=4.15.0&code=app_1562916241&uLinkId=usr1mkqgl919blen
**小插件**:
1、浏览器git加速插件(火狐、谷歌都有,主要用于访问国外服务器的git时网速慢的问题,不下载插件也可以,只需要将其中的"github.com"替换为“github.com.cnpmjs.org”速度会大幅提升)
2、浏览器翻译插件(用于阅读英文用)
以上是短期内就能快速掌握的,以下是往后能慢慢学的:
超良心0基础cuda视频(从来没见过这么好的教程) https://www.bilibili.com/video/BV1Sq4y1K7K6?spm_id_from=333.999.0.0
人工智能新手环境搭建指南
anaconda+pytorch+pycharmhttps://www.bilibili.com/video/BV1Kp4y147Rw?p=1&share_medium=android&share_plat=android&share_session_id=f305d81a-4706-4af1-8a98-684790966d39&share_source=QQ&share_tag=s_i×tamp=1636638442&unique_k=f6NfiE
《鸟哥的linux私房菜》网页版
http://linux.vbird.org/linux_basic/
往年赛题介绍及相关数据:
http://asc-events.org/ASC20-21/Preliminary.php
# HPL
以下各赛题的代码及文档都已整理至各目录下。
我虚拟机的家目录是/home/hunter,可以通过
```
cd ~ && pwd
```
准备目录
```
mkdir /home/zhaoran/content/
mkdir /home/zhaoran/content/src
mkdir /home/zhaoran/content/install
```
我们自己上传的压缩包可以上传到src下,自己编译的软件可以安装在install下,分门别类清晰一点。
##安装MPI(可以用MPICH)
将mpich-3.3.tar.gz上传至~/content/src下,进入src目录
```
tar -zxvf mpich-3.3.tar.gz
cd mpich-3.3/
./configure --prefix=/home/zhaoran/content/install/mpich
make
make install
```
设置mpich的可执行文件和动态库的环境变量,
vim ~/.bashrc 在其中添加
```
export PATH=/home/zhaoran/content/install/mpich/bin:$PATH
export LD_LIBRARY_PATH=/home/zhaoran/content/install/mpich/lib:$LD_LIBRARY_PATH
```
激活环境变量并查看是否安装成功
```
source ~/.bashrc
which mpicc
```
##安装线性代数库(该种库有很多,这里我们用openblas)
将OpenBLAS-0.3.6.tar.gz上传至~/content/src下,进入src目录
```
tar -zxvf OpenBLAS-0.3.6.tar.gz
cd OpenBLAS-0.3.6/
make
make PREFIX=/home/zhaoran/content/install/openblas install
```
##下载并解压HPL(可以参考https://www.cnblogs.com/liu-shaobo/p/13451339.html)
在content下新建01HPL目录,作为第一题的目录,将hpl-2.3.tar.gz上传于此
```
mkdir ~/content/01HPL && cd ~/content/01HPL
tar -zxvf hpl-2.3.tar.gz
cd hpl-2.3/
cp setup/Make.Linux_PII_CBLAS ./ 将makefile文件复制一份至hpl-2.3/下
```
编辑Make.Linux_PII_CBLAS文件,以下是我的配置
```
SHELL = /bin/sh
CD = cd
CP = cp
LN_S = ln -s
MKDIR = mkdir
RM = /bin/rm -f
TOUCH = touch
ARCH = Linux_PII_CBLAS
TOPdir = /home/zhaoran/content/01HPL/hpl-2.3
INCdir = $(TOPdir)/include
BINdir = $(TOPdir)/bin/$(ARCH)
LIBdir = $(TOPdir)/lib/$(ARCH)
HPLlib = $(LIBdir)/libhpl.a
MPdir = /home/zhaoran/content/install/mpich
MPinc = -I$(MPdir)/include
MPlib = $(MPdir)/lib/libmpich.so
LAdir = /home/zhaoran/content/install/openblas/lib
LAinc =
LAlib = $(LAdir)/libopenblas.a
HPL_INCLUDES = -I$(INCdir) -I$(INCdir)/$(ARCH) $(LAinc) $(MPinc)
HPL_LIBS = $(HPLlib) $(LAlib) $(MPlib) -lpthread
HPL_OPTS = -DHPL_CALL_CBLAS
HPL_DEFS = $(F2CDEFS) $(HPL_OPTS) $(HPL_INCLUDES)
CC = ~/content/install/mpich/bin/mpicc
CCNOOPT = $(HPL_DEFS)
CCFLAGS = $(HPL_DEFS) -fomit-frame-pointer -O3 -funroll-loops
LINKER = ~/content/install/mpich/bin/mpif77
LINKFLAGS = $(CCFLAGS)
ARCHIVER = ar
ARFLAGS = r
RANLIB = echo
```
编译HPL
```
make arch=Linux_PII_CBLAS
```
成功后就会在bin下出现Linux_PII_CBLAS目录,其下有HPL.dat 和xhpl
测试HPL
```
mpirun -np 4 ./xhpl > HPL-Benchmark.txt
```
HPL.dat文件参考如下
https://www.advancedclustering.com/act_kb/tune-hpl-dat-file
mpirun的np值要等于HPL.dat的(P x Q)值
**我们要找到最优的HPL.dat配置参数,以达到最高的浮点计算数值**
# HPCG
基于曙光平台的HPCG测试
module rm mpi/hpcx/2.7.4/gcc-7.3.1
module load mpi/intelmpi/2017.4.239
##HPCG配置
```
git clone https://gitee.com/ZhenDu_ICT/hpcg.git
cd hpcg
cp setup/Make.MPI_ICPC .
```
这里我们使用平台自带的intel的mpi库
编辑Make.MPI_ICPC,改动如下
```
TOPdir = /public/home/acg8dv00lw/cuirongpei/content/asc21/02HPCG/hpcg
MPdir = /public/software/mpi/intel/mpi/2017.4.239/intel64
MPinc =
MPlib = $(MPdir)/lib/libmpi.so
CXX = /public/software/mpi/intel/mpi/2017.4.239/intel64/bin/mpiicc
```
MPdir = /public/software/mpi/intel/mpi/2017.4.239/intel64
具体参考https://blog.csdn.net/wongnoubo/article/details/79535283?utm_source=app&app_version=4.18.0&code=app_1562916241&uLinkId=usr1mkqgl919blen
## gpu-accelerate
```
tar -zxvf hpl-2.0_FERMI_v15.tgz
cd hpl-2.0_FERMI_v15
```
#上传Make.CUDA,修改run_linpack
```
export PATH=/user-data/openmpi/bin:$PATH
export LD_LIBRARY_PATH=/user-data/openmpi/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/user-data/myData/mkl/lib/intel64:$LD_LIBRARY_PATH
cd /user-data/myData/hpl-2.0_FERMI_v15/bin/CUDA/
vim HPL.dat
```
```
mpirun -np 4 -bysocket -bind-to-socket ./run_linpack
mpirun -np 8 -bysocket -bind-to-socket ./run_linpack
```
# ASC20-21 Presto
#在Ubuntu虚拟机安装天文学工具presto
##参考链接
```
https://blog.csdn.net/sinat_34850075/article/details/52434526?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163851418816780274142149%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=163851418816780274142149&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-3-52434526.pc_search_mgc_flag&utm_term=Presto%E8%84%89%E5%86%B2%E6%98%9F&spm=1018.2226.3001.4187
```
这个是我安装presto时参考的一个链接,在编译安装presto时首先应该查看其官方编写的INSTALL.md文档。
***对于ASC比赛,我们如果能在超算上这种优化应用类题目成功部署且能跑通已经是非常可以的了***
这个软件编译起来相当麻烦,但是掌握一些linux基础知识在虚拟机上还是可以轻松拿下的。但是在什么上跑通显得至关重要,由于超算集群环境变量的复杂性和特殊性,没有root权限等棘手的问题,很多只需要在虚拟机或者双系统上一行命令就能解决的问题,在超算上就变得尤为棘手,现在希望大家能在自己电脑上安装好,这是最基本的。
***部署优先级:1、超算集群 2、linux双系统(因为虚拟机不能用gpu)3、虚拟机***
大家创建文件夹命名时目录尽量和我一样,这样就可以直接复制我的命令运行了,现在只是让大家了解大致的流程。
#准备目录
```
mkdir -p /home/m/astrosoft/cfitsio /home/m/astrosoft/cfitsio/fftw3 /home/m/astrosoft/pgplot
mkdir -p /home/m/astrostud
mkdir -p /home/m/Download
mkdir -p /home/m/tempo
```
#准备presto源码
```
cd /home/m/astrosoft/
git clone git://github.com/scottransom/presto.git
```
若git访问不了或者网速特别慢,可以将github.com替换成github.com.cnpmjs.org这是github的镜像,这个技巧在访问不了外网的服务器上很有效
#安装FFTW
```
cd /home/m/Download
wget www.fftw.org/fftw-3.3.5.tar.gz
tar -zxvf fftw-3.3.5.tar.gz
cd fftw-3.3.5
./configure --enable-shared --enable-single --prefix=/home/m/astrosoft/fftw3
make
make install
```
#安装pgplot
```
cd /home/m/Download
wget ftp://ftp.astro.caltech.edu/pub/pgplot/pgplot5.2.tar.gz
tar -zxvf pgplot5.2.tar.gz
cd pgplot
vi drivers.list
此处presto要求必选设备有PS和X-windows设备,另外还可以加上VPS、CPS和VCPS设备。(将前面的“!”去掉)
./makemake /home/m/Download/pgplot linux g77_gcc
vim makefile(将其中的FCOMPL=g77修改为FCOMPL=gfortran)
make
make cpg
```
#安装tempo
```
cd /home/m/Download
git clone git://git.code.sf.net/p/tempo/tempo
cp -r /home/m/tempo /home/m/psrsoft/tempo
cd /home/m/astrosoft/tempo
./prepare
./configure --prefix=/home/m/astrosoft/tempo
make
make install
```
#安装glib2
```
sudo apt-get install update
sudo apt-get install glib2-devel
```
#安装cfitsio
```
cd /home/m/Download/
tar -zxvf cfitsio-4.0.0.tar.gz
cd cfitsio-4.0.0
./configure --prefix=/home/m/astrosoft/cfitsio
make && make install
```
至此安装tempo之前的各种软件就已经安装完成了。
修改环境变量
vim ~/.bashrc 可以直接将我的复制进去
```
PATH=$PATH:$HOME/bin:/home/m/astrosoft/presto/bin:/home/m/astrosoft/pgplot/bin:/home/m/astrosoft/presto/bin:/nfshome/mcc/pfits:/home/m/astrosoft/optimus:/home/m/astrosoft/fv:/home/m/astrosoft/psrcat_tar:/home/m/astrosoft/tempo/src/
LD_LIBRARY_PATH=/home/m/astrosoft/presto/lib:/home/m/astrosoft/pgplot:/home/m/astrosoft/fftw3/lib:/home/m/astrosoft/cfitsio/lib
C_INCLUDE_PATH=/home/m/astrosoft/presto/include:/home/m/astrosoft/cfitsio/include
PKG_CONFIG_PATH=/home/m/astrosoft/cfitsio/lib/pkgconfig:/home/m/astrosoft/fftw3/lib/pkgconfig
PYTHONPATH=/home/m/astrosoft/presto/lib/python
PGPLOT_DIR=/home/m/astrosoft/pgplot
PGPLOT_FONT=/home/m/astrosoft/pgplot/grfont.dat
PGPLOT_DEV=/xwine
PGPLOT_LIB="-L /usr/X11R6/lib -lX11 -L /home/m/astrosoft/pgplot -lpgplot"
PRESTO=/home/m/astrosoft/presto
TEMPO=/home/m/astrosoft/tempo
PSRCAT_FILE=/home/m/astrosoft/psrcat_tar/psrcat.db
export PATH
export LD_LIBRARY_PATH
export C_INCLUDE_PATH
export PKG_CONFIG_PATH
export PYTHONPATH
export PGPLOT_DIR
export PGPLOT_FONT
export PGPLOT_DEV
export PGPLOT_LIB
export PRESTO
export TEMPO
export PSRCAT_FILE
```
激活刚修改的环境变量
```
source ~/.bashrc
```
#编译presto
```
cd /home/m/astrosoft/presto/src
make makewisdom 这一步时间有点长
cp fftw_wisdom.txt /home/m/astrosoft/presto/lib
make prep
make
make mpi
```
#安装presto的python模块
```
cd $PRESTO
pip install scipy
pip install numpy
```
#测试是否安装成功
```
python3 tests/test_presto_python.py
```

测试成功!
#运行比赛要求的数据集(https://www.dazhuanlan.com/magicdmer/topics/1564509)这是我参考的,我实在没找到赛题里面说的那个pipeline.py和那两个数据集在哪里下载
```
cd /home/m/astrosoft/presto/
mkdir test1
wget http://www.cv.nrao.edu/~sransom/GBT_Lband_PSR.fil
readfile GBT_Lband_PSR.fil
rfifind -time 2.0 -o Lband GBT_Lband_PSR.fil
prepfold -p 0.004621638 -dm 62.0 GBT_Lband_PSR.fil
```
成功后会出现一些信息和图片,看不懂。。应该是脉冲星搜索的东西?
# ASC22 Yuan
新git一份源码
https://github.com/Shawn-Inspur/Yuan-1.0
## 进入src目录下的tools文件夹
```
ssh g101n02
conda activate kkkc
cd cd chensen/Yuan-1.0-main/src/tools/
python preprocess_data_cn.py
```
`python preprocess_data_cn.py`
需要修改一些文件夹的路径
`--input:`改为自己放数据的地方,我放到`/gpfs1/home/nc/hpc5/chensen/Yuan-1.0-main/src/data/`下了
`--vocab_path:`词表的位置,默认为./,为当前目录下,将src下的vocab.txt复制到tools文件夹下即可。
`--output_path:`处理完数据后放的路径,处理好的数据是.bin文件,`default`的路径不存在,自己把响应的文件夹建好就行
大约需要运行50分钟左右,约9亿tokens,在`output_path`路径下会有.bin文件
## 处理完数据后,运行src下的pretrain_yuan_13B.sh
# ASC22 Deepmd-kit
#安装deepmd-kit依赖 && 训练模型
##安装依赖(该源码所需要的依赖我已安装好,以下是我之前安装的步骤)
在登录节点进行:
激活虚拟环境(tensorflow1.14 rocm-2.9 python3.6)
曙光平台搭建虚拟环境的具体流程可以另一个文档
```
source ~/tf1.14.sh
cd /public/home/cuirongpei/asc22/04deepmd/deepmd01/deepmd-kit
DP_VARIANT=ROCM
pip install . -i https://pypi.douban.com/simple/
dp -h
```
成功显示信息即可
##训练模型(我的数据集放在~/test/copper)
申请并进入计算节点
```
salloc -N 1 -n 32 -p kshdtest --gres=dcu:4
ssh "xxxxx"
source ~/tf1.14.sh
cd /public/home/cuirongpei/test/copper
dp train input.json
```
新打开一个eshell,ssh 进入刚刚的计算节点
```
rocm-smi
```
可以看到只有一个dcu工作
source /public/home/cuirongpei/asc22/04deepmd/deepmd01/deepmd-kit/tensorflow_venv/bin/activate
dp freeze -o graph.pb
dp test -m graph.pb -s /user-data/copper/data/cu.bcc.02x02x02