From 2513ddf297b58c874aa115b0a098cb088ac4d239 Mon Sep 17 00:00:00 2001 From: craneyuan <1609268+craneyuan@user.noreply.gitee.com> Date: Wed, 6 May 2026 13:59:04 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=80=82=E9=85=8D=20Transformers=205.0?= =?UTF-8?q?.0/5.1.0/5.2.0/5.3.0/5.4.0/5.5.1=20GPU=20=E9=95=9C=E5=83=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 5.0.0~5.5.1 多版本 Dockerfile 及构建脚本 - 合并 CUDA 检查到 GPU 推理步骤,减少 docker run 开销 --- frameworks/transformers/5.0.0/Dockerfile | 16 ++++++ frameworks/transformers/5.0.0/README.md | 32 ++++++++++++ frameworks/transformers/5.0.0/build.conf | 4 ++ frameworks/transformers/5.0.0/test.sh | 46 ++++++++++++++++++ frameworks/transformers/5.0.0/test_result.png | Bin 0 -> 37869 bytes frameworks/transformers/5.1.0/Dockerfile | 16 ++++++ frameworks/transformers/5.1.0/README.md | 32 ++++++++++++ frameworks/transformers/5.1.0/build.conf | 4 ++ frameworks/transformers/5.1.0/test.sh | 46 ++++++++++++++++++ frameworks/transformers/5.1.0/test_result.png | Bin 0 -> 37368 bytes frameworks/transformers/5.2.0/Dockerfile | 16 ++++++ frameworks/transformers/5.2.0/README.md | 32 ++++++++++++ frameworks/transformers/5.2.0/build.conf | 4 ++ frameworks/transformers/5.2.0/test.sh | 46 ++++++++++++++++++ frameworks/transformers/5.2.0/test_result.png | Bin 0 -> 38777 bytes frameworks/transformers/5.3.0/Dockerfile | 16 ++++++ frameworks/transformers/5.3.0/README.md | 32 ++++++++++++ frameworks/transformers/5.3.0/build.conf | 4 ++ frameworks/transformers/5.3.0/test.sh | 46 ++++++++++++++++++ frameworks/transformers/5.3.0/test_result.png | Bin 0 -> 37789 bytes frameworks/transformers/5.4.0/Dockerfile | 16 ++++++ frameworks/transformers/5.4.0/README.md | 32 ++++++++++++ frameworks/transformers/5.4.0/build.conf | 4 ++ frameworks/transformers/5.4.0/test.sh | 46 ++++++++++++++++++ frameworks/transformers/5.4.0/test_result.png | Bin 0 -> 37301 bytes frameworks/transformers/5.5.1/Dockerfile | 16 ++++++ frameworks/transformers/5.5.1/README.md | 32 ++++++++++++ frameworks/transformers/5.5.1/build.conf | 4 ++ frameworks/transformers/5.5.1/test.sh | 46 ++++++++++++++++++ frameworks/transformers/5.5.1/test_result.png | Bin 0 -> 36712 bytes 30 files changed, 588 insertions(+) create mode 100644 frameworks/transformers/5.0.0/Dockerfile create mode 100644 frameworks/transformers/5.0.0/README.md create mode 100644 frameworks/transformers/5.0.0/build.conf create mode 100755 frameworks/transformers/5.0.0/test.sh create mode 100644 frameworks/transformers/5.0.0/test_result.png create mode 100644 frameworks/transformers/5.1.0/Dockerfile create mode 100644 frameworks/transformers/5.1.0/README.md create mode 100644 frameworks/transformers/5.1.0/build.conf create mode 100755 frameworks/transformers/5.1.0/test.sh create mode 100644 frameworks/transformers/5.1.0/test_result.png create mode 100644 frameworks/transformers/5.2.0/Dockerfile create mode 100644 frameworks/transformers/5.2.0/README.md create mode 100644 frameworks/transformers/5.2.0/build.conf create mode 100755 frameworks/transformers/5.2.0/test.sh create mode 100644 frameworks/transformers/5.2.0/test_result.png create mode 100644 frameworks/transformers/5.3.0/Dockerfile create mode 100644 frameworks/transformers/5.3.0/README.md create mode 100644 frameworks/transformers/5.3.0/build.conf create mode 100755 frameworks/transformers/5.3.0/test.sh create mode 100644 frameworks/transformers/5.3.0/test_result.png create mode 100644 frameworks/transformers/5.4.0/Dockerfile create mode 100644 frameworks/transformers/5.4.0/README.md create mode 100644 frameworks/transformers/5.4.0/build.conf create mode 100755 frameworks/transformers/5.4.0/test.sh create mode 100644 frameworks/transformers/5.4.0/test_result.png create mode 100644 frameworks/transformers/5.5.1/Dockerfile create mode 100644 frameworks/transformers/5.5.1/README.md create mode 100644 frameworks/transformers/5.5.1/build.conf create mode 100755 frameworks/transformers/5.5.1/test.sh create mode 100644 frameworks/transformers/5.5.1/test_result.png diff --git a/frameworks/transformers/5.0.0/Dockerfile b/frameworks/transformers/5.0.0/Dockerfile new file mode 100644 index 0000000..078c16a --- /dev/null +++ b/frameworks/transformers/5.0.0/Dockerfile @@ -0,0 +1,16 @@ +FROM opencloudos/opencloudos9-cuda-devel:12.8 + +LABEL maintainer="OpenCloudOS Community" +LABEL org.opencontainers.image.source="https://gitee.com/OpenCloudOS/ai-agent-container" +LABEL org.opencontainers.image.description="HuggingFace Transformers 5.0.0 (GPU) on OpenCloudOS 9" + +RUN dnf install -y python3-pip && dnf clean all && rm -rf /var/cache/yum/* + +RUN pip3 install --no-cache-dir uv \ + && uv pip install --no-cache-dir transformers[torch]==5.0.0 --system + +ENV NVIDIA_VISIBLE_DEVICES=all + +RUN echo $(date +"%Y-%m-%dT%H:%M:%S%z") > /opencloudos_build_date.txt + +CMD ["python3"] diff --git a/frameworks/transformers/5.0.0/README.md b/frameworks/transformers/5.0.0/README.md new file mode 100644 index 0000000..1241013 --- /dev/null +++ b/frameworks/transformers/5.0.0/README.md @@ -0,0 +1,32 @@ +# Transformers on OpenCloudOS 9 + +## 基本信息 +- **框架版本**:5.0.0 +- **基础镜像**:opencloudos/opencloudos9-cuda-devel:12.8 +- **Python 版本**:3.x(系统默认) +- **CUDA 版本**:12.8 +- **核心组件**:HuggingFace Transformers 5.0.0 + PyTorch + +## 构建 + +```bash +docker build -t oc9-transformers:5.0.0 . +``` + +## 使用示例 + +```bash +# CPU 模式 +docker run --rm oc9-transformers:5.0.0 python3 -c "import transformers; print(transformers.__version__)" + +# GPU 模式 +docker run --rm --gpus all oc9-transformers:5.0.0 python3 -c " +import torch +print(f'CUDA available: {torch.cuda.is_available()}') +import transformers +print(f'Transformers: {transformers.__version__}') +" +``` + +## 已知问题 +- 无 diff --git a/frameworks/transformers/5.0.0/build.conf b/frameworks/transformers/5.0.0/build.conf new file mode 100644 index 0000000..cabba52 --- /dev/null +++ b/frameworks/transformers/5.0.0/build.conf @@ -0,0 +1,4 @@ +# transformers 5.0.0 on OpenCloudOS 9 (GPU) +IMAGE_NAME=oc9-transformers +IMAGE_TAG=5.0.0 +GPU_TEST=true diff --git a/frameworks/transformers/5.0.0/test.sh b/frameworks/transformers/5.0.0/test.sh new file mode 100755 index 0000000..bcca08c --- /dev/null +++ b/frameworks/transformers/5.0.0/test.sh @@ -0,0 +1,46 @@ +#!/bin/bash +set -e + +IMAGE="${1:?ERROR: 缺少镜像参数。用法: bash test.sh }" + +echo "=== Transformers 5.0.0 功能测试 ===" + +# 1. 验证框架导入及版本 +echo -n "检查 transformers import... " +docker run --rm "$IMAGE" python3 -c " +import transformers +assert transformers.__version__ == '5.0.0', f'版本不匹配: {transformers.__version__}' +print(transformers.__version__) +" && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } + +# 2. 验证核心功能 — AutoTokenizer +echo -n "检查 AutoTokenizer... " +docker run --rm "$IMAGE" python3 -c " +import warnings +warnings.filterwarnings('ignore') +from transformers import AutoTokenizer +tok = AutoTokenizer.from_pretrained('google-bert/bert-base-uncased') +out = tok('Hello, world!', return_tensors='pt') +assert 'input_ids' in out, 'input_ids not found' +print('ok') +" && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } + +# 3. 验证 CUDA 环境及 GPU 推理 — BertModel +echo -n "检查 CUDA + GPU 推理... " +docker run --rm --gpus all "$IMAGE" python3 -c " +import warnings +warnings.filterwarnings('ignore') +import torch +assert torch.cuda.is_available(), 'CUDA not available' +print(f'GPU: {torch.cuda.get_device_name(0)}') +from transformers import AutoModel, AutoTokenizer +tok = AutoTokenizer.from_pretrained('google-bert/bert-base-uncased') +model = AutoModel.from_pretrained('google-bert/bert-base-uncased').cuda() +inputs = tok('Hello', return_tensors='pt').to('cuda') +with torch.no_grad(): + out = model(**inputs) +assert out.last_hidden_state.shape[0] == 1, 'batch size mismatch' +print('ok') +" && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } + +echo "=== 所有测试通过 ===" diff --git a/frameworks/transformers/5.0.0/test_result.png b/frameworks/transformers/5.0.0/test_result.png new file mode 100644 index 0000000000000000000000000000000000000000..231060a0b9e1e5eab0e4a352accaf900f6c94f92 GIT binary patch literal 37869 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 G_x}TTIaOu= literal 0 HcmV?d00001 diff --git a/frameworks/transformers/5.1.0/Dockerfile b/frameworks/transformers/5.1.0/Dockerfile new file mode 100644 index 0000000..b525b12 --- /dev/null +++ b/frameworks/transformers/5.1.0/Dockerfile @@ -0,0 +1,16 @@ +FROM opencloudos/opencloudos9-cuda-devel:12.8 + +LABEL maintainer="OpenCloudOS Community" +LABEL org.opencontainers.image.source="https://gitee.com/OpenCloudOS/ai-agent-container" +LABEL org.opencontainers.image.description="HuggingFace Transformers 5.1.0 (GPU) on OpenCloudOS 9" + +RUN dnf install -y python3-pip && dnf clean all && rm -rf /var/cache/yum/* + +RUN pip3 install --no-cache-dir uv \ + && uv pip install --no-cache-dir transformers[torch]==5.1.0 --system + +ENV NVIDIA_VISIBLE_DEVICES=all + +RUN echo $(date +"%Y-%m-%dT%H:%M:%S%z") > /opencloudos_build_date.txt + +CMD ["python3"] diff --git a/frameworks/transformers/5.1.0/README.md b/frameworks/transformers/5.1.0/README.md new file mode 100644 index 0000000..48d1aad --- /dev/null +++ b/frameworks/transformers/5.1.0/README.md @@ -0,0 +1,32 @@ +# Transformers on OpenCloudOS 9 + +## 基本信息 +- **框架版本**:5.1.0 +- **基础镜像**:opencloudos/opencloudos9-cuda-devel:12.8 +- **Python 版本**:3.x(系统默认) +- **CUDA 版本**:12.8 +- **核心组件**:HuggingFace Transformers 5.1.0 + PyTorch + +## 构建 + +```bash +docker build -t oc9-transformers:5.1.0 . +``` + +## 使用示例 + +```bash +# CPU 模式 +docker run --rm oc9-transformers:5.1.0 python3 -c "import transformers; print(transformers.__version__)" + +# GPU 模式 +docker run --rm --gpus all oc9-transformers:5.1.0 python3 -c " +import torch +print(f'CUDA available: {torch.cuda.is_available()}') +import transformers +print(f'Transformers: {transformers.__version__}') +" +``` + +## 已知问题 +- 无 diff --git a/frameworks/transformers/5.1.0/build.conf b/frameworks/transformers/5.1.0/build.conf new file mode 100644 index 0000000..be84336 --- /dev/null +++ b/frameworks/transformers/5.1.0/build.conf @@ -0,0 +1,4 @@ +# transformers 5.1.0 on OpenCloudOS 9 (GPU) +IMAGE_NAME=oc9-transformers +IMAGE_TAG=5.1.0 +GPU_TEST=true diff --git a/frameworks/transformers/5.1.0/test.sh b/frameworks/transformers/5.1.0/test.sh new file mode 100755 index 0000000..d2429cf --- /dev/null +++ b/frameworks/transformers/5.1.0/test.sh @@ -0,0 +1,46 @@ +#!/bin/bash +set -e + +IMAGE="${1:?ERROR: 缺少镜像参数。用法: bash test.sh }" + +echo "=== Transformers 5.1.0 功能测试 ===" + +# 1. 验证框架导入及版本 +echo -n "检查 transformers import... " +docker run --rm "$IMAGE" python3 -c " +import transformers +assert transformers.__version__ == '5.1.0', f'版本不匹配: {transformers.__version__}' +print(transformers.__version__) +" && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } + +# 2. 验证核心功能 — AutoTokenizer +echo -n "检查 AutoTokenizer... " +docker run --rm "$IMAGE" python3 -c " +import warnings +warnings.filterwarnings('ignore') +from transformers import AutoTokenizer +tok = AutoTokenizer.from_pretrained('google-bert/bert-base-uncased') +out = tok('Hello, world!', return_tensors='pt') +assert 'input_ids' in out, 'input_ids not found' +print('ok') +" && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } + +# 3. 验证 CUDA 环境及 GPU 推理 — BertModel +echo -n "检查 CUDA + GPU 推理... " +docker run --rm --gpus all "$IMAGE" python3 -c " +import warnings +warnings.filterwarnings('ignore') +import torch +assert torch.cuda.is_available(), 'CUDA not available' +print(f'GPU: {torch.cuda.get_device_name(0)}') +from transformers import AutoModel, AutoTokenizer +tok = AutoTokenizer.from_pretrained('google-bert/bert-base-uncased') +model = AutoModel.from_pretrained('google-bert/bert-base-uncased').cuda() +inputs = tok('Hello', return_tensors='pt').to('cuda') +with torch.no_grad(): + out = model(**inputs) +assert out.last_hidden_state.shape[0] == 1, 'batch size mismatch' +print('ok') +" && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } + +echo "=== 所有测试通过 ===" diff --git a/frameworks/transformers/5.1.0/test_result.png b/frameworks/transformers/5.1.0/test_result.png new file mode 100644 index 0000000000000000000000000000000000000000..a2c16a5fa965eb42a378077ab53e988cb4cff82c GIT binary patch literal 37368 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 Nl$g9|sqotm{}121Tc`j4 literal 0 HcmV?d00001 diff --git a/frameworks/transformers/5.2.0/Dockerfile b/frameworks/transformers/5.2.0/Dockerfile new file mode 100644 index 0000000..e36675b --- /dev/null +++ b/frameworks/transformers/5.2.0/Dockerfile @@ -0,0 +1,16 @@ +FROM opencloudos/opencloudos9-cuda-devel:12.8 + +LABEL maintainer="OpenCloudOS Community" +LABEL org.opencontainers.image.source="https://gitee.com/OpenCloudOS/ai-agent-container" +LABEL org.opencontainers.image.description="HuggingFace Transformers 5.2.0 (GPU) on OpenCloudOS 9" + +RUN dnf install -y python3-pip && dnf clean all && rm -rf /var/cache/yum/* + +RUN pip3 install --no-cache-dir uv \ + && uv pip install --no-cache-dir transformers[torch]==5.2.0 --system + +ENV NVIDIA_VISIBLE_DEVICES=all + +RUN echo $(date +"%Y-%m-%dT%H:%M:%S%z") > /opencloudos_build_date.txt + +CMD ["python3"] diff --git a/frameworks/transformers/5.2.0/README.md b/frameworks/transformers/5.2.0/README.md new file mode 100644 index 0000000..e87147f --- /dev/null +++ b/frameworks/transformers/5.2.0/README.md @@ -0,0 +1,32 @@ +# Transformers on OpenCloudOS 9 + +## 基本信息 +- **框架版本**:5.2.0 +- **基础镜像**:opencloudos/opencloudos9-cuda-devel:12.8 +- **Python 版本**:3.x(系统默认) +- **CUDA 版本**:12.8 +- **核心组件**:HuggingFace Transformers 5.2.0 + PyTorch + +## 构建 + +```bash +docker build -t oc9-transformers:5.2.0 . +``` + +## 使用示例 + +```bash +# CPU 模式 +docker run --rm oc9-transformers:5.2.0 python3 -c "import transformers; print(transformers.__version__)" + +# GPU 模式 +docker run --rm --gpus all oc9-transformers:5.2.0 python3 -c " +import torch +print(f'CUDA available: {torch.cuda.is_available()}') +import transformers +print(f'Transformers: {transformers.__version__}') +" +``` + +## 已知问题 +- 无 diff --git a/frameworks/transformers/5.2.0/build.conf b/frameworks/transformers/5.2.0/build.conf new file mode 100644 index 0000000..0b08cd6 --- /dev/null +++ b/frameworks/transformers/5.2.0/build.conf @@ -0,0 +1,4 @@ +# transformers 5.2.0 on OpenCloudOS 9 (GPU) +IMAGE_NAME=oc9-transformers +IMAGE_TAG=5.2.0 +GPU_TEST=true diff --git a/frameworks/transformers/5.2.0/test.sh b/frameworks/transformers/5.2.0/test.sh new file mode 100755 index 0000000..13a2454 --- /dev/null +++ b/frameworks/transformers/5.2.0/test.sh @@ -0,0 +1,46 @@ +#!/bin/bash +set -e + +IMAGE="${1:?ERROR: 缺少镜像参数。用法: bash test.sh }" + +echo "=== Transformers 5.2.0 功能测试 ===" + +# 1. 验证框架导入及版本 +echo -n "检查 transformers import... " +docker run --rm "$IMAGE" python3 -c " +import transformers +assert transformers.__version__ == '5.2.0', f'版本不匹配: {transformers.__version__}' +print(transformers.__version__) +" && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } + +# 2. 验证核心功能 — AutoTokenizer +echo -n "检查 AutoTokenizer... " +docker run --rm "$IMAGE" python3 -c " +import warnings +warnings.filterwarnings('ignore') +from transformers import AutoTokenizer +tok = AutoTokenizer.from_pretrained('google-bert/bert-base-uncased') +out = tok('Hello, world!', return_tensors='pt') +assert 'input_ids' in out, 'input_ids not found' +print('ok') +" && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } + +# 3. 验证 CUDA 环境及 GPU 推理 — BertModel +echo -n "检查 CUDA + GPU 推理... " +docker run --rm --gpus all "$IMAGE" python3 -c " +import warnings +warnings.filterwarnings('ignore') +import torch +assert torch.cuda.is_available(), 'CUDA not available' +print(f'GPU: {torch.cuda.get_device_name(0)}') +from transformers import AutoModel, AutoTokenizer +tok = AutoTokenizer.from_pretrained('google-bert/bert-base-uncased') +model = AutoModel.from_pretrained('google-bert/bert-base-uncased').cuda() +inputs = tok('Hello', return_tensors='pt').to('cuda') +with torch.no_grad(): + out = model(**inputs) +assert out.last_hidden_state.shape[0] == 1, 'batch size mismatch' +print('ok') +" && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } + +echo "=== 所有测试通过 ===" diff --git a/frameworks/transformers/5.2.0/test_result.png b/frameworks/transformers/5.2.0/test_result.png new file mode 100644 index 0000000000000000000000000000000000000000..cb1fe6dad6e32d188bca96e7d482e243965bf09d GIT binary patch literal 38777 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 E0AR4!p8x;= literal 0 HcmV?d00001 diff --git a/frameworks/transformers/5.3.0/Dockerfile b/frameworks/transformers/5.3.0/Dockerfile new file mode 100644 index 0000000..968934b --- /dev/null +++ b/frameworks/transformers/5.3.0/Dockerfile @@ -0,0 +1,16 @@ +FROM opencloudos/opencloudos9-cuda-devel:12.8 + +LABEL maintainer="OpenCloudOS Community" +LABEL org.opencontainers.image.source="https://gitee.com/OpenCloudOS/ai-agent-container" +LABEL org.opencontainers.image.description="HuggingFace Transformers 5.3.0 (GPU) on OpenCloudOS 9" + +RUN dnf install -y python3-pip && dnf clean all && rm -rf /var/cache/yum/* + +RUN pip3 install --no-cache-dir uv \ + && uv pip install --no-cache-dir transformers[torch]==5.3.0 --system + +ENV NVIDIA_VISIBLE_DEVICES=all + +RUN echo $(date +"%Y-%m-%dT%H:%M:%S%z") > /opencloudos_build_date.txt + +CMD ["python3"] diff --git a/frameworks/transformers/5.3.0/README.md b/frameworks/transformers/5.3.0/README.md new file mode 100644 index 0000000..5c95ff3 --- /dev/null +++ b/frameworks/transformers/5.3.0/README.md @@ -0,0 +1,32 @@ +# Transformers on OpenCloudOS 9 + +## 基本信息 +- **框架版本**:5.3.0 +- **基础镜像**:opencloudos/opencloudos9-cuda-devel:12.8 +- **Python 版本**:3.x(系统默认) +- **CUDA 版本**:12.8 +- **核心组件**:HuggingFace Transformers 5.3.0 + PyTorch + +## 构建 + +```bash +docker build -t oc9-transformers:5.3.0 . +``` + +## 使用示例 + +```bash +# CPU 模式 +docker run --rm oc9-transformers:5.3.0 python3 -c "import transformers; print(transformers.__version__)" + +# GPU 模式 +docker run --rm --gpus all oc9-transformers:5.3.0 python3 -c " +import torch +print(f'CUDA available: {torch.cuda.is_available()}') +import transformers +print(f'Transformers: {transformers.__version__}') +" +``` + +## 已知问题 +- 无 diff --git a/frameworks/transformers/5.3.0/build.conf b/frameworks/transformers/5.3.0/build.conf new file mode 100644 index 0000000..dcc451e --- /dev/null +++ b/frameworks/transformers/5.3.0/build.conf @@ -0,0 +1,4 @@ +# transformers 5.3.0 on OpenCloudOS 9 (GPU) +IMAGE_NAME=oc9-transformers +IMAGE_TAG=5.3.0 +GPU_TEST=true diff --git a/frameworks/transformers/5.3.0/test.sh b/frameworks/transformers/5.3.0/test.sh new file mode 100755 index 0000000..55755e1 --- /dev/null +++ b/frameworks/transformers/5.3.0/test.sh @@ -0,0 +1,46 @@ +#!/bin/bash +set -e + +IMAGE="${1:?ERROR: 缺少镜像参数。用法: bash test.sh }" + +echo "=== Transformers 5.3.0 功能测试 ===" + +# 1. 验证框架导入及版本 +echo -n "检查 transformers import... " +docker run --rm "$IMAGE" python3 -c " +import transformers +assert transformers.__version__ == '5.3.0', f'版本不匹配: {transformers.__version__}' +print(transformers.__version__) +" && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } + +# 2. 验证核心功能 — AutoTokenizer +echo -n "检查 AutoTokenizer... " +docker run --rm "$IMAGE" python3 -c " +import warnings +warnings.filterwarnings('ignore') +from transformers import AutoTokenizer +tok = AutoTokenizer.from_pretrained('google-bert/bert-base-uncased') +out = tok('Hello, world!', return_tensors='pt') +assert 'input_ids' in out, 'input_ids not found' +print('ok') +" && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } + +# 3. 验证 CUDA 环境及 GPU 推理 — BertModel +echo -n "检查 CUDA + GPU 推理... " +docker run --rm --gpus all "$IMAGE" python3 -c " +import warnings +warnings.filterwarnings('ignore') +import torch +assert torch.cuda.is_available(), 'CUDA not available' +print(f'GPU: {torch.cuda.get_device_name(0)}') +from transformers import AutoModel, AutoTokenizer +tok = AutoTokenizer.from_pretrained('google-bert/bert-base-uncased') +model = AutoModel.from_pretrained('google-bert/bert-base-uncased').cuda() +inputs = tok('Hello', return_tensors='pt').to('cuda') +with torch.no_grad(): + out = model(**inputs) +assert out.last_hidden_state.shape[0] == 1, 'batch size mismatch' +print('ok') +" && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } + +echo "=== 所有测试通过 ===" diff --git a/frameworks/transformers/5.3.0/test_result.png b/frameworks/transformers/5.3.0/test_result.png new file mode 100644 index 0000000000000000000000000000000000000000..8f509257264466d0a919edba835f3d7dc03d2bd6 GIT binary patch literal 37789 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⋘5Xp~xR@qnP6i~Dt@F~e>WFuBX)6ML^QO%1xigBjVg#rvNvK}( zf)q`$r27;!=GTC=i068+T993os7c$Bsy zM!Q%GmK3-%ntN*}9~!rhyH0gEYpW0L zkg)qcfASm^2BM_~7EMg795=bPxE%gZ!7@^;++aZU_j<{eJD$wYU)turd~Dcr?_ z*nJPpPwDIu0x#f7yOerc%q4_94~u%`fHW|wf@if=YhY2S291=1WUAYTYKHeXMk;U< zgnpA!*ng*H`r>KjE8IXwCpU((s9By){dYd~+T+dACk@p^K7Fh9NQQctB1kR%s3sSF zt}WpG6Gy?jGoyVFt;CHd=Dp1sD*C+=7eNMc_&qdN{y>;r1E*LeSDcySA$htc|0O3+ zAnS~%JGh*Bc(7K9!$OYdg19ky2=jwwFALRNSI+83^Elqsl#W z9qQakZ|bxp7hN`n2G7 zRxpZ1*^y+3+|Aqb7>&wXcl`ez7Qd4<re~h(6})RO{aD2A3DNR~kSc`+`f?(Ld-by)T=FK#KR z!spUeQzxTD1Zi>?{JYm+Kd*H*(z_3uvUhMPaEXLoKAQ3qtdVU8AOm0g#kbo7x>JnGU4$Zfzg8^-s}2T zQ?r+f?9L4XINs+)af*c{jbwIzowHq+TGqtbT08sY(LK~;rMJEXCNh;ECXm zjpfSry(O->(4Y6k`O&{geQ?D2>j&OGygi+L|01UA0P=Hn)q9_Kw`Y^L4;fik9xm%4 ze|!3q0G_}RK}2}E<#~||zQ!f|i`Ko{6G<$2{@~jqjF&lYdjEEYVNLq~*moF8IgDT3 zHfrqp*ItfM?ELYMp!BGgyvcHiw}+LJhXW zzrv#|yz!7}2REk@aapgW!<20q9=Tf=HE_R}?2rF~d%JS)JgdW{Ad@*KS;KlugMiC| zmBw0LyVDTa_9C0@U{*aZudC8bMbW_lb4-~5QzE|bg`x%g46VC|8g~J~+~NSgAs*ym z?mahJcoV+r|B3~6zRD^_aUYuY4@Y{K$s3UC^RinuE&zcyVb zIxGmb8e4PaHK)xUUihkbjlC6-DK()zy^GbiqEj{UyuoY;LINq?ZH+4!TPd5)pP91n zf!H`l{8MT#%mC~XSg5|Mf7s}s0$*ZeKtk0M#h$lUsP{r)prjmUb1RG$G*d|N>Ly3) z4qYajPR>`FpzxrM7A;b)QVU9tkBI5u7tE!P5;-xISLxKbCLz(5a94`;q2bGoM7t!6 zLOEAMRv%Dl3OFwx~MZgINr!?!UmyO`x1#28h$ z+uHjsz8zu4-c}6Wq&`by-41g7+SVD9mwY=10ZW#;*_L8TBRdIVe>mS}qt2PYr_Y9N zeDnMgZ8TwS*AER!$0Wn!=bfXBvV7+N2!+f0JsUcg-pZV$$pcBVjqg+S>B@Rvl>P% zrsB~G{&O$Z4+1u?i9t3`)gwqplS|B&8G7@N<=gd6flSli zQTBiKREY8gIHA)A+{Af7l(LyL3JSr&SIh;3EbIgg5pP$`{_#}?S$&%hU-msr z9(~#BK?GtaPT{j~aN#tDa)91i%UIC+8c~$X@)lXq_5IMya^NMd$#LKzp52u+>3F;H zc3JnGM?`LQtNt%u;!qY>oO%4oq=wnJOeT&urcrXDKeqgTotalr4jQT#*1sVmJ6=wB z@D8>=OwkT!c>fk>f79cY{BO~cK{r)}D91|{ZzxIIoop$qnKqUN)k23KM6Efs>s5&A zS#?6DgZ9t)48}z{rS#X2@N0%*5Bfb5f{>5xI$3|#Nv$CBH7)TRxOxJN@l0$O_nZg zBlBCwIl*Zr@h3znCcq4p1Th4=L4VUiR{^oT0Cwg;x@ zCjQxNXJO6e#H~FaqqLddl5guAT_SCIS>@InW}M07g#YIufP^QU>|Y#aadq9jKf2TX zxeV=R!5`mqcKTepX%nf(UDbCusj~OM+KEz4QFP_F?0n|;l*i>%{07_#oYPv;AOIjr zqYzQ)!9{OVdDHyrm6+J73%w(SPcd^H&U!$c?R-3){^1L8Y*r{sRj`(?d6MLB!AR{l z%y%Sw>@55FcoUq>e`TMAO}*aXCX*;^V5WL!dL8}*oUB3ftms1&l++C$2d^3aC%BWF zkSU49>-k~2ZTO)HlX346SHaoYw~5WHJI~yFq!~N4>%i^;oAP&&_9`7igG}=N5oXGR z9pMea_n+x~=1o?rO^=+|RIYcc`y7KzCgx%%Vgl2HPrKk|MY8*p^bi8EksXr@*N=hZ zC&;-*hE_YG+G1M>7Jh!MM%iL~mw)PBNyg-)QSUOGyEJEmZROX{hK23MQdh9(fsb+y zlddbUI(Kj*nzN+g==3nCXC8rmSyJ_$c#NV+!y(?lkpgvfi2+MtXe3|acubU^|NI84 zL{@sX2v&)(=~yz%14~zQtnNOjhMT+kQGWGe*HSEDug~-sgA^n-)L9m{E4wa3Ge5-7 zpQ}~VaGZw^pHz3ub(_hBk!LE=h*)h0D(O?EiRQ^FUEwF*z(HewOQ}R3LSK|@wv}EY z&lFywLcPfed>3`^zw$6N)P@jqJ?ZBUuUlt9aU`6+x0S}PefOu;BsDRlX1siLgBTrZ zC|4HoKu^L}A{2h-YtORmd2K*s2lI=c`~Vo0S4k9#R;}YHD$dGa)C)pO!}9>Ohz3;8 zv&7IdoIP=Ujavcp$>DIw7w*L~t)^`yfu(TIYIA~$j0r>ge~9pv&SC##N?CztzqpCX z2$D#Snpi~CRk{A7$V<*Hp&z^pr3V(oue0BCI47pJR2Q~T;WKAh%G&BbtvHwK3rdgJXDSK&1k`89P!$Q5FC20o76}>?9 z-8o*wbRFLH-++oY@1;L=-5<)ZIkM-xe<($xW!1~z^Eh;2_Sz31sNQ>_?{nEWo{&KJ z%c75*z|LVI29(eHLHn0|135c5w&X($j<H*&8n zQ8nGtt z|KRq@_572XYalH$hOzX729o>be*rnj#X=LQ$uVacl6#!L-VzzUsI-tS9f+m>xQx*;VOz zOA&0FE(Zn5m|rns7$0)51+ZdtX|~bAI<{lO9xm%VgIC>e6Z-D$^B8pzeA1ot$rBdJ zpiNU+F?6l5mHGY#@kV;ZN{sqetTCb}W%7FX9TI7N4>u1^eiN4D_c259uTzu859~s{1znCcZo(pH`c4iGimr$)+?2#%u zM9Xy$09^UU7fV&uFSM(OaaZ8g-TBKviflQI+uZw>_;FuYcni@yKqS^|Zglo=dWy?j z(aUsq${aHKSWCk*@kXlMc@NY`YwFGDGO;~Hl;M}y&4mKSt**re_4Mw(%@hZP-nTiE7CAda;IYu%QoO|ERatrfv{NGwW8 zO*Cb=50WqMK#4VqUgcABLjC#7Ku;{fMD>`Tn-8XJsT)xmbZh^-%I&ayIv@O606PEh zZQ7IXogyE7C9ruK1q~-KNjA?28~pO!9v=i$%xYN_qCh2CO+VseJ@%h@Xg`qTVUbBW zmRU&&_b?X`aW`}28$Pz(?%gM4_;O|%I+YS5s)W`g5V1|Lc+()zl2^T>fpRC_$YglG z)0SWJ4fN1?u0$tAjdq{8;LNRjMMKf&$&)+@D@uc&rn3HYw+!aeUF?qZ?+_+b{Wt29 z9fQpEl8ySKK1&pI`eaMU74-u>3)SOOOhOiz?aDl4>^&%)lsu}bPZ_xFv1_6d^WJ-7xshp3 zOjz`PX$=evxS=mtS+?(ry)xsdA!1h*^X1=%Zd8sLuyQ3)){q6yXHIJK9?WcsLW)Ij zYx$9Tf5$o?Rxu9P_hN!kb>U`B>>IMUlr2*2FvTEWVwS%E@6i-&??4pQuv=qyRTcEN zU%Tuk=9s@o{}=9$|2_EsOcm5NIaF^PgiUkd?d-dy^80U+0Aoig4FT3aJAtNNnM31< zNc|$jb%A&dU-e340^ZYzeLL8>=%-i+lVOyoyzTY5Z>Ck-Z_NrCW~z+8_f6utyL+tM zaG}p)DtyH|#*riaas5*>A7$R-Mvkq&h<8U-Hua`SFMH&*k>~XDVB_rk?mR+MHOW_P zd-;E#dU`(=n-5(eGJUkVMx z>bAR(#(&{wCXEEM#dNBMqhY)ytJy2hObS=;Ax2i@C(+wU`=k=a+1qyg;phj9Ju{pw!>N+Q_Oc-`HQnUZ?ls$a)d1PEVb4~B%<_CbGVbw_Y(KvqmREO))( zwYcuF6_y#!ZMSx%`IP@sV}JVI#SN&+Z$8Bqj}U*4euYuEtEF}{h4^kVR>+|l;J4E< zcVr;Ph9{Zs)g@_W;FlnE+g5?`$3XB~kRTUN4x3o{he(J77-j~^>MQa#f^`B+W^Kgo z7GB*VTUT<6ldeq)XydVs34o9b0u6C^Qx24PrR<^qAhx$pdnaYys=-W{2=JBokeBqI zW*UVF#|2_7aUl_#tI}_SC(h&DRv37s^`P(4(g2-&r8C*?>9v5Ray#UbFjy zCoVm&!bF1aTQ>P^4V$s=zNUCuy0}sP@$Im^^P9Hl!l;5c9+_z*nNTcIEk~!Nl31Ek z13bjx4b-(>h>2J}Mx6^gePmKH-@W`VIiR5iJZTrpEE>4qc5+Q42ENT|nv3$#f7pTc z8uY_pSze`HR=>Sb7|jD#Z|GAuA5Zpb$c#s9Vg*c~P)C=r(qdV*_FELdNcaw21nb@f zCPcCPhELd@EXCTLjG4brAv;yvxARANczY86y_i^5I#lC^hLtd7*b!p{c>a`F58B3% ze6cY@nWBKUMjGl-7i<2d0#gR_P2H?Aakre4{4@)sGZ<(*HGOzn8M z>ebGll7(%o2#UC*;as88rI)qDa#!3BI}75L<5MdB0EDRh^fG?uXqCcfKw8cWS75QR zgTmplO5F}aM$CvpVpFFyc?_sQ@2~lY(Ng;C4KfpPDTWgUKll9UZSL~q+kAmK3J(!?}8{q=2FV|l*bFW1@sx0_LtZOnEBoCzeohPmV5C3;Sfw`2XbdL%z|sNe`!4}Cl;Bp&v&Da9)8-; zM?6F*NJy3}xy=1`y#D~|Z%A$z)Y6gcc*i8ptTWRg=1B#k#EkrZB}If@n2E=LP?7-y zF~6d{ce+&ppek!Cy)6EonCQoD*h+1@%GrS%Z5(V0;DB*XC=`4+IQx4uo%@4m>laCl zd+g$S8{$H_deU{JK5XxHU5kJ}Czb)I(zWWn8USXt!(=inO9?4)I}`h8wNw(bRe^w? z@Ih38r^V9ZXnw?@o=z>t;g9ty1p;e{!%u)-)yK78K$yu>z{2c?IB4MjqTU*KGTZQq z!Y?^GYDh8FwO-HH60;$iltPNIL{Avr3~eT#hf5Um59CR5{$8vxn>>SJ@y_drb$@aMu5;gERz@hQ}X?tPMgsOQ;X2Z3#6^zMU zj{U};+9x48`KsZ%q9pfuize*zxqaF0PJMTo8}{G&+!t1bZkcpD zUc`uJ26TK5dgG(DVtPXLtxj@aiG^7Ts~sct`4=~^DZKnD~ z^+wO4xQNZvPRx4~*NY2P9{X5itgQI0c&XO+s_kcV_M1#yn zRk(O_hi}EG?*#qmBOBSe^^i%5m>zIk4Wbn^L#C-!xkTHM{McgGppF|Hi|isEH~E>L z@T3JH{jFuJuf9*q1BIwU%kmyhB`N$R06 z7M}rx!rR3qOL%mL*DBTb^<*&z+1kOE#X@UVTrnAKl5q}70O)$G`KT*By+zcMvoDb z)KtH<^auR=sa#qtx4@B1uVnNUW$_wC$W+i+T|JP&igxAb%S{g7|CD0O2M(!c^J3to z*MyGRvg3Yp#j!p0eq%7^eBAo!OW4`U=EOfVTz1+Pq4z5XUpmOXM)Ret(5auv6IvuU zOVmk)+zS!)kXP^=6R6IGgB)zn{MT82;ZrmT-8Vb>@YLLR=;GJLvJT=PU*lkR;8@bHx-0$u7l!xg65z=ckpF^uVQSAV z?pU0#$Z40*J!0ctnz|1VT_5J{wg$OG6I$&)`7I;A4L8CbngW2kO1Fz`(I|5s&UhGF zx1(XgdcsZiBI4red3yeIwXUva-FGp^*Fs-2Ith9gyfe^O;eSdr+_71_$GQ{ySj5e; zl&`=BF;Q-pAkA=#>U;~laDe;Zj;t8-coRRscy$Sp%2J7cWC|;5cO6d1%*Z~>bu_tu zm{Ub{z~#^3CopcMdiszTcRi{aC=jAaJYneRt>iQ^rwP?9&7?6|#A&Ki(}ED^@j%oJ zt+G0WH@YxMym^C*I*Z3TTgzZ&CQEAWnqrSMe%4R}mRaj(S5WQN8sRC=0o;rZIY5x8HZ2X?2D{Z3s**2JFHF#v;QYMaXeHI$ z+p18QxjdaUZ&-CU6qe1^R%|3Qdl zgTR=ziP<~~YL$%p;2C>-B}_sVE>C9CqFAPTy1cD5ZJ$_m_T(m8+hzR3KlYsk6g>Sy zQY?1(g_ecBy5OBO3qna7l6&ED*<=qCcIGFg2Ud?XK>)8OG;BZIscY$;=O5xwn9bk8 zrQ@YKV-(3Po0{x+Y`c`leIrYO3m;udS)6dm)tdw4q7ZMjmXe?*$EO&nPAHd|s5JR~>&XTQShZLd72v=Yp0&)e_$ z&$L77RFnpW1U&!Yi&%nCAT`!F(;CC=|9|BfEKtw$CtvnN$+|l3U)EP>g$K!9y<_G! zD!#MwxLdeUvpxF^WYR19O)~$oPsXvgC=m1`Uk@xkLz=LdgubJ2-HJ7T zE{&F9_M$96jSkN>HRTS%F-gkywhlj1t_N)i+&f@g)4}pidGKE}0~asK?SCXV&sJTo zrKtF8%Bot|&+?c@xVL_OJQ-ryy~}?0Qyah+^ai@d(P2!_@6FsPR+2?-w(1x?YDnGa z!y~f<;grYg#F$A=OZ|3{wGZ$>^XWS)+}C_U3Z$#yO#rnZQ369?glX=3hSr{CY*Ao@ zdX#=2f1;2%GzC+sGNPaY7z*pB|H+u@ylMUm_Av7C{{O&rdy1~`DO<^zjYa;t4S<|1 zI0xm|`!g2=OA{RA{QYc?ZSb=eaaptXEX%6oRA}_6$H*QYb`LAY)?XBuDU>*1Ro8LM z-U) zgze>(OD|itZby($0{iKr|7uo97k$%BD4E6Dd1e6qEwcRno!tE=oF!09fb0#0oEhqS zCJF4Z1XxV$w_uu!Kk;P_oW<8)^dPHD%_xI!kG~`IeY8%n`i)nUvh0+Px+O$DsrZQW z`dNnSjyvl?O^8JRSrZw`)}~ano1=x&o0PJTXhzNQ)rsX(w+P*fj`z|hWcVOS?fXjgCzA-8; z68F$pJ|6>W7_r3n=-)L!pk~z~&$U!~)d7*>V25lJ9e6Jt;L;<3A`Nu~v&%m~kVXrn zS!Loh3pd|-i79;(!e^+=7~R0V?LS*IbKGj}JR;-h0sR(`>)Ob=RLd<`zR0+c5Yzp&bq?u0qW24xG#Ws6#KGXR1(qBcW8M=Z&$+NG5tGzrHl^6^n_`$azX$z zbwE$D3GqIUEK>8^uY`aYGLdEF8lh9WbWErk$2N6$AJ0-r^}3azO5ae5!ED%m20be&OA8&PO#VvdK1x|_TgbzZ@rOZc zUkWL69%wA^&cKIMe>0ZCAo$*Wb3kv`*xBkn2Gj)GgvH%owaJ#gAv%0dIak4tDFA}G zL-!*o7AlN$P$JealK79ODG!ey8S7+n`eer~bMdm@vL`3<8GYFi{z(iFT8;E!&I|-f&?qQ%bmeiJCxO%rRXKaZPPY86d@}^c+BL4?*|LE#LQz z6;pIs8eR!iS{!oF#&k^FZ zqyR_&KgXee+2AnYehXkki05L*MG(p!QZ(-YfZF00Ke=mG6tWpe(gS6mCyMRA1%r0W zWV#)zftetk_Y$Z(=lVcaYzf!#2b@x;wZtG%+VSnY&u4qw{9?ED)h{%C zdXKV~TT5L0Im*UER~*}&4@I9OJb5wBAMS_~81s;<5NZglxlhUTJaYp#$!1z!93T@M zULzFML8iGL`jz)F^-sF?Q=lwiwu!b>hL@piJaf-3o?hCf4+oGD(22{oNdYLU)XxkO zQOg_uH8S7cwz%qrT2RaQcFDsCoB}%0ILlU*k83woeiaE%h9lu&$Tp5lGe7?y86=&y zT*+0?sA`TMmZj0;3}mt@nm#_Coks#~3MXkaAQuYD@j{W)ysb`0wyMHpL{Ct)qRRQp zhZ;G_Jkm0o106WVCT!N=S7UeD>WhIl)ELMhILC3Cxc?r-bbQ?XtcONAO}sLnIxk z3B35<^U>714slWs+ZRO0Zz5@L1&z{AfXu;1g*$4*52GJ~3&$!WF^A4WDU;sz4$Vl2 zbCIV*s&kLh_xc>gHoGZ3im2Z*}K)|0XG`iD{&__DO;>H0* z0*i*~`>w4{O(mJ9%b*V_y70oRB{ z-{T7=ccoy#Vy&bF=QgGTLM>d}pxXLk4lk_i&d}Wh?gt<~5~J4i!u1u=Zaeg^ls<@S zOLcqtQw{eYTBJtL`wUi^nzBb{eoT7O@$MDrW-NRX2V_H{D@|}JPm=L(beNj!O*e@F z2FmPlS>>UhRgp^UvG2nEPjO!v7S-PM%~6kviio2it#l*ZV31PM4bmmujY=ckLn$57 zJ#;rikHpX&Lo+n*9*lGD=f0owJlFevc;^!rGqY#cf35Y4wRU`blIaYV6Uu`5glIY> z68rJZLoeNS*ok242Y)~o+?o9F*|iq%?eCG^JbrEd@o&mk*w#aU{{=Ey^os?a)9X5m zeLa2?5?AJbv2$?{F$12Udfm&PdGVIj?7Vt$fD#TkcqG^`B{dCOaJCYW{vs2U8Wwae zrhTo)ZPevUxc816CunNlE;pUJ2gLh?y}XL!J5r)OXt|4Pe6kj3LU@$zUP@H5nCU~3 z?g7HWa+oc46O{{8y)Y4M&koiKTgp&NiD2DjP=%_SGgKE7CWT%@WQ>A`LE2%SF<*vyKuxSoG1i^uX)7(kdhHFE_fDRW< zCf*c`8#go0^tFJWLvwf{RiMPley`c`%nx#s;Vu)SYQ1|iPvadhr6nlW7%&tSg=-Bc zNJdlLdmXN4W`#`9vJ%62U9-jsIIOTuDbSzz6y5eL7LI;os>c%8A~A%&LAn0ms$_ps zhFnH@^kxaM95y+D0VfUvgQ%Z;t8l8xh>9PjHWaYS@Ga=GX|6BsQpvw65toe1@M6tz8zm5o-QiK#}wVEh8gBu@g&u}GQ>r{c9;Hp|6l z?6APD$M^3~I_}Uq~FhSg91sX>|8YXsZ(6qp0>bni*f; z&Nxm$v$TV-d!x66@@O9hnuL5CC99A$)lvSyw>H$6rXOW(h=8&M%CB4tc6HZ99rQ-p zxM3|&98&?@ACs4{Z%>MV2m-m<0GxKR*3et0R)%9K$?bSKiR@UC%QDrvNXYE$GpsV- zvF8nG*E4es`2+&J1qC%V5VYZH4+q|Zr^sA}R0e4c4qGck^Jm!wgJJe@T!LEv36vmM9tp$-kGQy6aWi0n2i$4JEIP}5;|cLH zoKkn@F(|}ITIjs+0n3YC%UI3#HzRL(0iRSh>o*%7T>64AF<{WZz9=;JyAeCq8Ntk5T8ufCr zC1ZHP^LMTU4yWSe39F7 z%-cef3^)o;Q2wDx0ojF-+yg;DdG|iy{q~)GnbfcP_nam=>HVp6EQotlstU+sGu>== z<|z`{Wg-RLkE`p<3m!QG1sO)4NsF`zwU3x)FQMsB*}YF>@^Ic;6DAC$AzGvYA>6f+PW*aWwo(Wl^77Os-0iT|!da)rwdQ zW1)b!BctnYvUAqX3H6J0dK&(KN?2YQtIDY2wfp3s{x8$YS@iAeb?)54s zI>(4F1ymaJi7AC@G`yw}CSg9_#HT~7W_Fd{N_-gfp9nZOlBXI-hm>hM9e3L%JBk1h zee2uj4qXO4vm}q)F`bHbvzRSnUEfKJ=q)YWoftn`NyDT?y@j^@6?V5g z>qvMZ1GJb|&4v0`1L7|y&H)R-56elz&EF{;<;1D(wvDdg*(_BldD))?e8=+h?`d%w zZ2QcF9H-jKWg_`NPXQ^zBQ(}`+=y4Bxw_mb%lSuFXuhx*f^}mB5D46anL8YOb2KWoWe_iwoQ`Vbc1_=nH=H8U~;;7L8}S8j}%!5HML3 zT5$4HN3S!uJRbs(n%Jh~M}YDQvJsbdL~X|?0KWb>xIGPNHX?3545&^JplBV#3zOc# zL?{CL2uyE_S^2$O0OqWoW0p!>_=^*PY0N=CqX&d409O<;v2V0>! zgFN+*whjOf()8&39}-h!eh}_?jkKwE5ADmsM%&)K_SDS;c&!p+0?a@6M8nGl(OMQ> zk06$v>tjvJd1zz^3dH2Gds2h234l$_Jj#k!=fA+UV#AAE!A8K$H0u=jiU| zH#u(t^a{K+xvFn<|I9AWwrbr}k=dLRAl1cOYI95(umvx^hwNiViO~A!N*JOjz5b4= zPcg(@mu@icJq)?5zSNs&@!H(xTMumRFnk+(Y9tMOhEv$CR+B_RWDEFG;nhu!_Ez_x zpB8uJ(Q#FU$B+M@HJ|+M8Ardk=L>ufcojbT?Wp-jU)8@1N!*|V2q;oDK7`IjFdP1j zP1IDycJ%+idi~YOB?eqX67svioHGpn!UuPYwmYzI9{=f&3LB+ri@ekrgYSVcl4zcr z@4Pk93PAuh(fOf7U^}>)j7O*U=1Uh~O*U9H{qh{;z5eZ-d-AgzsnG7P=F;D8uz%TW z)ZwDNC;ZKN1KTL9mT0%@nP+HW_-k1Uz6K0)RYf4jtyd%<9!CpQsuGJXh|}_d=g40SrU_ z;z!gHIGHZu_Ug6O-vJBd^)p@c*@ zDXxTqgoH^s%;iJ>o%f-B9pP+Qp=^~#cPBw#Ja3bwU9-OK{8F(YkoE-*?ZO>0!9O%f zQatZ7`TM_mb?wbGO{Z)%oEUM5*;7NGD^E-_;ruNp+~HmVtAsx~lujqvPX^zTtI=Ql z;ef2)ql&Fje zT>e&aXodNVUU%Sid@#k-~hS)n)MAFSIF;nh3->LV^QvJ@kBUl$KFcJp0-=PB^ zk+nsY2##+cRhkl_7V+p>amQHW=)s5N`G?h5i$;ffA7S`H~M9t(nVMGKjGQ_ez z>HNmZw;HEUp_KHdoFkjF9(D{ZAUAUeNnS#kJh!RazQ%wm4dQC)2oH3n&I#OYq{}%1 zDK4xMaIQBRe*xE)q?;mbkT-HP?@O=ght z#*E98daZ7$?Qn|YohKUx78KbNswP#9Qrl%&)3(hAYu6po5 zvg&EGJ8fQ@mti@_iEU8LgiKP}v0XKiqixYn=u_6$q=V0;@fAzhWe;6F`_wYl0-Ofj zxFi^&%MzuwZsceC;0g00_Sd|te8pZS5-r`B%L_@<{W#GE9%#EdIiC%@n^}3^TFxC% zmCeq1EQqaQz#yb4eawcW!S+yhej3uUNpK{Q3|71Ma(=E<4o^n;c36)(FqD$I_**GQ z?=#IwPyzN9zG8`FpWDOYk`^saHeP8pWV}mxkOb&;z3{H->X;(Mt2fjF*3~@=;G5_m zEqh;z9KK9^=l(a9?=I-DaHQ{=S!`L~qMvsJZ;Y;ywa$+IkR zGd9nkAq{Vo=kfeZSjnOlmAq#!&R0!h?XHxY?K%pg>@$6WSK^}iaeLk`&9`z{1|$6X z>rm$gZEIZ|^JgEi&}4aF=~hRT+$e9uoH+8TTcV~vY+{%{J05-2%uQf*Q<>N|C|s#?90zcm zNxI#}qx3kajyFhtg3{WyH{A|e7cKlNJ)jR)94P9CmY42B^XLHI0PBi&>NZ80*M9Ja z2p?*u**KvM5R=Ju21-sVYSDA1;NS!xWOsQHX9zCbAhE1mgEhBXmsnXZA@^o8Js-FM z2iQ;ozFo^*Zvnk{vLHW2139^rA!d@#1%hS4ZFAtw{AWu}7Z=lyu zZ~XnFi+iFN-fqQBDPzY%uYFfxYG+R1V0pP&|K#|3Zje8@4AR0O7^UQL zgoPBR`v$Sy7$rXE*PY80uvsJ17fb#=wr?1 z@5;TFl%~2ph|_3@8on+wL^q{E^Cb`VPEgQ2fyT=2n8X=!$=!LT@4ZtJvK3{+)}In* zOb1Gv&Q!zmRC?zn31E=D7}PKr&w}??!F6zd^gcybf&Mb%!K3HrpxoH)oH|8;aeYDTwl;cN5TZRtXT-n^BKx=*>w~an68#{+<4iJQ(;DL80h+xxd z5(d5P>AV%3@ySl>eng_PW2h*IdK3E|<=N{S!ZP~ZWgv&rMg=V9IY14;RU{}zl z!wlkregxC3dS;MsC^zXWFEt;HPV#c?tW~0ZUuo%ljJbZky`pKM*ecfJqK-*Y84pWM zxinFwqe#EO?N+`W6aQxI*@=Zo%4a-xpZQRS9ljZ?DnOhx<&NA>6A=`Ojyg236W-nv zRNojUDsc9jx7QTV;)QkS1t4C4oZTIJ#}!ik&YYYicUt{I>1N7Tz+ z_I{W`IqjhvF#;E7xu?jj`tuV{bzo(1pewFkSN27(5||Gfg8W3g+x~68z{5=9ubvaf z$`IV2)%SMlZ2r%#jOO2Oa{_g^77oaIlk_lYA`#=`Apo{KrAt}&WijtW%etRL-37sy zAG0tWpUrvSs-`@SX%V!`NXpaEY7aM`zmX~JQGhy;4LB)IX~l|oL^+gySP-cuiD1SAm>js{o)N1Z~%a>NI$s~OD6E_bG(Jg`sbt1>Q4aiK)Vb2(<*;-b*^5z%pu zUr8&n-8#5HgA*t2gA+yk_wmUK!pj&V$2j9p9^1mkpesN|(4bRz40Smc> z&Ww<_IN+?Nf84n@oQ;Z^`>izl^pK#sRpD7l6ZBQW>y#Kn+~$-z!#CA|SRosFqDw#s zl*kj2=mHY{9q58HmLt5t8;Vm1Xj^C8G}Jfw+N*sO=!cq+?5~~G@tw+*LYTf@@Yxi! zqDzT5i?OQ{mX6DvV_&`!vGYTaE8F!PhQdE*^_;}tqACy5ZwbSif+^fG5Q|&e@MPKa8vwjub;MNm>W_2?sN$`tV= z3n2J8|LL@h7i9h#*jI~iP2z!sui56W1?5jJ#64WFPI;48?$M4r{%JO3EXX@04*eN{ zU+Uvg)a@UFbSdL3@P#&DacR#yOlKl}ZUN`mFw*_J5+%CLVA$H!#)eL@gX)-VjyG?J zoIX@Kg;#p9zDH2jyPf1H5Hp6 zq@Y4!(+E6Y%^#6{-`)3TWPhn{%P_v4%M7A<@Md@Lds@q(0hSUh)j0N%&tf>JajYIejTK&b$9CkXJ&0>zDcCGH*_xWp4aP^BHTO~r>u7IOk;M4OkkIfG~oLb-9rI|l7an9$4T5_t*{;`{?xr@lgQuI zJ@=A+MgnACFV{&S*c3PCsn*<7Z{aG1^IcGqm|zB_^6**9fP7uN9;=F}hLbs&gS}eH zI^;EKcU|%4`)TW=OI;r~J2(D8u>hvtU1XyKSKfUNzL3@W$XJ-ajkkt~IH@q0l8552 z^ZWZxIseIl9ia|B1>?cBQ?~6kS`Q7ZmJa&BxKcJ1UV~%;M4vR=L>Aztk#(9!Q#$dR z3KaOsTre}IM4DxJ=jvejE(zBaZmf9*E&Go#FNci(s`qyjv-aGBP2tDgC|aaJiJb^A zBsh&pwW-q7-(QlDR?iG5Bjfm|?O|2#cdKlr>#c{FYLw2-$e|P(&&U$iKJW{m1l^C-o0}>+tE6AqD<{(QxeXOE59^p_My_}yn;PQOqSuHFiIJ>=_>9kRBvg`r_V5X(7sut$(G2>Y0;U1zm>&-M;VaGjGuTY zpBRFOcUf}1hsu1PX5kPNiPM0y{})_vd%@6a0>|WJceR7=(k)Pbn&NX!7}1CgJ!P5V z{0lRzR13)B)7G z-;MFtmp)D8|IXK0Pezf$a`5c&dU7!4%#F-!{-e)^SEKNfS_dEBAKDI8lz#4Pp*eooB)pwSg2Yn{XUe~TOGM* z5B0lA&wR&1R$O%J38!)Fs1*-ZD*FsT48?pLCZ1pEK$n`#kT}wQBPjLsns4sjbJucK zd`d%i0b=(%w+F5YjeEm$Kv@6fd4#`!bTWR&fN-MXzlc z8*_BaeK!mQ^+%^!JF2vfmW~7g)@VZ@%vIgSZ5C&=wnUB*Ibr9ahB$9Ol^Pa>?UF5A zfX&P%s7g31cqd|ccECeld8~5p6!2}yf!~yIt@bTd@@2*&#?*IR*KbPM(uT`~kniED zxIpRVWcI;6{*1NfEu6Yb6T(=hb`-`P(|DZevyBf2_i)ptorQr@Gm|;gdjLST35lbw zo{)Yi%Th+GvgsgkWfbpoRJYacy*d(McQ1ZVa_+RQ#8nG{6;d8EJ<58w}VRb=*L8Bm)hYo1Xcb=gdfWe_8J zyihXcT6@JQ`5>Pv5LVnF#m;V;VcVaACIv?RUsG??-B78k=s*ur`=TkW!%yxWh zlTCslV!4nuT*cUVkfmE9|2^gvucSn}1Pd?c=@|howI?Op{n~^Ew(br6)huG0wdL)v zB>5jJSJX>kO8OM?Pa_x7i^Tjldr9*1eSt7^ubZ6Gaw2F?5!>Ap0B2+hbF8kNZ)~O+ zYiKeQHtQ=9!00M9LF112>Ra&7(F^%Hm;wxb0hQ>qwro0($q{V3S-1IX>K@#-l;&2m zWu1ok4K8lRCv*~J%e9nh3V?rQv3$jqZF8&%UpmEmA^X@(b8ZtWW8&W$|FN?O;8I z=$YCiXAL}epcsv=Zy%! z6wFFXkTLt=Bd9>cBPx#5YZ$j`QEXKPs6e+cme=TPGSUg_ZE0=FN>o2dz6r_l6Ivqj zKl#)NCJ}-(WeP_6Fe3bw0`J|wJ5907k3Oan@LYn@9M1XQW|_p&%-1e+ijOp7T#K_( z>(aLFK@Qa&=ITEA1!_!K=LiQ+IGwxh@Rr7v~jP#G!#GUfOAGaRH6U^S@#!+raKCrU|W~`qfVX zW83m?*`Zkj#hC+(&-a(UaYZoIF;Fb5`KI%g{id#rj91c$-qWU^?bG5=K%g*von5Eu zyO{RUyNv$+YZ82FtwinUQgY`fxGq<709jGn>+@ zby%JL6{hsq>N4r+eBXjrNXdk37_W33?HG44zzQMhWtDJU-K1>8WdT_B?*%MkuP;U$ zs4+03LzAFX=hyO3+~4-a-{4Zw+Ap{?`3o+gAX3qPgh(at|8F1?%jf?ABC#a=14L3J z9l}49HoG;Hl*(q|6~gi_m}o5i7baR7L6L+1drXx7&zNW^=kVV#k<~|H96_N;FEj`q zlLo>h5VEc5@kf3zKZ7gT#J#aPNHHuy$ILJblOU0?d|LiMn{Dj?y2`?17mV1vhdE%u zO+v!_UbCQSFrO~mN9?7bWcA_m0sqd@&Y0>jpfLZ&|1*XYSsIz$gVZntXyiP5CF^XO z*#T4frk})08a2#Kq{ck*2d##Y*>MTNaHA{lg z7i9zTaVHO5KiGN0-Z~@?*R$IEe>+kx87luMnq}$EbAEaAC_g|!2#WI5sAZK*SAAA?$ zN>1UoUuM*R<19)E%4<1tHx6h%k=wT+?jJEa5Zav_+ZcGvj}g&iD~%}cJEA|Q1tc+j zGk^Xs!csF*NNEy?Rj`3{JE`pyq2z2eV})eq@-LO6bhBx)Iqgf|s_nI%QNu4xjb^&D z4LYdUx+PlDq>V>J#ku1ws*DmG6J->WB9l}<%_}C$iofx9K~gR`eIgY*1~dW^7jMpeF27%m`8ZOp zKigT>0>*n>Zo+OY%-x`@6RYbPwAlW-O}9{?`w9VdoG<+gQ*2#`>L0D;wC|H3P_WrE z8RH7K_{}kcZcXZ=uB2x&LigrR2h5q#{NtZf=Kn_e{R6A_HR>m;XE@7Tv|(I7^qbY= zPt!Rc+WC{7t5wSKWZ(U2#)q`|mFAI^1gwCBX~xapaAm$zXlo9iH~jOzK^DAdRhwc( zgE{Zu$&ACVqkvSqekx|se!}@avgXZb-CKkC_iL~FIgfLv;iW6H{#lykDX2ABQ|^WgQn^@WJUMCYpM z{L=~R3ig{AMt$iN4iBw8ddthrB2^O9lFWJ%9eY>%6Dt+GVMz{>`X?1%QFN`?maB=X z&DtXnR#e^P;Iw87Ka^4`p^mTaC(~yx#Ecb!1c1s9Ec4|jmT{E$PgrI;>uSnQ^nb)M z-LikfG9c6ch-Jk7udvL^{|U=H{R_)rF2V-CE0+kFM3}mW+8JiLfAzyOsa`$k;w;-8a zBja7oZ=n=U%Wt%_`nKq=6!rce>|B)46+5>|%_m{2!)&&@XijF)$AH>@7CcPO(*LU8 zm`*TDgTvmK5Qfmlt$9W{vraJoTUsI@{@1kRk^tWYWm2E*E*zKHI@~YfdmNJk(imL; zB1?Q2Gj~>+H}IjZM5W4Pd_ielJsG1 zZlWAt;9gz#-l8ub)6_5CiL-%6!~7>HhbHXgWenyf3Ra&ZcJ(P8#Ujoe@7b4dL=2nJ zmrcH-JW?J0k|=ukkNg|T%<|r%>IeUJefTf_jf?Mg9(Lm0oF&o`U7SVNfRpcu^|p3e zkvv#3ZnLX5L|n8Zhk-t2rPL9e&QEy8((Mz@l5$6J3y{OfzjJOR4s5E$Nrv_;s+#U| z{F2MI@|m2{5Jun5*5dM^)x-w2k+;o$?TJ&x&ymlmvxfGio=%-aa!^#7(Ge)422pJj z8Y^;2G++OdQWJBUhQ;c3Hp|1lh(UaYYa)XGOWi0B@=G_O9ruUU4o+2iz4PRaS2@-4gr8=2L9E5 zXi>gQ)q0L!2}n?RfUg8#+1%?KlT_N5eKZ_yrZ9u9*fy4K|GDg*o1K{2InK(+UcRAb zpH8jp%f@XYIEtQ{$vs&N5x88tI6t+h=YJYw@aOg|0{nMXFQp0io!7dx|4XhSfzR!t zL30EqfRqn>8*Qdpf>#!IhT86?_``u1LcuFs16}@Gvib*6{=Bd>^It{zPiEq;@ ze0QLLoiAltImN%YhAUNs;EG8@n`-|>r3s;^G#!Q6xKPBwU4d2fFM&W-s+J-J4U%f9 zOHZ*kmXuH5(1}!jn<*YU>?aVXUuARD|P<-gkjBhAM{IRW5>l~3W z=9_m#rMW1p1EK4bxa9URDf3BTQ!`8^dV-G>FX2eWF+%l~b9;kWb0kniksSIzDf=S^ z$SjZ2E}n>p04a!FzX?;0#QGW*r@CFm>|V|oC)eKT@wVKHtB0%1s7QKgCQervdIZ=5 zz$w>vxDRm4SN}hHuH>Q#WV59R!0Y||5_3SFq#2|O|Nvc|Hn>sPqX&e<}$Ojgy9)FVK{W&F< za5un-#+xP4ow3VHLQ~;IIPr7ccA>Jg+2|vqOBH#aE0)W?Vf{7c3;XKB#pZc z0^itzirY{j6; zL_WJxJC983rdw+@`ry5(|JDyxkpS|m;O7rUH^(;>#=lykEMOF${-V(z)_mv_co{~S zE+VwCSHoeFSJE@)mkKXQ4(Sr5ub@a5k#Dh@ty<5CSPRakcO_$qQF@(&in5Y6emKaM zT=M(ABkv<@lD#(Qyq;tTj+;uE!7UJD?97t)&Ij=}v-vX05hpe`v^0VEy1Bd7!j*`W zw7m+jgFt{){S{yxh_B=fG6An_XG+^sxI{fJg-5!3vQQ?9ur)mVOU<}4KdrWnI5yn4 zd;j9CM8`RuQoLYwjI$$#`y=TudI6$7i++kYjou0D@)NnQQ%|7Bwd4Exp}BO+xB*Q6;Hs4X)v zt=54F^}x$BSqjHl1^<&@InQG$u4;M>&7n@xNoSN707yLTr-t*AedcNgW3A=tzJrlK z)uw4fLPC*dnBx`zJT7n9LK=APUzY?yQzS~^U?1o6cb?!@%iWYG2f_*PaulBL@3x|! z4<}RVo>CUfE}0lyOyCAg0x{o_q_Rx0@35BL1%a?0pN5{6qf`;M-CPQ1(fK$LQ(3Ln zJN`s)k#zkk+o5fD0xpaZjeOQlaT}-~upirg$L#tk_Y+cVWI{x2)pP5pGXTGjkUG4{ z+Fos~HV4aU8fn%2V`5~|*h;>VT}+_tdebJKu3oefKt%KiaZmcne~G3vX5_*hIeJY( zqXXC$sOEGW=472~8-1>JA5EZ%YTqQoUTC?=2I-R0JvOEy2s6NGFZ)a)1F9T<`b{!F zxgyHPH*$D5UoLc>{l^tPd)oYmFL2hTTLb#MwZXzpy+g3OxcK6mjW;T&BR1V~ov8&$ z!WQxXngv8GCiqgGq^lrZyNV+kY=I+a`!S+raR2Jpw>NwoYSp_dhv#qYnTqMDYsv)- zIx?=ycnNI~uQkwOfV7;|-)LfxNi+j1ZN$f9c}mvL!iuR6t%78C1`?xWAYlStj0>+@Y=l z1Oryrv|Vo0jnD$zRnSkBNtI@gtjglhSAhw$r4XosqO_v>L3%}R%QK1f;quv25>Bg$ zEM#s-b6aO~sTk1TeSQv6F}AkgU|T%zL*1r(P=;0)Wvz%?Bj@n@r$;u;H!2v3zX#zA zi>jqz(iomMM%2wGkpjhg%%1HlKpXHoKh1^YpH9l8I*49q6FJUdFI^UGRZ8z@CeE4> zdt$Bx5bx0+^G>&-Z6gqOY6)P>UA$YDVxw(OQ#Sjay_qQBY=@gP#rG^mufGL91fkTv zg&WZWHxwmAw;nC{hT20GBmg@OJI{yP1bydztS@J+Vrwe=(O1P@PM?YIYcNm_Zf_qe zsjr*vGT0I8x`6g=rf7ph%RBlW%3_dXLsSt`DdDA7JXZ zZ1f(>@v|?t(jAbMAdccn7lA~!AYNqAVR-~w*jf@4>ToKWe4sJ)8f_aF*mdCSEQyUD zM=%uh_0g1U=qNo?IDedZo+BP{W;DTXqYh&U{0`JuqkKm0^u}t2Y$!2KYElT0u-1$3 zeSD>{JC%VlmjjQHPOTF~S=+mu>!&fcz6T)?fQ~_i@V9tqWjB(q&wdX2QpVIp`zNI_ zKG1gy>oi0xX(k>#4_p*l+fdP8xRFU(%j)pNj)QiB1cP}{>j~2{ehwNpJ-20PM4g21YJZjKUAZ;vW5bM@Dtr`o{j>OulMolJ0UF(al4DuRJZ0KZ{w^lX-XSzty_|xKWh5~9JnoERO zJe)=Xbs(LCiB~n?H`jJKNXnr6{xsPjmBFr%C-;4|%6`Bj99E6A#v}z{;3i(Dg6F=i z9_Jsz5mR$;BR_pv${qFzqNLETUs}T_=3tke2N<5`gS2xj7RWcnB5I@1sna8q#C&=u zj42_}#5hTSAT9x|4XAuNv_}X;Rj8x@}5Xh-XZc;X9xk%S&Q?BJ-K6qllI`$L} z?OFh{@l!cP1mEk1s+>EIoMKVcM+-*Q4im2>e&TNI%oVo%96_1Sc8A zL;T3S)k50>v@=ziYI0w6EB7-X1rOtx_PX(iM>#gW6*bi@bpa%1b{TF7{Bo zUMr3JxKfmwX}||6I8e1cnV4Glfokh)p`Dasp->cy>1*!kJ&H7u5ojPk^ixD8b$C87 zR9%k4#OpZK#N=)Pd}RecPINj691WAlW~}oeY&HfiY?VQKxebMRicdOJ)t; z2ixbhIp4qcPicpIyFIb?Ys8fI&H1eJDhYCfu1*=3tS}rbqL(I1t|TSYJ}E)@it$XxRq_ z3ifP8eLMbWlMPqUDCTUe6m9WhASE=_Rqx9NRW4Ur0yI!<_O*+01kIj5gwaA8?;us? z+Q_n9o?uUM{(xohg49IPUHmk;@Y%<$Ul!x~AJy@fF6O#)M8|@!r*7RF$CJb{F0@MV z;GS<$f*ZSHg`(|B&dy4U#85!Uf zF9J8_6$nzIJH#i+1ixy!*&rM#u(ED-yBj)S4YIhgd8@lg?wd>V?l5{Vh|)aeop?1; z*`2;NNGOu~gDJK@FgdVAj-oOn%uYY~4 z#^_u3X&M%qgwH7xn-dr} zEA78Vt9Ohk3jSgl>iX6Zz`Aj6>I*`GX{XnWJPz-vEBr~h;@aKg?t?VV277+1Ei#Wi zUgRL5mI^P5)TxTYysegj z^*(c+e2M{0B}Wg4FpIW$#G-_?hL|tR2OKB_7|;{dmYB)g;fEIm6@|ibt@<*UiB4p7Ibe`? za?Ze)u*?8f^W(AbLwwbt-T5XM3yYi`OVO!Etv4H(rqMCA4wX$y3~fx>#=l!aCp2W> z$ZU#*G?X3RT*Hc@#*D|)c`0@rdvHWPQt#X?nxkAFt)9W95*R*TKG>)WHc z!HTYhJuxNe()?C)6!eHG?&Gpa#I;!&HdnJc;d9|6&ZLYmpq|(icfCEd;wr-uI((kG zB%a^30_Se-7Z;44akTK4MD+$(vOoU;}F$Su0QRzXL} zi5G)d^8)JS5lP18Zz5Q-amSs)_P0bum~E;yS(bB7CA-Ej!UJE&Dqi(Ih@u#U&aM8A`K7zl@mQf0sy{L;c>ZZat0&}l`g%VRy-KidpJDJM8U%Z z3pRVJ`at(S19`z{i+SK9!{~}^sijI$;|i8XMIL@eDGlQ!t84j-8|8u{V{WyUF7aY) z{bECJz@K;F;KR?ra?5@LR84|{X}JbDv^Dmr`M@d2GL_~sKQX2bFjO}_a;h^VQhcfpl5u~-t--+#I=8#M!2Oyz)&jp7 zcVhc_uId!Jy3N>3CT1%AAP(I!k9hN^kjmT;bm~Q$Rt;L`VrQ~OLtFn4cW0nSn$8wR z8Z}!b#GE^78&90{$CjCPH*9`plz|-i;_9cHZmB@B&X9$bl(6m_(|8%k=iSk}*U>yN zeSbYf@$Y~A9Cq_J#6Q{859qtKBG-PJTdXU8KGE=R?NL&v>IEmWZu%bBaObHbnr={AjnJEmUPmn$K9Kr@F@Isj~*F8mb-=-3p^!PhW83XfW< zbMIBKf^D;-EULh(XR!Bxrl87PskvN|X77g8Pkwz&#Zo0l1Cd`;cx>LopTdpdYTb4~l(UO%ljY;6v;B#3sLcya3Vg+p?po{fM?z=P-5 zaAoF1YtZ?d;0mR=deAJ;2GvCR^XU}-%y1x~2r;_!eYg5!q@(ZBi1#g&Sq9a2D!%1> z-aCDMUVqAXdHgPQ>r}F3@w6`B3*^%1aQLRdk9`+tN$Ky_nVYU2J=8k0w~>DQImklK z?i1_PyPnAgjW)Fj^_NvqAY8ESqTY@CN#pRJ^qcyd6R_D_nmn-T-Ku(Sdi6!mt;Nlsv=$m2tLm>YkW=`-iLld^ ze(^V4u?V)QLATYunx&A`atAHKGne-YKY9z%0t~EhaYs z6;8H$Yl?rX&0{UQT@vK9{iY}`T|CIk268_T&J-4>^yyO{ybWm#$|7xrA77Xcb;#t+#=|s z(<;*I8f`K%v}`t^sKc8c2M0X7b*r)F$BK&OxDT|0B#pt}8eGiU%?exH9^!e!5?fGa za_Oz;EhcyUex^Y%{b5|tk1I}WLEtPj8Pax2Kh3GX8T8HjuBs~*Eop-Y+m8k4DoN}B zTZgyL2Ps8s#dr7eyyGD5I#c`^a<)rcCp8Mn6oq(t?-gY$+^VjopXRS`nkB4zLwXgR z8rqLkp$BVVV#_Ry=%p>4AjyjhAZg`V~eL%^fX0GQvx3Qz`m~Ytx z)#!tUCeX&{adxbP+?w_{Jt+D4M4Rnz7lF_pAr7r!?-bJg9%UKLAPfl#`wm1!-M{*& a&M)f}ZCh1aIV?~c6BCjW%zyRn /opencloudos_build_date.txt + +CMD ["python3"] diff --git a/frameworks/transformers/5.4.0/README.md b/frameworks/transformers/5.4.0/README.md new file mode 100644 index 0000000..eb041eb --- /dev/null +++ b/frameworks/transformers/5.4.0/README.md @@ -0,0 +1,32 @@ +# Transformers on OpenCloudOS 9 + +## 基本信息 +- **框架版本**:5.4.0 +- **基础镜像**:opencloudos/opencloudos9-cuda-devel:12.8 +- **Python 版本**:3.x(系统默认) +- **CUDA 版本**:12.8 +- **核心组件**:HuggingFace Transformers 5.4.0 + PyTorch + +## 构建 + +```bash +docker build -t oc9-transformers:5.4.0 . +``` + +## 使用示例 + +```bash +# CPU 模式 +docker run --rm oc9-transformers:5.4.0 python3 -c "import transformers; print(transformers.__version__)" + +# GPU 模式 +docker run --rm --gpus all oc9-transformers:5.4.0 python3 -c " +import torch +print(f'CUDA available: {torch.cuda.is_available()}') +import transformers +print(f'Transformers: {transformers.__version__}') +" +``` + +## 已知问题 +- 无 diff --git a/frameworks/transformers/5.4.0/build.conf b/frameworks/transformers/5.4.0/build.conf new file mode 100644 index 0000000..ea84be4 --- /dev/null +++ b/frameworks/transformers/5.4.0/build.conf @@ -0,0 +1,4 @@ +# transformers 5.4.0 on OpenCloudOS 9 (GPU) +IMAGE_NAME=oc9-transformers +IMAGE_TAG=5.4.0 +GPU_TEST=true diff --git a/frameworks/transformers/5.4.0/test.sh b/frameworks/transformers/5.4.0/test.sh new file mode 100755 index 0000000..6bf0313 --- /dev/null +++ b/frameworks/transformers/5.4.0/test.sh @@ -0,0 +1,46 @@ +#!/bin/bash +set -e + +IMAGE="${1:?ERROR: 缺少镜像参数。用法: bash test.sh }" + +echo "=== Transformers 5.4.0 功能测试 ===" + +# 1. 验证框架导入及版本 +echo -n "检查 transformers import... " +docker run --rm "$IMAGE" python3 -c " +import transformers +assert transformers.__version__ == '5.4.0', f'版本不匹配: {transformers.__version__}' +print(transformers.__version__) +" && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } + +# 2. 验证核心功能 — AutoTokenizer +echo -n "检查 AutoTokenizer... " +docker run --rm "$IMAGE" python3 -c " +import warnings +warnings.filterwarnings('ignore') +from transformers import AutoTokenizer +tok = AutoTokenizer.from_pretrained('google-bert/bert-base-uncased') +out = tok('Hello, world!', return_tensors='pt') +assert 'input_ids' in out, 'input_ids not found' +print('ok') +" && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } + +# 3. 验证 CUDA 环境及 GPU 推理 — BertModel +echo -n "检查 CUDA + GPU 推理... " +docker run --rm --gpus all "$IMAGE" python3 -c " +import warnings +warnings.filterwarnings('ignore') +import torch +assert torch.cuda.is_available(), 'CUDA not available' +print(f'GPU: {torch.cuda.get_device_name(0)}') +from transformers import AutoModel, AutoTokenizer +tok = AutoTokenizer.from_pretrained('google-bert/bert-base-uncased') +model = AutoModel.from_pretrained('google-bert/bert-base-uncased').cuda() +inputs = tok('Hello', return_tensors='pt').to('cuda') +with torch.no_grad(): + out = model(**inputs) +assert out.last_hidden_state.shape[0] == 1, 'batch size mismatch' +print('ok') +" && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } + +echo "=== 所有测试通过 ===" diff --git a/frameworks/transformers/5.4.0/test_result.png b/frameworks/transformers/5.4.0/test_result.png new file mode 100644 index 0000000000000000000000000000000000000000..b6accfa8e7b43a18452e5f26d49cddc39496faa3 GIT binary patch literal 37301 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 /opencloudos_build_date.txt + +CMD ["python3"] diff --git a/frameworks/transformers/5.5.1/README.md b/frameworks/transformers/5.5.1/README.md new file mode 100644 index 0000000..3a036eb --- /dev/null +++ b/frameworks/transformers/5.5.1/README.md @@ -0,0 +1,32 @@ +# Transformers on OpenCloudOS 9 + +## 基本信息 +- **框架版本**:5.5.1 +- **基础镜像**:opencloudos/opencloudos9-cuda-devel:12.8 +- **Python 版本**:3.x(系统默认) +- **CUDA 版本**:12.8 +- **核心组件**:HuggingFace Transformers 5.5.1 + PyTorch + +## 构建 + +```bash +docker build -t oc9-transformers:5.5.1 . +``` + +## 使用示例 + +```bash +# CPU 模式 +docker run --rm oc9-transformers:5.5.1 python3 -c "import transformers; print(transformers.__version__)" + +# GPU 模式 +docker run --rm --gpus all oc9-transformers:5.5.1 python3 -c " +import torch +print(f'CUDA available: {torch.cuda.is_available()}') +import transformers +print(f'Transformers: {transformers.__version__}') +" +``` + +## 已知问题 +- 无 diff --git a/frameworks/transformers/5.5.1/build.conf b/frameworks/transformers/5.5.1/build.conf new file mode 100644 index 0000000..db399a5 --- /dev/null +++ b/frameworks/transformers/5.5.1/build.conf @@ -0,0 +1,4 @@ +# transformers 5.5.1 on OpenCloudOS 9 (GPU) +IMAGE_NAME=oc9-transformers +IMAGE_TAG=5.5.1 +GPU_TEST=true diff --git a/frameworks/transformers/5.5.1/test.sh b/frameworks/transformers/5.5.1/test.sh new file mode 100755 index 0000000..7f8912c --- /dev/null +++ b/frameworks/transformers/5.5.1/test.sh @@ -0,0 +1,46 @@ +#!/bin/bash +set -e + +IMAGE="${1:?ERROR: 缺少镜像参数。用法: bash test.sh }" + +echo "=== Transformers 5.5.1 功能测试 ===" + +# 1. 验证框架导入及版本 +echo -n "检查 transformers import... " +docker run --rm "$IMAGE" python3 -c " +import transformers +assert transformers.__version__ == '5.5.1', f'版本不匹配: {transformers.__version__}' +print(transformers.__version__) +" && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } + +# 2. 验证核心功能 — AutoTokenizer +echo -n "检查 AutoTokenizer... " +docker run --rm "$IMAGE" python3 -c " +import warnings +warnings.filterwarnings('ignore') +from transformers import AutoTokenizer +tok = AutoTokenizer.from_pretrained('google-bert/bert-base-uncased') +out = tok('Hello, world!', return_tensors='pt') +assert 'input_ids' in out, 'input_ids not found' +print('ok') +" && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } + +# 3. 验证 CUDA 环境及 GPU 推理 — BertModel +echo -n "检查 CUDA + GPU 推理... " +docker run --rm --gpus all "$IMAGE" python3 -c " +import warnings +warnings.filterwarnings('ignore') +import torch +assert torch.cuda.is_available(), 'CUDA not available' +print(f'GPU: {torch.cuda.get_device_name(0)}') +from transformers import AutoModel, AutoTokenizer +tok = AutoTokenizer.from_pretrained('google-bert/bert-base-uncased') +model = AutoModel.from_pretrained('google-bert/bert-base-uncased').cuda() +inputs = tok('Hello', return_tensors='pt').to('cuda') +with torch.no_grad(): + out = model(**inputs) +assert out.last_hidden_state.shape[0] == 1, 'batch size mismatch' +print('ok') +" && echo "✓ 通过" || { echo "✗ 失败"; exit 1; } + +echo "=== 所有测试通过 ===" diff --git a/frameworks/transformers/5.5.1/test_result.png b/frameworks/transformers/5.5.1/test_result.png new file mode 100644 index 0000000000000000000000000000000000000000..f6435240e47d232060bbcfccde03c658cc5cc39b GIT binary patch literal 36712 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 literal 0 HcmV?d00001 -- Gitee