没有本地 GPU 时如何用 SkyPilot 在云端 GPU 上构建 LEANN 索引并同步回本地?
【免费下载链接】LEANN[MLsys2026 Best Paper]: https://arxiv.org/abs/2506.08276. RAG on Everything with LEANN. Enjoy 97% storage savings while running a fast, accurate, and 100% private RAG application on your personal device.项目地址: https://gitcode.com/GitHub_Trending/le/LEANN
LEANN 的索引构建通常运行在个人设备上,但当你没有本地 GPU、或构建/检索速度不够用时,配置指南 的 “Low-resource setups” 一节给出了一条完整路径:用 SkyPilot 在云端 GPU 虚机上运行 LEANN 的 embedding 生成与索引构建,构建完成后把索引 rsync 回本地.leann/indexes/,之后在本地直接检索。仓库自带可运行的模板 sky/leann-build.yaml,本文以它为主线,覆盖从安装 SkyPilot、启动云端构建到同步回本地并验证的全部步骤。
准备条件
在 LEANN 仓库根目录下操作(模板中sky/leann-build.yaml、./data等路径都相对仓库根目录)。本地机器只需要做三件事:
- 一次性安装并配置 SkyPilot:
pip install skypilot准备要构建的本地数据目录。模板默认
docs: ./data,即假设数据在仓库根目录下的./data;如果你的数据放在别处,改envs.docs和file_mounts即可。索引同步回本地后若要检索,本地需要安装 LEANN(无 GPU 的 Linux 使用
cpuextra,见 README):
uv venv source .venv/bin/activate uv pip install leann[cpu]注意:sky launch会在云服务商上创建一台 GPU 虚机,模板的 setup 阶段会在该虚机上执行sudo apt-get install -y libstdc++6 libgomp1(保证 FAISS 所需的 GLIBCXX >= 3.4.30,并顺带升级 SkyPilot 镜像 conda base 环境中的 libstdc++)以及uv pip install leann-core leann-backend-hnsw leann-backend-diskann。这些都是模板自动完成的远端操作,但会产生真实的云资源开销。
模板 sky/leann-build.yaml 的关键字段
完整模板见 sky/leann-build.yaml,与当前任务相关的部分如下。
资源配置,默认申请一块 L4 GPU,磁盘 100GB:
resources: # Choose a GPU for fast embeddings (examples: L4, A10G, A100). CPU also works but is slower. accelerators: L4:1 # Optionally pin a cloud, otherwise SkyPilot will auto-select # cloud: aws disk_size: 100GPU 可以按注释换成 A10G、A100 等示例型号;不显式指定云时,由 SkyPilot 自动选择,取消cloud: aws注释可固定云厂商。
构建参数放在envs,都可以在启动时用-e key=value覆盖:
envs: index_name: my-index docs: ./data backend: hnsw # hnsw | diskann complexity: 64 graph_degree: 32 num_threads: 8 embedding_mode: sentence-transformers # sentence-transformers | openai | mlx | ollama embedding_model: facebook/contriever recompute: true # true => selective recomputation (recommended) compact: true # for HNSW only extra_args: "" force: true其中recompute: true是模板注释标注的推荐模式(选择性重算);compact: true只对 HNSW 生效;force: true会在 run 阶段加上--force。
数据同步到远端 VM 的部分:
file_mounts: # Example: mount your local data directory used for building ~/leann-data: ${docs}${docs}由envs.docs解析,默认即./data。这里有一处需要你核对的地方:模板注释写的是把本地数据目录挂载到远端,配置指南的说明是 “mount ./data to ~/leann-data”,而 run 阶段的构建命令读取的是远端--docs ~/leann-data——即数据最终必须落在远端~/leann-data。请按注释 “Adjust as needed” 确认这一行的本地/远端映射方向符合该意图,不要照抄未核对的写法。
run 阶段在远端 VM 上最终执行的构建命令(默认参数展开后):
python -m leann.cli build my-index \ --docs ~/leann-data \ --backend hnsw \ --complexity 64 \ --graph-degree 32 \ --num-threads 8 \ --embedding-mode sentence-transformers \ --embedding-model facebook/contriever \ --forcerecompute为false或0时模板会自动追加--no-recompute,force为真时追加--force,extra_args非空时原样透传。命令结束后模板打印索引输出位置,文档示例输出为:
INDEX_OUT_DIR=~/.leann/indexes/my-index启动云端构建
默认参数启动(L4:1,挂载./data到远端~/leann-data,构建自动运行):
sky launch -c leann-gpu sky/leann-build.yamlSkyPilot 会创建名为leann-gpu的集群,setup 完成后自动执行 run 阶段的构建命令。
如需覆盖参数(例如换用更大的 embedding 模型),用-e key=value,key 对应envs中的变量名:
sky launch -c leann-gpu sky/leann-build.yaml \ -e index_name=my-index \ -e backend=hnsw \ -e embedding_mode=sentence-transformers \ -e embedding_model=Qwen/Qwen3-Embedding-0.6Bembedding_model的具体取舍可参考配置指南 “Embedding Model Selection” 一节的分档说明。注意:如果覆盖了index_name,下文 rsync 命令中的索引名要同步替换。
把索引同步回本地
构建结束后,在本地执行(配置指南原文给出的命令):
rsync -Pavz leann-gpu:~/.leann/indexes/my-index ./.leann/indexes/这条命令通过 SSH 从集群leann-gpu(即sky launch -c指定的集群名)拉取远端索引目录,写入本地.leann/indexes/。它的副作用仅限于在本地创建/更新该目录,不修改远端内容;前提是名为leann-gpu的 SkyPilot 集群仍然存在。模板 run 阶段的INDEX_OUT_DIR输出就是为这一步提供远端路径。
验证结果
- 构建阶段:run 结束时输出
INDEX_OUT_DIR=~/.leann/indexes/my-index(文档示例),远端索引就在该路径。 - 同步后:确认本地
.leann/indexes/下出现my-index,这正是 rsync 命令的目标目录。 - 功能验证:用已安装的本地 LEANN 确认索引可用:
leann list leann search my-index "machine learning concepts"leann list列出本地全部索引;my-index出现在列表中且leann search返回检索结果,说明云端构建与本地同步均已完成。
限制与注意
- 模板只覆盖“云端构建 + 拉回”这一段;构建完成后的检索、问答在本地 LEANN 上运行。
- GPU 示例型号为 L4、A10G、A100;模板注释说明 CPU 也可用但更慢。
compact仅对 HNSW 生效;recompute: true为模板推荐的 selective recomputation 模式。- 配置指南中同节的另外两个低资源选项(OpenAI embeddings 零本地算力、
--no-recompute以存储换延迟)是独立方案,不在本文路径内。 - 文档未提供构建结束后释放集群的命令,集群何时停止需按 SkyPilot 自身机制处理。
【免费下载链接】LEANN[MLsys2026 Best Paper]: https://arxiv.org/abs/2506.08276. RAG on Everything with LEANN. Enjoy 97% storage savings while running a fast, accurate, and 100% private RAG application on your personal device.项目地址: https://gitcode.com/GitHub_Trending/le/LEANN
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考