云
可以使用 txtai 构建可扩展的云原生应用程序。以下云运行时受支持。
- 容器编排系统(例如 Kubernetes)
- Docker 引擎
- 无服务器计算
- txtai.cloud(2024 年推出)
txtai 的镜像可在 Docker Hub 上获取,适用于 CPU 和 GPU 安装。在没有 GPU 的情况下,推荐使用 CPU 安装,因为镜像大小显著较小。
基础 txtai 镜像未安装模型,每次容器启动时都会下载模型。建议缓存模型,因为这将显著减少容器启动时间。可以通过几种不同的方式实现这一点。
- 创建一个缓存了模型的容器
- 设置 transformers 缓存环境变量,并在启动镜像时挂载该卷
docker run -v <本地目录>:/models -e TRANSFORMERS_CACHE=/models --rm -it <docker 镜像>
构建 txtai 镜像
在 Docker Hub 上找到的 txtai 镜像配置为支持大多数情况。可以根据需要使用不同选项在本地构建此镜像。
以下是示例构建命令。
# 获取 Dockerfile
wget https://raw.githubusercontent.com/neuml/txtai/master/docker/base/Dockerfile
# 构建运行 Python 3.10 的 Ubuntu 22.04 镜像
docker build -t txtai --build-arg BASE_IMAGE=ubuntu:22.04 --build-arg PYTHON_VERSION=3.10 .
# 构建支持 GPU 的镜像
docker build -t txtai --build-arg GPU=1 .
# 构建仅包含基础 txtai 组件的最小镜像
docker build -t txtai --build-arg COMPONENTS= .
容器镜像模型缓存
如前所述,建议缓存模型以减少容器启动时间。以下命令演示了这一点。在所有情况下,假设本地目录中存在一个设置了所需配置的 config.yml 文件。
API
本节构建一个缓存模型并启动 API 服务的镜像。config.yml 文件应配置为通过 API 公开所需的组件。
以下是一个创建 Embeddings API 服务示例的 config.yml 文件。
# config.yml
writable: true
embeddings:
path: sentence-transformers/nli-mpnet-base-v2
content: true
下一节构建镜像并启动一个实例。
# 获取 Dockerfile
wget https://raw.githubusercontent.com/neuml/txtai/master/docker/api/Dockerfile
# CPU 构建
docker build -t txtai-api .
# GPU 构建
docker build -t txtai-api --build-arg BASE_IMAGE=neuml/txtai-gpu .
# 运行
docker run -p 8000:8000 --rm -it txtai-api
服务
本节构建一个计划工作流服务。更多关于计划工作流的信息可以在这里找到。
# 获取 Dockerfile
wget https://raw.githubusercontent.com/neuml/txtai/master/docker/service/Dockerfile
# CPU 构建
docker build -t txtai-service .
# GPU 构建
docker build -t txtai-service --build-arg BASE_IMAGE=neuml/txtai-gpu .
# 运行
docker run --rm -it txtai-service
工作流
本节构建一个单次运行的工作流。示例工作流可以在这里找到。
# 获取 Dockerfile
wget https://raw.githubusercontent.com/neuml/txtai/master/docker/workflow/Dockerfile
# CPU 构建
docker build -t txtai-workflow .
# GPU 构建
docker build -t txtai-workflow --build-arg BASE_IMAGE=neuml/txtai-gpu .
# 运行
docker run --rm -it txtai-workflow <工作流名称> <工作流参数>
无服务器计算
txtai 最强大的功能之一是使用 YAML 配置的应用程序,采用“一次构建,随处运行”的方法。API 实例和工作流可以在本地、服务器、集群或无服务器环境中运行。
txtai 的无服务器实例在 AWS Lambda、Google Cloud Functions、Azure Cloud Functions 和 Kubernetes 与 Knative 等框架上受支持。
AWS Lambda
以下步骤展示了一个使用 AWS SAM 构建无服务器 API 实例的基本示例。
- 创建 config.yml 和 template.yml
# config.yml
writable: true
embeddings:
path: sentence-transformers/nli-mpnet-base-v2
content: true
# template.yml
Resources:
txtai:
Type: AWS::Serverless::Function
Properties:
PackageType: Image
MemorySize: 3000
Timeout: 20
Events:
Api:
Type: Api
Properties:
Path: "/{proxy+}"
Method: ANY
Metadata:
Dockerfile: Dockerfile
DockerContext: ./
DockerTag: api
-
安装 AWS SAM
-
运行以下命令
sam build
sam deploy --guided
# 获取Dockerfile和应用程序
wget https://raw.githubusercontent.com/neuml/txtai/master/docker/aws/api.py
wget https://raw.githubusercontent.com/neuml/txtai/master/docker/aws/Dockerfile
# 构建docker镜像
sam build
# 在本地启动API网关和Lambda实例
sam local start-api -p 8000 --warm-containers LAZY
# 验证实例是否运行(应返回0)
curl http://localhost:8080/count
Kubernetes与Knative
txtai可随容器编排系统扩展。这可以是自托管的,也可以是使用云提供商,如Amazon Elastic Kubernetes Service、Google Kubernetes Engine和Azure Kubernetes Service。还有其他提供托管Kubernetes服务的小型供应商。
一个完整的示例,涵盖如何在Kubernetes上使用Knative构建无服务器的txtai应用程序,可以在这里找到。
txtai.cloud
txtai.cloud是一个计划中的项目,将提供一种简单且安全的方式来运行托管的txtai应用程序。