尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

FlagEmbedding 容器化部署实操:5 步把 BGE 嵌入模型搬进 Docker 镜像

FlagEmbedding 容器化部署实操:5 步把 BGE 嵌入模型搬进 Docker 镜像 FlagEmbedding 容器化部署实操5 步把 BGE 嵌入模型搬进 Docker 镜像【免费下载链接】FlagEmbeddingRetrieval and Retrieval-augmented LLMs项目地址: https://gitcode.com/GitHub_Trending/fl/FlagEmbedding你要把 BGE 嵌入模型接进 RAG 生产环境先要固化的是环境。本文以 FlagEmbedding 这个专注密集检索与检索增强 LLM 的开源项目为例从环境自检到启动验证用 5 步完成容器化部署。开工前 3 分钟自检动手前确认宿主机器达标能省掉装到一半 GPU 不识别的返工时间。项目最低配置推荐配置CPU8 核16 核内存16GB32GBNVIDIA GPU1 块8GB 显存1 块16GB 显存软件侧需要三样Docker 20.10、NVIDIA Container Toolkit让容器能看见显卡的组件、Git。表里缺哪项就直接用下面两条安装命令补齐Toolkit 装完必须重启 Docker 才生效sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io distribution$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list sudo apt-get update sudo apt-get install -y nvidia-docker2 sudo systemctl restart docker你容器化守护的就是下面这条 RAG 流水线文档处理、检索、重排、LLM 生成底层都跑在 FlagEmbedding 的嵌入与重排组件上。第一份 Dockerfile基础镜像到依赖安装镜像是一个可直接运行的系统快照Dockerfile 就是构建这个快照的配方。下面是精简版每行都留了理由。FROM nvidia/cuda:11.7.1-cudnn8-devel-ubuntu22.04 WORKDIR /app RUN apt-get update apt-get install -y --no-install-recommends \ git python3 python3-pip \ rm -rf /var/lib/apt/lists/* RUN ln -s /usr/bin/python3 /usr/bin/python \ pip3 install --no-cache-dir --upgrade pip RUN git clone https://gitcode.com/GitHub_Trending/fl/FlagEmbedding . RUN pip install --no-cache-dir torch torchvision torchaudio \ --extra-index-url https://download.pytorch.org/whl/cu117 RUN pip install --no-cache-dir -e . ENV HF_HUB_CACHE/app/cache ENV PYTHONPATH/app EXPOSE 8000 CMD [bash]为什么这么写FROM nvidia/cuda:11.7.1-cudnn8-devel-ubuntu22.04CUDA 11.7 与 cuDNN 运行时预装和 cu117 版 PyTorch wheel 严格对应省去自己装 GPU 全家桶。apt-get install ...ubuntu22.04 官方镜像不带 Python克隆代码又必须有 Git--no-install-recommends顺手压小镜像。git clone把代码烘进镜像容器到哪都能自包含运行。先装torchGPU 版 wheel 在 PyTorch 自有 index 上先装它可避免其他包误拉 CPU 版本。pip install -e .setup.py 里声明了 torch、transformers、datasets、sentence_transformers 等全部依赖-e以可编辑模式装入。ENV HF_HUB_CACHE/app/cache把模型缓存位置钉死后面挂载宿主机目录就能直接复用。EXPOSE 8000预留 API 服务端口CMD [bash]默认进 shell方便你随时进去调试。构建并验证docker build -t flagembedding:latest .⚠️ 首次构建要下载基础镜像和全部依赖约 10-20 分钟确认网络通畅再执行。docker run --gpus all -it --rm flagembedding:latest python -c import FlagEmbedding; print(FlagEmbedding loaded successfully!)看到FlagEmbedding loaded successfully!镜像这关就过了。3 条命令启动服务并验证挂载-v 宿主目录:容器目录决定容器删掉后哪些东西还在。记住三类目录cache 放模型、data 放数据集、output 放结果。开发调试进 shell 随便看docker run --gpus all -it --rm \ -v $PWD/data:/app/data \ -v $PWD/cache:/app/cache \ flagembedding:latest生产后台命名 端口映射docker run --gpus all -d \ --name flagembedding-service \ -v $PWD/data:/app/data \ -v $PWD/cache:/app/cache \ -v $PWD/output:/app/output \ -p 8000:8000 \ flagembedding:latest验证容器内 GPUdocker exec -it flagembedding-service nvidia-smi三个挂载各自的作用/app/cache对应镜像里的HF_HUB_CACHE环境变量模型下载一次就留在宿主重启不重下/app/data存数据集/app/output存训练与推理产物。生产调优量化、批处理与显存跑通之后有 4 个开关值得动每一个都直接省显存或提吞吐。int8/int4 量化量化是把参数精度降下来float32 → int8换取显存和速度from FlagEmbedding import FlagModel model FlagModel(BAAI/bge-large-en-v1.5, quantizationint8, # 支持 int8/int4 devicecuda)批大小与梯度累积示例脚本base.sh里per_device_train_batch_size2是测试值。生产按显存上调用梯度累积保持有效批量per_device_train_batch_size16 gradient_accumulation_steps2微调启动示例脚本路径见 examples/finetune/embedder/encoder_only/base.shdocker run --gpus all -it --rm \ -v $PWD/cache:/app/cache \ -v $PWD/output:/app/output \ flagembedding:latest \ bash examples/finetune/embedder/encoder_only/base.sh指定单卡并限制显存多卡机器上只放一张卡给容器并限制内存上限docker run --gpus device0 -it --rm \ -e CUDA_VISIBLE_DEVICES0 \ -e MAX_GPU_MEMORY10GB \ flagembedding:latest共享模型缓存多台机器、多个容器共用同一份模型下载只发生一次docker run --gpus all -it --rm \ -v /shared/huggingface_cache:/app/cache \ flagembedding:latest部署报错速查表高频问题四个现象、原因、第一处置动作对号入座。现象可能原因解决动作镜像体积过大数 GBCUDA devel 基础镜像 apt/pip 缓存未清理改多阶段构建pip 一律带--no-cache-dir换 Alpine 前先确认 CUDA 兼容--gpus不生效、容器内没有 nvidia-smiNVIDIA Container Toolkit 未装或装完没重启 Docker主机重装 nvidia-docker2 后systemctl restart docker单卡场景用--gpus device0模型加载慢、每次启动重下载没挂载 cache或没预下载模型挂载/app/cache共享缓存目录提前把模型下到本地缓存并检查 HF Hub 网络速度训练/推理显存 OOMper_device_train_batch_size过大调小批大小、加梯度累积或改用 int8 量化、gradient_checkpointing部署之后的下一步容器稳定之后通常的下一站是拿自己的数据做微调再跑一轮评估。仓库内教程和示例脚本都齐了快速入门Tutorials/quick_start.ipynb嵌入模型教程Tutorials/1_Embedding/RAG 应用示例Tutorials/6_RAG/模型微调Tutorials/7_Fine-tuning/微调示例脚本examples/finetune/embedder/encoder_only/base.sh缓存目录挂在宿主上你下次重新构建镜像时模型下载的时间就一次性省掉了。【免费下载链接】FlagEmbeddingRetrieval and Retrieval-augmented LLMs项目地址: https://gitcode.com/GitHub_Trending/fl/FlagEmbedding创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表