本文于2020年10月24日发表于知乎专栏,查看原文
本文于2020年10月24日发表于微信公众号,查看原文
在成功构建libtensorflow_cc后,我们便可以参照之前的方法,构建libdeepmd了。
在deepmd-kit-recipes/libdeepmd-feedstock的recipe/meta.yaml
文件中,我们把包的名称设置为{{ PKG_BUILDNUM }}_cuda{{ cuda_compiler_version }}_{{ dp_variant }}
,其中把{{ dp_variant }}
放在最后,就可以确保用*cpu
或者*gpu
就可以搜寻到指定的版本。
1 2 3 4 5 6 7 8
| build: number: 1 string: "{{ PKG_BUILDNUM }}_cuda{{ cuda_compiler_version }}_{{ dp_variant }}" string: "{{ PKG_BUILDNUM }}_cuda{{ cuda_compiler_version }}_{{ dp_variant }}_{{float_prec}}" run_exports: - libdeepmd {{ version }} *{{ dp_variant }} - libdeepmd {{ version }} *{{ dp_variant }}_{{ float_prec }} skip: true
|
同时,设置了run_exports
,可以确保把libdeepmd
加入构建(host
)依赖的package,自动把相同版本的libdeepmd
加入运行时(run
)的依赖。
和前两个package类似,libdeepmd
的依赖就是gcc
、libtensorflow_cc
、cudatoolkit
以及其它构建工具:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| requirements: build: - {{ compiler('c') }} - {{ compiler('cxx') }} - cmake - git host: - cudatoolkit {{ cuda_compiler_version }}* - cudnn {{ cudnn }}* - libtensorflow_cc {{ tf }}* run: - libtensorflow_cc {{ tf }}* - {{ pin_compatible('cudatoolkit', max_pin='x.x') }} - {{ pin_compatible('cudnn') }}
|
这里,如何指定tf的版本?这是在meta.yaml
最上方实现的,可以根据不同的cuda_compiler_version
设置不同的dp_variant
和tf_version
,之后再将两者拼接起来:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| {% if cuda_compiler_version == "None" %} {% set dp_variant = "cpu" %} {% else %} {% set dp_variant = "gpu" %} {% endif %}
{% if cuda_compiler_version == "None" %} {% set dp_variant = "cpu" %} {% set tf_version = "2.3" %}
{% else %} {% set dp_variant = "gpu" %}
{% if cuda_compiler_version == "10.1" %} {% set tf_version = "2.3" %} {% elif cuda_compiler_version == "10.0" %} {% set tf_version = "2.1" %} {% else %} {% set tf_version = "2.1" %} {% endif %}
{% endif %}
{% set tf = "{} {}".format(tf_version, dp_variant) %}
|
和libtensorflow_cc
一样,我们在conda_build_config.yaml
里面仍然把gcc
的版本设为5.4,因为cudatoolkit仍然不支持用gcc
7.3编译。
1 2 3 4
| c_compiler_version: - 5.4 cxx_compiler_version: - 5.4
|
build.sh
文件比较简单。在使用cmake
编译时,我们只需要把CMAKE_INSTALL_PREFIX
和其它目录均设为${PREFIX}
即可。
1 2 3 4 5 6 7 8 9
| set -e mkdir -p source/build cd source/build cmake -DTENSORFLOW_ROOT=${PREFIX} -DCMAKE_INSTALL_PREFIX=${PREFIX} -DFLOAT_PREC=${float_prec} -DCMAKE_CXX_FLAGS="-lrt -pthread" -DCMAKE_SHARED_LINKER_FLAGS_INIT="-lrt -pthread" -DCMAKE_LINK_WHAT_YOU_USE=TRUE .. make -j${CPU_COUNT} make install make lammps mkdir -p ${PREFIX}/share mv USER-DEEPMD ${PREFIX}/share
|
${CPU_COUNT}
指conda-build
检测到的核心数。现在,大功告成!接下来我们就可以开始编译集成了DP的LAMMPS以及AmberTools。