Skip to content

cloud cloud

可以使用 txtai 构建可扩展的云原生应用程序。以下云运行时受支持。

  • 容器编排系统(例如 Kubernetes)
  • Docker 引擎
  • 无服务器计算
  • txtai.cloud(2024 年推出)

txtai 的镜像可在 Docker Hub 上获取,适用于 CPUGPU 安装。在没有 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 LambdaGoogle Cloud FunctionsAzure Cloud FunctionsKubernetesKnative 等框架上受支持。

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
如果成功,本地API实例现在以“无服务器”方式运行。此配置可以使用SAM部署到AWS。更多信息请参见此链接。

Kubernetes与Knative

txtai可随容器编排系统扩展。这可以是自托管的,也可以是使用云提供商,如Amazon Elastic Kubernetes ServiceGoogle Kubernetes EngineAzure Kubernetes Service。还有其他提供托管Kubernetes服务的小型供应商。

一个完整的示例,涵盖如何在Kubernetes上使用Knative构建无服务器的txtai应用程序,可以在这里找到

txtai.cloud

txtai.cloud是一个计划中的项目,将提供一种简单且安全的方式来运行托管的txtai应用程序。