没有本地 GPU 时如何用 SkyPilot 在云端 GPU 上构建 LEANN 索引并同步回本地?
2026/9/15 12:04:06 网站建设 项目流程

没有本地 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等路径都相对仓库根目录)。本地机器只需要做三件事:

  1. 一次性安装并配置 SkyPilot:
pip install skypilot
  1. 准备要构建的本地数据目录。模板默认docs: ./data,即假设数据在仓库根目录下的./data;如果你的数据放在别处,改envs.docsfile_mounts即可。

  2. 索引同步回本地后若要检索,本地需要安装 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: 100

GPU 可以按注释换成 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 \ --force

recomputefalse0时模板会自动追加--no-recomputeforce为真时追加--forceextra_args非空时原样透传。命令结束后模板打印索引输出位置,文档示例输出为:

INDEX_OUT_DIR=~/.leann/indexes/my-index

启动云端构建

默认参数启动(L4:1,挂载./data到远端~/leann-data,构建自动运行):

sky launch -c leann-gpu sky/leann-build.yaml

SkyPilot 会创建名为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.6B

embedding_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输出就是为这一步提供远端路径。

验证结果

  1. 构建阶段:run 结束时输出INDEX_OUT_DIR=~/.leann/indexes/my-index(文档示例),远端索引就在该路径。
  2. 同步后:确认本地.leann/indexes/下出现my-index,这正是 rsync 命令的目标目录。
  3. 功能验证:用已安装的本地 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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询