假设您的配方在 CPU 和 GPU 情况下几乎相同,则此用例的预期解决方案是创建具有构建变体的配方。
对于您的用例,您可能不需要通读所有文档。这是一个简单(但完整)的示例。
首先,conda_build_config.yaml
在您的配方目录中创建,并定义一个变量并列出它可能具有的每个可能值。这指示 conda-build 构建您的配方 TWICE - 为您列出的每个值构建一次。
此外,该变量可用于meta.yaml
、选择器和jinja 模板中。
在这个愚蠢的例子中,我们假设我们的包应该依赖于 EITHERzlib
或xz
,但不能同时依赖于两者。我们将使用名为 的变量在两者之间进行选择foo
。
recipe/
├── build.sh
├── conda_build_config.yaml
└── meta.yaml
# recipe/conda_build_config.yaml
foo:
- bar
- baz
# recipe/meta.yaml
package:
name: mypackage-{{ foo }}
version: 0.1
requirements:
run:
- zlib # [foo=='bar']
- xz # [foo=='baz']
现在尝试构建配方:
conda build recipe
请注意,它构建了两个“变体”。在输出接近尾声时,它会打印:
# If you want to upload package(s) to anaconda.org later, type:
anaconda upload /opt/miniconda/conda-bld/osx-64/package-bar-0.1-h11ff1f9_0.tar.bz2
anaconda upload /opt/miniconda/conda-bld/osx-64/package-baz-0.1-he38177a_0.tar.bz2
cpu
因此,在您的情况下,请使用变量在包的版本和版本之间切换gpu
。在您的食谱中,使用如上所示的选择器选择您需要requirements
的特定版本。tensorflow
另请注意,您在 中定义的变量conda_build_config.yaml
可用作 中的环境变量build.sh
,以防您需要在每种情况下运行不同的构建命令。
# recipe/build.sh
echo "Now building variant: ${foo}"