跳转到主要内容

基于GNU libc的Backend.AI内核运行器

项目描述

backend.ai-krunner-static-gnu

Backend.AI内核运行器包,适用于基于glibc的内核

本包包含一个静态构建的Python发行版和运行我们的krunner模块所需的第三方库,该模块在由用户提供的容器镜像中运行。

本身可以安装到任何Python环境中(此插件包的内容对平台和架构来说是无关紧要的,因为它只是插件接口的声明),但我们仍然应用二进制轮平台标记,以便setuptools可以区分目标CPU架构,如下所示

Backend.AI在哪里运行? 用户容器的基镜像是什么? 使用的krunner轮
manylinux (x86-64) manylinux (x86-64) backend.ai_krunner_static_gnu-X.X.X-py3-none-manylinux2014_x86_64.musllinux_1_1_x86_64.macosx_11_0_x86_64.whl
manylinux (x86-64) musllinux (x86-64) backend.ai_krunner_alpine-X.X.X-py3-none-manylinux2014_x86_64.musllinux_1_1_x86_64.macosx_11_0_x86_64.whl
manylinux (aarch64) manylinux (aarch64) backend.ai_krunner_static_gnu-X.X.X-py3-none-manylinux2014_aarch64.musllinux_1_1_aarch64.macosx_11_0_arm64.whl
manylinux (aarch64) musllinux (aarch64) backend.ai_krunner_alpine-X.X.X-py3-none-manylinux2014_aarch64.musllinux_1_1_aarch64.macosx_11_0_arm64.whl
musllinux (x86-64) manylinux (x86-64) backend.ai_krunner_static_gnu-X.X.X-py3-none-manylinux2014_x86_64.musllinux_1_1_x86_64.macosx_11_0_x86_64.whl
musllinux (x86-64) musllinux (x86-64) backend.ai_krunner_alpine-X.X.X-py3-none-manylinux2014_x86_64.musllinux_1_1_x86_64.macosx_11_0_x86_64.whl
musllinux (aarch64) manylinux (aarch64) backend.ai_krunner_static_gnu-X.X.X-py3-none-manylinux2014_aarch64.musllinux_1_1_aarch64.macosx_11_0_arm64.whl
musllinux (aarch64) musllinux (aarch64) backend.ai_krunner_alpine-X.X.X-py3-none-manylinux2014_aarch64.musllinux_1_1_aarch64.macosx_11_0_arm64.whl
macOS (x86-64) manylinux (x86-64) backend.ai_krunner_static_gnu-X.X.X-py3-none-manylinux2014_x86_64.musllinux_1_1_x86_64.macosx_11_0_x86_64.whl
macOS (x86-64) musllinux (x86-64) backend.ai_krunner_alpine-X.X.X-py3-none-manylinux2014_x86_64.musllinux_1_1_x86_64.macosx_11_0_x86_64.whl
macOS (aarch64) manylinux (aarch64) backend.ai_krunner_static_gnu-X.X.X-py3-none-manylinux2014_aarch64.musllinux_1_1_aarch64.macosx_11_0_arm64.whl
macOS (aarch64) musllinux (aarch64) backend.ai_krunner_alpine-X.X.X-py3-none-manylinux2014_aarch64.musllinux_1_1_aarch64.macosx_11_0_arm64.whl

我们以musl 1.2为基础将krunner包命名为"alpine",因为实际上Alpine Linux是唯一一个积极使用musl的发行版,目前尚不能在musl生态系统之上构建可以导入第三方动态模块的静态CPython。

有关源分布的通知

此包用于分发预构建的二进制文件,因此源分布没有预构建的二进制文件,并且无法按预期工作。只需参考此存储库了解我们如何构建东西。

如何阅读以下内容

  • {distro} 是一个字符串,如 static-gnualpine 等,取决于您所在的哪个存储库。
  • {distro_} 是与 {distro} 相同的字符串,但将短划线替换为下划线,用于Python包名称和路径。例如,static_gnualpine

开发

