阿里巴巴NANN框架安装及使用指南
一、项目介绍
NANN是阿里巴巴开发的一款基于TensorFlow的高度灵活且高性能的大规模检索框架。自2021年以来,NANN在阿里巴巴内部得到了深入的研发和广泛应用,支持了包括淘宝展示广告、淘宝搜索广告以及神马搜索在内的多项业务。
关键特性:
- 模型训练 —— 模型训练与索引构建脱耦,可以集成任意复杂的模型。
- 性能优化 —— 包含对GPU和CPU的深度优化,确保推理性能。
- 友好性设计 —— 特别关注用户友好度,尤其是对于TensorFlow用户。
二、项目快速启动
环境搭建
首先我们需要确保本地环境已安装以下软件工具:
- Python >= 3.6
- Tensorflow
- gRPC (Google Protocol Buffers)
克隆项目仓库
git clone https://github.com/alibaba/nann.git
cd nann
编译并运行基准测试
设置环境变量
假设我们已经在nann_impl目录下编译成功了blaze-benchmark, 那么我们可以设置如下的环境变量:
export nann_impl_dir=<path-to-nann-impl>
运行基准测试
TF_XLA_FLAGS="--tf_xla_cpu_global_jit" \
CUDA_HOME="/usr/local/cuda/" \
CUDA_PATH="/usr/local/cuda/" \
LD_LIBRARY_PATH="$CUDA_HOME/lib:$CUDA_HOME/extras/CUPTI/lib64:/usr/local/lib64" \
TF_XLA_PYTHON_CLIENT_PREALLOCATE=false \
TF_XLA_PYTHON_CLIENT_ALLOCATOR="platform" \
TF_XLA_PYTHON_CLIENT_MEM_FRACTION=0.9 \
TF_ENABLE_XLA=True \
TF_XLA_FLAGS="--tf_xla_auto_jit=2 --tf_xla_cpu_use_fast_math=true --tf_xla_disable_llvm_version_check=true" \
TF_XLA_DEBUG_OPTIONS="--xla_dump_to=./cubin_cache TF_XLA_PTX_CACHE_DIR= /xla_cache `dirname $nann_impl_dir`/blaze-benchmark/build/benchmark/benchmark benchmark_conf"
导出模型为SavedModel格式
# 假设输出根目录为$output_root$
python nann/delivery/pb_to_saved_model.py
--model-path $[output_root]/export/exec.pb
--meta-path $[output_root]/export/exec.meta.pb
--export-dir $[output_root]/export/nann/1
使用Docker部署模型服务
docker run -p 8501:8501 -p 8500:8500 \
--mount type=bind source=$[output_root]/export/nann target=/models/nann \
-e MODEL_NAME=nann -t alinann/nann_serving
三、应用案例与最佳实践
NANN广泛应用于大规模推荐系统中, 如淘宝的商品推荐场景。它通过整合先进的模型与高效的索引技术, 实现了高精度的推荐结果。NANN的设计考虑到了可扩展性和高效性, 能够处理亿级数据量的检索任务。
最佳实践建议:
- 在实际部署时要充分考虑GPU资源分配;
- 利用NANN提供的模型压缩技术减少模型尺寸;
- 针对特定场景调整索引参数以达到最优效果;
四、典型生态项目
NANN作为阿里巴巴大搜部门的推荐引擎重要组成部分, 已经成为大规模检索领域的关键技术之一。下面列举几个基于NANN的应用实例或相关研究工作:
- [Paper] 大规模稀疏特征学习平台实践(Alibaba Research)
- [Project] 阿里巴巴推荐算法团队基于NANN的新闻个性化推荐系统
- [Blog] 在阿里云上如何部署NANN作为离线检索服务
以上就是阿里巴巴NANN框架的基础介绍及其使用方法概述。希望这些内容能够帮助您更好地理解和应用这款强大而灵活的检索框架!如果您有任何疑问或者想要进一步了解NANN的细节,欢迎访问其GitHub页面查阅更详尽的文档资料。