如何编译TensorFlow Serving(XLA)使LLVM/MLIR为共享对象而非静态链接
编译TensorFlow Serving时生成LLVM/MLIR共享库的问题
问题背景
我正在编译TensorFlow Serving项目,希望将LLVM/MLIR编译为共享对象。项目的依赖链为TensorFlow Serving -> TensorFlow -> XLA,当前编译出的二进制文件体积庞大,且基本为静态链接。
已尝试的操作
- 在
tensorflow_serving/model_servers/BUILD的tensorflow_model_server规则中设置linkstatic = False,该设置生效后生成的二进制文件链接了约2030个动态库,但在其他位置设置该参数无效果 - 尝试在多处设置
linkshared = True,未达到预期效果
当前困惑
无法追踪完整编译流程,找不到LLVM和MLIR的编译规则。通过梳理Bazel文件,推测依赖链如下:
tensorflow serving └── tensorflow text └── tensorflow (should include llvm/mlir) └── xla (should include llvm/mlir)
但仍不清楚LLVM的具体编译位置与方式。
期望目标
生成可在运行时加载的libLLVM.so和libMLIR.so。已知使用-DLLVM_BUILD_LLVM_DYLIB=ON参数可生成相关库,但不确定该参数的设置位置及后续链接方式,最终希望tensorflow_model_server的ldd输出如下:
ldd bazel-bin/tensorflow_serving/model_servers/tensorflow_model_server linux-vdso.so.1 (0x0000ffffb1084000) libLLVM.so => /myllvm/libLLVM.so.0 (0x0000ffffbxxxxxx) libMLIR.so => /mymlir/libMLIR.so.0 (0x0000ffffbxxxxxx) libpthread.so.0 => /lib64/libpthread.so.0 (0x0000ffffb1011000) libm.so.6 => /lib64/libm.so.6 (0x0000ffffb0f40000) libdl.so.2 => /lib64/libdl.so.2 (0x0000ffffb0f1f000) librt.so.1 => /lib64/librt.so.1 (0x0000ffffb0efe000) libstdc++.so.6 => /lib64/libstdc++.so.6 (0x0000ffffb0d1b000) libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000ffffb0cf6000) libc.so.6 => /lib64/libc.so.6 (0x0000ffffb0b60000) /lib/ld-linux-aarch64.so.1 (0x0000ffffb1046000)
内容的提问来源于stack exchange,提问作者Capybara
相关产品推荐
相关产品推荐