$ git clone https://github.com/lablup/backend.ai-krunner-{distro} krunner-{distro}
$ cd krunner-{distro}
$ pyenv virtualenv 3.12.2 venv-krunner  # you may share the same venv with other krunner projects
$ pyenv local venv-krunner
$ pip install -U pip setuptools
$ pip install -U -r build/requirements.txt
$ pip install -U -e .

如何更新

  1. 修改Dockerfile和其他内容。
  • 要更新Python版本,相应地更新 src/ai/backend/krunner/{distro_}/krunner-python.{distro}.txt 和dockerfile(包括python和wheels),包括 PYTHON_VERSION 环境变量和静态构建的Python发行版的下载URL。
  1. 增加作为标签 ai.backend.krunner.version 指定的 卷版本号,在 src/ai/backend/krunner/{distro_}/krunner-env.{distro}.dockerfile 中。
  2. 运行 scripts/build.py
  3. 为每个发行版版本重复上述步骤。(对于静态构建,只有一个。)
  4. src/ai/backend/krunner/{distro_}/__init__.py 中增加 包版本号
  5. rm -r dist/* build/* (如果这些目录不存在或为空则跳过)
  6. 提交。
  7. 创建一个签名的注释标签,并将标签推送到GitHub Action以构建和发布wheels。

注意,src/ai/backend/krunner/{distro_}/krunner-version.{distro}.txt 文件会被构建脚本从标签覆盖。

警告:在更新Python运行时版本以与一些测试设置和客户站点兼容时,我们应该选择x86_64_v2 二进制文件从indygreg存储库。

制作与这个krunner包兼容的最小glibc基于的镜像

使用CentOS 7或更高版本,安装此包列表。同时参考测试脚本

构建自定义ttyd二进制文件

⚠️ 注意:使用x86-64主机构建ttyd,因为

  • ttyd使用musl作为它们的C stdlib,而不是glibc
  • 构建脚本使用的musl toochain是x86-64二进制文件。

libwebsockets>=4.0.0 具有默认间隔为5分钟的自动ping/pong功能。(https://github.com/warmcat/libwebsockets#connection-validity-tracking)此外,ws_ping_pong_intervallibwebsockets>=4.0.0中的ttyd不生效。这似乎是为什么ttyd>=1.6.1不设置ws_ping_pong_interval的原因,对于libwebsockets>=4.0.0。(https://github.com/tsl0922/ttyd/blob/master/src/server.c#L456

为了解决这个问题,我们手动修改和构建ttyd构建脚本使用的最新版本的libwebsockets

# Prepare Ubuntu environment (possibly, through container) and dependencies.
sudo apt-get update
sudo apt-get install -y autoconf automake build-essential cmake curl file libtool

# Download ttyd source.
git clone https://github.com/tsl0922/ttyd.git
cd ttyd

现在让我们修改 ./scripts/cross-build.sh
pushd "${BUILD_DIR}/libwebsockets-${LIBWEBSOCKETS_VERSION}" 之下添加这两行

sed -i 's/context->default_retry.secs_since_valid_ping = 300/context->default_retry.secs_since_valid_ping = 20/g' lib/core/context.c 
sed -i 's/context->default_retry.secs_since_valid_hangup = 310/context->default_retry.secs_since_valid_hangup = 30/g' lib/core/context.c 

最后,构建 ttyd 二进制文件。

# Run build script.
./scripts/cross-build.sh

# Check ttyd binary version.
./build/ttyd --version

项目详情


下载文件

下载适合您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

backend_ai_krunner_static_gnu-4.3.0.tar.gz (7.9 kB 查看哈希值)

上传时间 源码

构建分发版

backend.ai_krunner_static_gnu-4.3.0-py3-none-manylinux2014_x86_64.musllinux_1_1_x86_64.macosx_11_0_x86_64.whl (48.4 MB 查看哈希值)

上传时间 Python 3 macOS 11.0+ x86-64 musllinux: musl 1.1+ x86-64

backend.ai_krunner_static_gnu-4.3.0-py3-none-manylinux2014_aarch64.musllinux_1_1_aarch64.macosx_11_0_arm64.whl (47.1 MB 查看哈希值)

上传时间 Python 3 macOS 11.0+ ARM64 musllinux: musl 1.1+ ARM64

由以下支持