AIStor 的最新功能之一是广受欢迎的开源项目 Hugging Face 的私有云版本。这篇文章详细介绍了 AIStor 的 AIHub 如何有效地创建一个完全由企业控制的 API 兼容的私有云版本的 Hugging Face。在我们开始之前,介绍 Hugging Face 是有意义的。Hugging Face 是面向 AI 工程师的领先开放平台。它的使命是使机器学习大众化,并成功创建了一个用于共享模型和数据集的云平台。许多在模型研发方面处于领先地位的大型科技公司 - 特别是在大型语言模型 (LLMs - 都为 Hugging Face 做出了贡献。这是一件大事,因为 LLMs 的训练时间和金钱成本很高。当共享像 LLMs,没有资源从头开始构建 LLMs可以使用 AI 向前发展,如果没有 Hugging Face 提供的共享,这是不可能的。此外,对真正的开放 AI 感兴趣的技术领导者也将开源用于训练他们开源模型的数据。模型的好坏取决于用于训练它们的数据。允许共享训练数据意味着社区可以审查它是否存在潜在的偏差和其他缺点。如果发现问题,则可以找到新数据来纠正问题,还可以共享新数据。Hugging Face 还提供用于共享数据集的产品。Hugging Face 进一步发展 AI 的努力并不止于模型和数据共享。他们还创建了用于减少操作模型和数据所需的代码量的库。您可以将这些库视为封装模型和数据复杂性的抽象层。这些库已被社区直接大量使用。以下是更流行的 Hugging Libraries 的列表和简短描述。
Transformers - Transformers 提供 API 和工具来下载和训练最先进的预训练模型。预先训练的模型可以降低您的计算成本和碳足迹,并节省从头开始训练模型所需的时间和资源。
数据集 - 数据集是一个库,用于轻松访问和共享表格、音频、计算机视觉和自然语言处理 (NLP) 任务的数据集。
扩散器 - 扩散器库是由 Hugging Face 开发的一个 Python 库,用于处理扩散模型,扩散模型是一种可以创建高质量图像、音频和其他数据的生成模型。
Sentence Transformers - 是用于访问、使用和训练最先进的文本和图像嵌入模型的首选 Python 模块。它可用于使用 Sentence Transformer 模型计算嵌入,或使用 Cross-Encoder 模型计算相似性分数。
使用 Hugging Face 库构建的生态系统
特别有趣的是,其他 AI 工具也依赖于 Hugging Face 的库,并使用它们来提供其功能。例如,许多推理服务器使用 Hugging Face 作为查找和部署模型的中心。以下是使用 Hugging Face API 的常见推理服务器、编排库和微调库的简短列表。
vLLM - vLLM 推理服务器是适用于大型语言模型 (LLMs。它优化了内存使用和并行化,以实现快速响应时间和高吞吐量。它旨在支持基于 Transformer 的模型,包括 Hugging Face 模型。vLLM - vLLM 推理服务器是适用于大型语言模型 (LLMs。它优化了内存使用和并行化,以实现快速响应时间和高吞吐量。它旨在支持基于 Transformer 的模型,包括 Hugging Face 模型。
Nvidia Triton 推理服务器 - NVIDIA Triton 推理服务器是 NVIDIA AI 平台的一部分,可与 NVIDIA AI Enterprise 一起使用,是一款开源软件,可标准化每个工作负载中的 AI 模型部署和执行。
Ollama - Ollama 是一个轻量级的可扩展框架,用于在本地计算机上构建和运行语言模型。它支持 macOS、Linux 和 Windows。
LangChain - LangChain 是一个框架,用于构建由 LLMs。它旨在帮助开发人员编排工作流,包括数据摄取、数据检索、提示创建和推理等任务。
隐私和控制问题
在理想情况下,所有通过微调改进的模型也将与用于改进它们的数据一起共享。不幸的是,情况并非总是如此。对于某些组织,隐私和控制优先于共享。对于在受到严格监管的行业中运营的组织以及负责个人身份信息 (PII) 的组织来说尤其如此。对于希望使用公共 AIHub 作为起点,但在数据集增加敏感信息并且模型已根据这些新数据进行微调后需要隐私和控制的组织,以下是典型的工作流程。
许多希望使用 Hugging Face 模型和数据集作为其 AI 计划的起点的组织可能已经使用蛮力实施了上述逻辑。这通常是使用网络共享作为伪集线器来完成的。遗憾的是,使用网络共享作为中心不是一个可缩放或高性能的解决方案。此外,Hugging Face API 不包含在下载之前在本地中心内查找所请求模型(或数据集)版本的逻辑。这需要手动覆盖所有下载功能,这很容易出错。暴力破解方法的最后一个问题是,默认情况下,Hugging Face API 中的所有上传函数和方法都配置为将模型和数据集发送回 Hugging Face。很容易意外地将私有数据或使用私有数据训练的模型发送回公共 Hugging Face Hub。需要的是一种简单的方法,使用配置来循环使用上面显示的逻辑,同时允许开发人员使用 Hugging Face API - 或构建在 Hugging Face API 之上的任何其他库。
AIHub 简介
AIHub 以 Hugging Face API 为目标,并实现了与这些 API 完全兼容的代理服务器。无需更改代码,应用程序开发人员可以使用现有的 Hugging Face 库从 Hugging Face 下载现有模型并将其保存到 MinIO 存储桶中。对同一模型的后续请求将导致 Hugging Face 库从 MinIO 中提取模型。如果模型被增强或微调,新版本将被推送到 MinIO 并与原始版本一起保存。数据集的工作方式相同。最重要的是,工程师可以使用 AIHub 通过熟悉的工具在本地保存模型和数据。
让我们检查一下 Python 客户端、Hugging Face Hub 和 AIHub 之间的关系,如下图所示,以更好地了解 AIHub 的工作原理。请注意,AIHub 包括 AIHub 服务器和 AIStor 存储桶,两者均如图所示。
AIHub 服务器是一个代理服务器,可以拦截来自 Hugging Face API 的所有请求。它还包含上一节中所示的工作流中显示的逻辑。也就是说,如果 AIStor 存储桶中已经存在模型或数据集,那么这就是将从 Hugging Face 下载 API 返回的模型。如果 AIStor 存储桶中不存在,则将从 Hugging Face 下载它并自动保存在存储桶中。AIStor 存储桶是 MinIO 中的一个存储桶,它是一个可扩展且高性能的对象存储。最后,AIHub 服务器将所有保存和推送请求发送到 AIStor 存储桶。模型和数据集永远不会发送回 Hugging Face。
设置和使用 AIHub
由于 AIHub 服务器需要连接到 AIStor 实例中的存储桶,因此其配置需要所有必要的信息才能连接到 AIStor 并找到所需的存储桶。下面是 AIStor UI,显示了 AIHub 服务器连接到 AIstor 并找到将充当本地集线器的存储桶所需的六个环境变量。
多个 AIHub 可以托管在单个 AIStor 租户中。管理员可以使用 AIStor 控制台用户界面对其进行配置。AIHub 实例也可以使用 YAML 以声明方式指定,然后通过 AIStor 控制台上传到 AIStor 租户。想要使用 AIHub 的 ML 工程师只需在工作流程开始时设置一个环境变量。下面是一个代码片段,其中显示了必须设置的环境变量。这就是使用 AIHub 所需要做的全部工作。如果 ML 工程师使用 Jupyter Notebook,则应将此变量设置为 Jupyter Notebook 环境设置的一部分。
import os
os.environ['HF_ENDPOINT'] = 'https://ai-hub.aistor.company.com'
结论
处于 AI 早期阶段的组织可以转到 Hugging Face 并找到模型来引导他们的计划。Hugging Face 使组织能够轻松地使用开放模型和数据集构建 AI。但是,Hugging Face 上的所有内容都是开放的,许多组织需要将最初从 Hugging Face 下载的模型保存到本地安全中心。他们还需要使用私有且完全由他们控制的数据来微调这些模型。AIHub 是旨在应对这些挑战的统包式解决方案。使用 AIHub,客户可以将其模型和数据集安全地存储在 AIStor 租户中,完全由他们控制。这一切都发生在让工程师使用 Hugging Face 的模型或数据集的初始版本开始他们的 ML 管道时。此外,不需要新的库。现有的 Hugging Face 库和依赖于 Hugging Face 的任何其他库将按原样工作。