nmu*_*thy 5 python pytorch sentence-transformers huggingface large-language-model
SBERT ( https://www.sbert.net/ )sentence-transformer库 ( https://pypi.org/project/sentence-transformers/ ) 是 Python 开源 LLM 生态系统中用于生成文本块向量嵌入的最流行的库。它有一个简单的 API,但却是一个非常大的依赖项。它所有的膨胀从何而来?
下面是使用此工具构建基础 Docker 容器映像的屏幕截图,该工具接管11 mins构建,最终映像大小为7.5 GB:
作为参考,这是我的Dockerfile.base:
FROM python:3.11.2-slim-bullseye
RUN pip install --upgrade pip && pip install sentence-transformers
Run Code Online (Sandbox Code Playgroud)
我预计这是因为它安装了一些已经预先打包的模型,但是当我尝试他们流行的入门片段时
FROM python:3.11.2-slim-bullseye
RUN pip install --upgrade pip && pip install sentence-transformers
Run Code Online (Sandbox Code Playgroud)
它又向我的文件系统下载了数百 MB 的文件。所以我想找到一种方法将其精简为我需要的包。我相信这个库的大小很大程度上取决于底层torch依赖项(6.9 GB),而底层依赖项又由于其底层nvidia-*依赖项而占用了大量磁盘空间(顺便说一句,这些依赖项安装在哪里?)
假设我已经将一个模型下载到我的文件系统(即path/to/all-MiniLM-L6-v2来自 HuggingFace 的存储库),而我想要做的就是在 CPU 上运行上面的代码。如何才能只安装我需要的东西而不造成臃肿?
现在假设我选择了一个 GPU 来运行它。为了让这段代码在不膨胀的情况下运行,我需要的下一组边际依赖项是什么?
它又向我的文件系统下载了数百 MB 的文件。所以我想找到一种方法将其精简为我需要的包。我相信这个库的大小很大程度上是由于底层的 torch 依赖项(6.9 GB),而它又由于其底层的 nvidia-* 依赖项而占用了大量磁盘空间(顺便说一句,这些依赖项安装在哪里?)
我喜欢使用docker div 工具来回答这类问题。除了缓存目录之外,图像的大部分空间似乎都被/usr/local/lib/python3.11/site-packages. /usr/local/lib/python3.11/site-packages/nvidia特别是,和似乎正在使用大量空间/usr/local/lib/python3.11/site-packages/torch。
假设我已经将一个模型下载到我的文件系统(即 HuggingFace 的路径/to/all-MiniLM-L6-v2 存储库),而我想要做的就是在 CPU 上运行上面的代码。如何才能只安装我需要的东西而不造成臃肿?
我有两个建议。
第一个是--no-cache-dir。目前它正在内部存储 2.4 GB 的缓存包/root/.cache。您可以通过将此 Dockerfile 重写为以下内容来防止这种情况发生:
FROM python:3.11.2-slim-bullseye
RUN pip install --upgrade pip && pip install --no-cache-dir sentence-transformers
Run Code Online (Sandbox Code Playgroud)
我给出的第二个建议是使用仅 CPU 版本的 torch。许多依赖项仅用于在 Nvidia GPU 上运行模型。
以下 Dockerfile 仅安装仅 CPU 依赖项。
FROM python:3.11.2-slim-bullseye
RUN pip install --no-cache-dir --upgrade pip
RUN pip install --no-cache-dir torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
RUN pip install --no-cache-dir sentence-transformers
Run Code Online (Sandbox Code Playgroud)
这导致图像大小为 1.39GB。
现在假设我选择了一个 GPU 来运行它。为了让这段代码在不膨胀的情况下运行,我需要什么下一组边际依赖项?
我对 CUDA 的了解不够,不知道可以在不破坏它的情况下删除它的哪些部分,抱歉。
| 归档时间: |
|
| 查看次数: |
1425 次 |
| 最近记录: |