基于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-gnu
,alpine
等,取决于您所在的哪个存储库。{distro_}
是与{distro}
相同的字符串,但将短划线替换为下划线,用于Python包名称和路径。例如,static_gnu
,alpine
。
开发
$ 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 .
如何更新
- 修改Dockerfile和其他内容。
- 要更新Python版本,相应地更新
src/ai/backend/krunner/{distro_}/krunner-python.{distro}.txt
和dockerfile(包括python和wheels),包括PYTHON_VERSION
环境变量和静态构建的Python发行版的下载URL。
- 增加作为标签
ai.backend.krunner.version
指定的 卷版本号,在src/ai/backend/krunner/{distro_}/krunner-env.{distro}.dockerfile
中。 - 运行
scripts/build.py
。 - 为每个发行版版本重复上述步骤。(对于静态构建,只有一个。)
- 在
src/ai/backend/krunner/{distro_}/__init__.py
中增加 包版本号。 rm -r dist/* build/*
(如果这些目录不存在或为空则跳过)- 提交。
- 创建一个签名的注释标签,并将标签推送到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_interval
在libwebsockets>=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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6da61a7a5cb47d363ebf8a9fcb6862a91aae4aeb9d6a95963552432f70a828d7 |
|
MD5 | 9e209b19726fbef142a656d66b97a5d8 |
|
BLAKE2b-256 | e14523d5435ce37abca128f4a10eb1f73b4bb6a5cf25bc53da8f4d3e221d0e83 |
backend.ai_krunner_static_gnu-4.3.0-py3-none-manylinux2014_x86_64.musllinux_1_1_x86_64.macosx_11_0_x86_64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8f880eb9adfa99ce0e86c2b1555ae673c87d937ad1adc120307a4890f2c9cb03 |
|
MD5 | 69b4148c5800d66e31928bfdebaec8f5 |
|
BLAKE2b-256 | 29716cb81c37ea818067b96b4876046e1b18e3edef4c75ba987a22b9cfcd1877 |
backend.ai_krunner_static_gnu-4.3.0-py3-none-manylinux2014_aarch64.musllinux_1_1_aarch64.macosx_11_0_arm64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 16125ec1e767fc12e3eda51b65e99cd3b35ad3cb40e2f33a5983b9be77653034 |
|
MD5 | ed6eb91c1265ceafdb6640f4c925f868 |
|
BLAKE2b-256 | bf4fd2813472af4d5460d7466f5e65612a6d84fafc972e64b10ebf69a359cebc |