SKA Pipeline课题个人心得本🗒️
环境搭建:
若在完全体conda的环境下,程序的运行仍需要依赖如下packages:
- fpipe, src
- pygsm, src
- caput, src
- tlpipe, src
- healpy, pip or conda
- astroquery, pip or conda
- reproject, pip or conda
- cora, src
上面的packages里,
src 代表是从源码安装;
pip or conda 代表直接从pip或者conda官方库安装即可
安装所需要的源码路径(orchid服务器):/home/wangyue/workspace/
cd到具体的目录下,输入安装指令:
python setup.py install
即可完成安装。
需要注意的几个包:
- tlpipe:
当你使用了python3.9及以上的时候,python的c-api接口中的"tp_print"改为了"tp_vectorcall_offset",可参考:🙋戳我. 所以你需要修改源码,以达到与python39的适配,要不然安装时会报错!
修改文件路径:<where you store the src codes>/tlpipe/tlpipe/rfi/_sum_threshold.c
修改行数:20078, 20083, 20095, 20105,将这几行里面的"tp_print"改为"tp_vectorcall_offset",再次执行install指令,即可成功。
- caput:
可能是因为版本或者其他的原因,该源码内有一文件在运行整个pipeline的时候会报错,报错具体内容为:
其报错的文件具体路径为:<where you store the src codes>/caput/caput/mpiutil.py,行数为174行UnboundLocalError: local variable "rank' referenced before assignment
具体内容(第168-174行):
可以看到,该代码使用了"if comm is not None"的判断,而实际上,在我们测试的执行脚本里,comm的值就是None,所以程序并不会执行下面的两行对变量rank以及size的赋值操作;但python对变量的赋值顺序遵从LEGB法则(参考链接:🙋戳我,程序会认为if判断里的赋值操作是更优先的,所以虽然我们并没有进行if内的赋值,但仍然让解释器confused,所以可以做如下修改:def partition_list_mpi(full_list, method="con", comm=_comm): """Return the partition of a list specific to the current MPI process.""" if comm is not None: rank = comm.rank size = comm.size return partition_list(full_list, rank, size, method=method)
即可成功执行。def partition_list_mpi(full_list, method="con", comm=_comm): """Return the partition of a list specific to the current MPI process.""" # to avoid reference problem, modified by dingding, 2022.10.30 if comm is not None: rank_tmp = comm.rank size_tmp = comm.size else: rank_tmp = rank size_tmp = size return partition_list(full_list, rank_tmp, size_tmp, method=method)
模块介绍
基于Wang Yue同学之前所修改的python3的survey_sim的code,我所分区、改写的code中的method与其流程图的一一对照关系如下:
程序运行成功的结果图如下:
代理端口快捷使用
我已在orchid服务器搭建了代理,用来加速一些境外数据的下载上传等传输,具体配置如下:
协议:socks5
端口:7730
用户名,密码:无
如想快捷使用,可以考虑使用我已经编译安装好的软件proxychians4
将指令export PATH="/home/gitrepo/luantch/software/bin:$PATH"添加至您目录下~/.bashrc内,然后令其生效即可。
使用方法以及测试:
curl ifconfig.me
将会返回机器真实最外部接口的公网ip
proxychains4 curl ifconfig.me
将会返回代理的外网ip
祝好运!
20230630更新
请记住,tlpipe和caput等等的版本需要对应上才可以工作,笔者实操时候就发现,如果使用tlpipe zuo/python3
的分支,但是依然使用官方的原始版本的caput
,那么在并行的时候就会出现数组切割不统一等问题。所以版本一定要对应好。