From 269f1afa78c68d1ac9f4eaef553954376338ab6f Mon Sep 17 00:00:00 2001 From: yuchengen Date: Mon, 27 Apr 2026 14:57:23 +0800 Subject: [PATCH 1/8] feat: add PyTorch v2.11.0 container image for OC9 --- frameworks/pytorch/2.11.0/Dockerfile | 25 ++++ frameworks/pytorch/2.11.0/README.md | 20 +++ frameworks/pytorch/2.11.0/test.sh | 174 ++++++++++++++++++++++ frameworks/pytorch/2.11.0/test_result.png | Bin 0 -> 85493 bytes 4 files changed, 219 insertions(+) create mode 100644 frameworks/pytorch/2.11.0/Dockerfile create mode 100644 frameworks/pytorch/2.11.0/README.md create mode 100644 frameworks/pytorch/2.11.0/test.sh create mode 100644 frameworks/pytorch/2.11.0/test_result.png diff --git a/frameworks/pytorch/2.11.0/Dockerfile b/frameworks/pytorch/2.11.0/Dockerfile new file mode 100644 index 0000000..a4f3d19 --- /dev/null +++ b/frameworks/pytorch/2.11.0/Dockerfile @@ -0,0 +1,25 @@ + +FROM opencloudos/opencloudos9-cuda-devel:12.8 + +LABEL maintainer="stronking 363133710@qq.com" +LABEL org.opencontainers.image.source="https://gitee.com/OpenCloudOS/ai-agent-container" +LABEL org.opencontainers.image.description="Torch 2.11.0 (GPU) on OpenCloudOS 9" +ENV NVIDIA_VISIBLE_DEVICES=all + +ENV NVIDIA_VISIBLE_DEVICES=all \ + PYTHONUNBUFFERED=1 \ + PIP_DISABLE_PIP_VERSION_CHECK=1 \ + PIP_DEFAULT_TIMEOUT=120 + + +WORKDIR /home + +RUN --mount=type=cache,id=pip-cache-opencloudos9-cu128,target=/root/.cache/pip \ + pip install \ + torch==2.11.0 \ + torchvision==0.26.0 \ + torchaudio==2.11.0 \ + --index-url https://download.pytorch.org/whl/cu128 +COPY test.sh . + +RUN ["python3"] \ No newline at end of file diff --git a/frameworks/pytorch/2.11.0/README.md b/frameworks/pytorch/2.11.0/README.md new file mode 100644 index 0000000..299d241 --- /dev/null +++ b/frameworks/pytorch/2.11.0/README.md @@ -0,0 +1,20 @@ +# Torch 2.11.0 on OpenCloudOS 9 + +## 基本信息 +- **框架版本**:v2.11.0 +- **基础镜像**:opencloudos9-cuda-devel:12.8 +- **Python 版本**:3.11 +- **CUDA 版本**: 12.x 或 更高 + +## 构建 + +docker build -t oc9-pytorch:2.11.0 . + +## 镜像启动命令 + +docker run -d --gpus all --name oc9-pytorch oc9-pytorch:2.11.0 + +## 镜像测试命令 + +docker run --rm --gpus all oc9-pytorch:2.11.0 bash test.sh + diff --git a/frameworks/pytorch/2.11.0/test.sh b/frameworks/pytorch/2.11.0/test.sh new file mode 100644 index 0000000..518c7d9 --- /dev/null +++ b/frameworks/pytorch/2.11.0/test.sh @@ -0,0 +1,174 @@ +#!/bin/bash +set -e +export CUDA_HOME=/usr/local/cuda +export PATH=/usr/local/cuda/bin:$PATH +export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH +echo "=== PyTorch 基础功能测试 ===" + +# GPU 镜像建议设为 1 +# 如果 CI 环境没有挂载 GPU,可以运行时覆盖: +# REQUIRE_CUDA=0 ./test.sh +REQUIRE_CUDA="${REQUIRE_CUDA:-1}" + +echo "REQUIRE_CUDA=${REQUIRE_CUDA}" + +check() { + local name="$1" + shift + + echo -n "检查 ${name}... " + if "$@"; then + echo "✓ 通过" + else + echo "✗ 失败" + exit 1 + fi +} + +echo +echo "=== 1. Python / PyTorch Import 检查 ===" + +check "import torch / torchvision / torchaudio" python3 - <<'PY' +import torch +import torchvision +import torchaudio + +print("torch:", torch.__version__) +print("torchvision:", torchvision.__version__) +print("torchaudio:", torchaudio.__version__) +print("torch path:", torch.__file__) +PY + + +echo +echo "=== 2. CPU 基础功能检查 ===" + +check "CPU Tensor 计算" python3 - <<'PY' +import torch + +x = torch.randn(512, 512) +y = torch.randn(512, 512) +z = x @ y + +assert z.shape == (512, 512) +assert torch.isfinite(z).all() + +print("CPU matmul OK") +PY + + +check "Autograd 自动求导" python3 - <<'PY' +import torch + +x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True) +y = (x * x).sum() +y.backward() + +expected = torch.tensor([2.0, 4.0, 6.0]) +assert torch.allclose(x.grad, expected) + +print("Autograd OK") +PY + + +echo +echo "=== 3. CUDA 环境检查 ===" + +echo -n "检查 nvidia-smi... " +if command -v nvidia-smi >/dev/null 2>&1; then + nvidia-smi >/tmp/nvidia_smi_test.log 2>&1 && check || fail +else + if [ "$STRICT_GPU" = "1" ]; then + echo "未找到 nvidia-smi" + fail + else + echo "跳过,未找到 nvidia-smi" + fi +fi + +if command -v nvcc >/dev/null 2>&1; then + check "nvcc --version" nvcc --version +else + if [ "${REQUIRE_CUDA}" = "1" ]; then + echo "✗ 未找到 nvcc" + exit 1 + else + echo "未找到 nvcc,跳过" + fi +fi + + +echo +echo "=== 4. PyTorch CUDA 功能检查 ===" + +check "torch CUDA 可用性" python3 - < 0, "No CUDA device found" +else: + if not torch.cuda.is_available(): + print("CUDA not available, skip GPU assertion") +PY + + +if [ "${REQUIRE_CUDA}" = "1" ]; then + check "GPU Tensor 计算" python3 - <<'PY' +import torch + +device = torch.device("cuda:0") + +print("GPU name:", torch.cuda.get_device_name(0)) + +x = torch.randn(1024, 1024, device=device) +y = torch.randn(1024, 1024, device=device) +z = x @ y + +torch.cuda.synchronize() + +assert z.is_cuda +assert z.shape == (1024, 1024) +assert torch.isfinite(z).all() + +print("GPU matmul OK") +PY +else + echo "REQUIRE_CUDA=0,跳过 GPU Tensor 计算" +fi + + +echo +echo "=== 5. torchvision / torchaudio 基础功能检查 ===" + +check "torchvision transforms" python3 - <<'PY' +import torchvision.transforms as T + +transform = T.Compose([ + T.Resize((224, 224)), + T.ToTensor(), +]) + +assert transform is not None +print("torchvision transforms OK") +PY + + +check "torchaudio import" python3 - <<'PY' +import torchaudio + +print("torchaudio version:", torchaudio.__version__) +print("torchaudio OK") +PY + + +echo +echo "=== 所有 PyTorch 测试通过 ===" \ No newline at end of file diff --git a/frameworks/pytorch/2.11.0/test_result.png b/frameworks/pytorch/2.11.0/test_result.png new file mode 100644 index 0000000000000000000000000000000000000000..53eb6b3807245bf88ce9dc07eabfe3d9b457bdc5 GIT binary patch literal 85493 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 Date: Mon, 27 Apr 2026 14:57:32 +0800 Subject: [PATCH 2/8] feat: add PyTorch v2.10.0 container image for OC9 --- frameworks/pytorch/2.10.0/Dockerfile | 26 ++++ frameworks/pytorch/2.10.0/README.md | 20 +++ frameworks/pytorch/2.10.0/test.sh | 174 ++++++++++++++++++++++ frameworks/pytorch/2.10.0/test_result.png | Bin 0 -> 83373 bytes 4 files changed, 220 insertions(+) create mode 100644 frameworks/pytorch/2.10.0/Dockerfile create mode 100644 frameworks/pytorch/2.10.0/README.md create mode 100644 frameworks/pytorch/2.10.0/test.sh create mode 100644 frameworks/pytorch/2.10.0/test_result.png diff --git a/frameworks/pytorch/2.10.0/Dockerfile b/frameworks/pytorch/2.10.0/Dockerfile new file mode 100644 index 0000000..24a8237 --- /dev/null +++ b/frameworks/pytorch/2.10.0/Dockerfile @@ -0,0 +1,26 @@ + +FROM opencloudos/opencloudos9-cuda-devel:12.8 + +LABEL maintainer="stronking 363133710@qq.com" +LABEL org.opencontainers.image.source="https://gitee.com/OpenCloudOS/ai-agent-container" +LABEL org.opencontainers.image.description="Torch 2.10.0 (GPU) on OpenCloudOS 9" +ENV NVIDIA_VISIBLE_DEVICES=all + +ENV NVIDIA_VISIBLE_DEVICES=all \ + PYTHONUNBUFFERED=1 \ + PIP_DISABLE_PIP_VERSION_CHECK=1 \ + PIP_DEFAULT_TIMEOUT=120 + + +WORKDIR /home + +RUN --mount=type=cache,id=pip-cache-opencloudos9-cu128,target=/root/.cache/pip \ + pip install \ + torch==2.10.0 \ + torchvision==0.25.0 \ + torchaudio==2.10.0 \ + --index-url https://download.pytorch.org/whl/cu128 + +COPY test.sh . + +RUN ["python3"] \ No newline at end of file diff --git a/frameworks/pytorch/2.10.0/README.md b/frameworks/pytorch/2.10.0/README.md new file mode 100644 index 0000000..81fcbf5 --- /dev/null +++ b/frameworks/pytorch/2.10.0/README.md @@ -0,0 +1,20 @@ +# Torch 2.10.0 on OpenCloudOS 9 + +## 基本信息 +- **框架版本**:v2.10.0 +- **基础镜像**:opencloudos9-cuda-devel:12.8 +- **Python 版本**:3.11 +- **CUDA 版本**: 12.x 或 更高 + +## 构建 + +docker build -t oc9-pytorch:2.10.0 . + +## 镜像启动命令 + +docker run -d --gpus all --name oc9-pytorch oc9-pytorch:2.10.0 + +## 镜像测试命令 + +docker run --rm --gpus all oc9-pytorch:2.10.0 bash test.sh + diff --git a/frameworks/pytorch/2.10.0/test.sh b/frameworks/pytorch/2.10.0/test.sh new file mode 100644 index 0000000..518c7d9 --- /dev/null +++ b/frameworks/pytorch/2.10.0/test.sh @@ -0,0 +1,174 @@ +#!/bin/bash +set -e +export CUDA_HOME=/usr/local/cuda +export PATH=/usr/local/cuda/bin:$PATH +export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH +echo "=== PyTorch 基础功能测试 ===" + +# GPU 镜像建议设为 1 +# 如果 CI 环境没有挂载 GPU,可以运行时覆盖: +# REQUIRE_CUDA=0 ./test.sh +REQUIRE_CUDA="${REQUIRE_CUDA:-1}" + +echo "REQUIRE_CUDA=${REQUIRE_CUDA}" + +check() { + local name="$1" + shift + + echo -n "检查 ${name}... " + if "$@"; then + echo "✓ 通过" + else + echo "✗ 失败" + exit 1 + fi +} + +echo +echo "=== 1. Python / PyTorch Import 检查 ===" + +check "import torch / torchvision / torchaudio" python3 - <<'PY' +import torch +import torchvision +import torchaudio + +print("torch:", torch.__version__) +print("torchvision:", torchvision.__version__) +print("torchaudio:", torchaudio.__version__) +print("torch path:", torch.__file__) +PY + + +echo +echo "=== 2. CPU 基础功能检查 ===" + +check "CPU Tensor 计算" python3 - <<'PY' +import torch + +x = torch.randn(512, 512) +y = torch.randn(512, 512) +z = x @ y + +assert z.shape == (512, 512) +assert torch.isfinite(z).all() + +print("CPU matmul OK") +PY + + +check "Autograd 自动求导" python3 - <<'PY' +import torch + +x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True) +y = (x * x).sum() +y.backward() + +expected = torch.tensor([2.0, 4.0, 6.0]) +assert torch.allclose(x.grad, expected) + +print("Autograd OK") +PY + + +echo +echo "=== 3. CUDA 环境检查 ===" + +echo -n "检查 nvidia-smi... " +if command -v nvidia-smi >/dev/null 2>&1; then + nvidia-smi >/tmp/nvidia_smi_test.log 2>&1 && check || fail +else + if [ "$STRICT_GPU" = "1" ]; then + echo "未找到 nvidia-smi" + fail + else + echo "跳过,未找到 nvidia-smi" + fi +fi + +if command -v nvcc >/dev/null 2>&1; then + check "nvcc --version" nvcc --version +else + if [ "${REQUIRE_CUDA}" = "1" ]; then + echo "✗ 未找到 nvcc" + exit 1 + else + echo "未找到 nvcc,跳过" + fi +fi + + +echo +echo "=== 4. PyTorch CUDA 功能检查 ===" + +check "torch CUDA 可用性" python3 - < 0, "No CUDA device found" +else: + if not torch.cuda.is_available(): + print("CUDA not available, skip GPU assertion") +PY + + +if [ "${REQUIRE_CUDA}" = "1" ]; then + check "GPU Tensor 计算" python3 - <<'PY' +import torch + +device = torch.device("cuda:0") + +print("GPU name:", torch.cuda.get_device_name(0)) + +x = torch.randn(1024, 1024, device=device) +y = torch.randn(1024, 1024, device=device) +z = x @ y + +torch.cuda.synchronize() + +assert z.is_cuda +assert z.shape == (1024, 1024) +assert torch.isfinite(z).all() + +print("GPU matmul OK") +PY +else + echo "REQUIRE_CUDA=0,跳过 GPU Tensor 计算" +fi + + +echo +echo "=== 5. torchvision / torchaudio 基础功能检查 ===" + +check "torchvision transforms" python3 - <<'PY' +import torchvision.transforms as T + +transform = T.Compose([ + T.Resize((224, 224)), + T.ToTensor(), +]) + +assert transform is not None +print("torchvision transforms OK") +PY + + +check "torchaudio import" python3 - <<'PY' +import torchaudio + +print("torchaudio version:", torchaudio.__version__) +print("torchaudio OK") +PY + + +echo +echo "=== 所有 PyTorch 测试通过 ===" \ No newline at end of file diff --git a/frameworks/pytorch/2.10.0/test_result.png b/frameworks/pytorch/2.10.0/test_result.png new file mode 100644 index 0000000000000000000000000000000000000000..b1b3dc48a71cbcdc352b7e572c0fa887a4e7bbdd GIT binary patch literal 83373 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 gn{g-p`PhHAjM637A4{v2_ Date: Wed, 29 Apr 2026 11:00:47 +0800 Subject: [PATCH 3/8] feat: add build.conf --- frameworks/pytorch/2.10.0/build.conf | 4 ++++ frameworks/pytorch/2.11.0/build.conf | 4 ++++ 2 files changed, 8 insertions(+) create mode 100644 frameworks/pytorch/2.10.0/build.conf create mode 100644 frameworks/pytorch/2.11.0/build.conf diff --git a/frameworks/pytorch/2.10.0/build.conf b/frameworks/pytorch/2.10.0/build.conf new file mode 100644 index 0000000..fff2698 --- /dev/null +++ b/frameworks/pytorch/2.10.0/build.conf @@ -0,0 +1,4 @@ +# pytorch 2.10.0 on OpenCloudOS 9 (GPU) +IMAGE_NAME=oc9-pytorch +IMAGE_TAG=2.10.0 +GPU_TEST=true \ No newline at end of file diff --git a/frameworks/pytorch/2.11.0/build.conf b/frameworks/pytorch/2.11.0/build.conf new file mode 100644 index 0000000..f101d25 --- /dev/null +++ b/frameworks/pytorch/2.11.0/build.conf @@ -0,0 +1,4 @@ +# pytorch 2.11.0 on OpenCloudOS 9 (GPU) +IMAGE_NAME=oc9-pytorch +IMAGE_TAG=2.11.0 +GPU_TEST=true \ No newline at end of file -- Gitee From ae416443d4e5168c66199ae156d8033064a1bfed Mon Sep 17 00:00:00 2001 From: yuchengen Date: Wed, 29 Apr 2026 12:37:42 +0800 Subject: [PATCH 4/8] feat: modify test.sh --- frameworks/pytorch/2.10.0/test.sh | 90 ++++++++++++++++++++----------- frameworks/pytorch/2.11.0/test.sh | 90 ++++++++++++++++++++----------- 2 files changed, 120 insertions(+), 60 deletions(-) diff --git a/frameworks/pytorch/2.10.0/test.sh b/frameworks/pytorch/2.10.0/test.sh index 518c7d9..aa23ea6 100644 --- a/frameworks/pytorch/2.10.0/test.sh +++ b/frameworks/pytorch/2.10.0/test.sh @@ -1,34 +1,65 @@ #!/bin/bash set -e + +IMAGE="${1:-}" + +if [ -z "${IMAGE}" ]; then + echo "用法: bash test.sh <镜像名:标签>" + exit 1 +fi + +if ! command -v docker >/dev/null 2>&1; then + echo "✗ 未找到 docker" + exit 1 +fi + +echo "=== PyTorch 容器基础功能测试 ===" +echo "测试镜像: ${IMAGE}" + +docker run --rm "${IMAGE}" /bin/bash -lc ' +set -e + export CUDA_HOME=/usr/local/cuda export PATH=/usr/local/cuda/bin:$PATH -export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH +export LD_LIBRARY_PATH=/usr/local/cuda/lib64:${LD_LIBRARY_PATH:-} + echo "=== PyTorch 基础功能测试 ===" -# GPU 镜像建议设为 1 -# 如果 CI 环境没有挂载 GPU,可以运行时覆盖: -# REQUIRE_CUDA=0 ./test.sh -REQUIRE_CUDA="${REQUIRE_CUDA:-1}" +# 说明: +# CI 的 GPU_TEST=true 会额外执行 torch.cuda.is_available() 验证 CUDA。 +# 因此这里默认不强制要求 CUDA,避免基础测试因为未挂载 GPU 失败。 +# 如需强制测试 CUDA,可在运行 test.sh 时设置 REQUIRE_CUDA=1。 +REQUIRE_CUDA="${REQUIRE_CUDA:-0}" echo "REQUIRE_CUDA=${REQUIRE_CUDA}" +pass() { + echo "✓ $1" +} + +fail() { + echo "✗ $1" + exit 1 +} + check() { local name="$1" shift - echo -n "检查 ${name}... " + echo "检查 ${name}..." if "$@"; then - echo "✓ 通过" + pass "${name}" else - echo "✗ 失败" - exit 1 + fail "${name}" fi } echo echo "=== 1. Python / PyTorch Import 检查 ===" -check "import torch / torchvision / torchaudio" python3 - <<'PY' +check "python3 存在" command -v python3 + +check "import torch / torchvision / torchaudio" python3 - <<'"'"'PY'"'"' import torch import torchvision import torchaudio @@ -43,7 +74,7 @@ PY echo echo "=== 2. CPU 基础功能检查 ===" -check "CPU Tensor 计算" python3 - <<'PY' +check "CPU Tensor 计算" python3 - <<'"'"'PY'"'"' import torch x = torch.randn(512, 512) @@ -57,7 +88,7 @@ print("CPU matmul OK") PY -check "Autograd 自动求导" python3 - <<'PY' +check "Autograd 自动求导" python3 - <<'"'"'PY'"'"' import torch x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True) @@ -72,28 +103,22 @@ PY echo -echo "=== 3. CUDA 环境检查 ===" +echo "=== 3. CUDA 环境信息检查 ===" -echo -n "检查 nvidia-smi... " if command -v nvidia-smi >/dev/null 2>&1; then - nvidia-smi >/tmp/nvidia_smi_test.log 2>&1 && check || fail + echo "检测到 nvidia-smi:" + nvidia-smi || true else - if [ "$STRICT_GPU" = "1" ]; then - echo "未找到 nvidia-smi" - fail - else - echo "跳过,未找到 nvidia-smi" - fi + echo "未检测到 nvidia-smi,跳过 nvidia-smi 检查" fi if command -v nvcc >/dev/null 2>&1; then check "nvcc --version" nvcc --version else if [ "${REQUIRE_CUDA}" = "1" ]; then - echo "✗ 未找到 nvcc" - exit 1 + fail "REQUIRE_CUDA=1,但未找到 nvcc" else - echo "未找到 nvcc,跳过" + echo "未找到 nvcc,跳过 nvcc 检查" fi fi @@ -101,9 +126,8 @@ fi echo echo "=== 4. PyTorch CUDA 功能检查 ===" -check "torch CUDA 可用性" python3 - <" + exit 1 +fi + +if ! command -v docker >/dev/null 2>&1; then + echo "✗ 未找到 docker" + exit 1 +fi + +echo "=== PyTorch 容器基础功能测试 ===" +echo "测试镜像: ${IMAGE}" + +docker run --rm "${IMAGE}" /bin/bash -lc ' +set -e + export CUDA_HOME=/usr/local/cuda export PATH=/usr/local/cuda/bin:$PATH -export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH +export LD_LIBRARY_PATH=/usr/local/cuda/lib64:${LD_LIBRARY_PATH:-} + echo "=== PyTorch 基础功能测试 ===" -# GPU 镜像建议设为 1 -# 如果 CI 环境没有挂载 GPU,可以运行时覆盖: -# REQUIRE_CUDA=0 ./test.sh -REQUIRE_CUDA="${REQUIRE_CUDA:-1}" +# 说明: +# CI 的 GPU_TEST=true 会额外执行 torch.cuda.is_available() 验证 CUDA。 +# 因此这里默认不强制要求 CUDA,避免基础测试因为未挂载 GPU 失败。 +# 如需强制测试 CUDA,可在运行 test.sh 时设置 REQUIRE_CUDA=1。 +REQUIRE_CUDA="${REQUIRE_CUDA:-0}" echo "REQUIRE_CUDA=${REQUIRE_CUDA}" +pass() { + echo "✓ $1" +} + +fail() { + echo "✗ $1" + exit 1 +} + check() { local name="$1" shift - echo -n "检查 ${name}... " + echo "检查 ${name}..." if "$@"; then - echo "✓ 通过" + pass "${name}" else - echo "✗ 失败" - exit 1 + fail "${name}" fi } echo echo "=== 1. Python / PyTorch Import 检查 ===" -check "import torch / torchvision / torchaudio" python3 - <<'PY' +check "python3 存在" command -v python3 + +check "import torch / torchvision / torchaudio" python3 - <<'"'"'PY'"'"' import torch import torchvision import torchaudio @@ -43,7 +74,7 @@ PY echo echo "=== 2. CPU 基础功能检查 ===" -check "CPU Tensor 计算" python3 - <<'PY' +check "CPU Tensor 计算" python3 - <<'"'"'PY'"'"' import torch x = torch.randn(512, 512) @@ -57,7 +88,7 @@ print("CPU matmul OK") PY -check "Autograd 自动求导" python3 - <<'PY' +check "Autograd 自动求导" python3 - <<'"'"'PY'"'"' import torch x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True) @@ -72,28 +103,22 @@ PY echo -echo "=== 3. CUDA 环境检查 ===" +echo "=== 3. CUDA 环境信息检查 ===" -echo -n "检查 nvidia-smi... " if command -v nvidia-smi >/dev/null 2>&1; then - nvidia-smi >/tmp/nvidia_smi_test.log 2>&1 && check || fail + echo "检测到 nvidia-smi:" + nvidia-smi || true else - if [ "$STRICT_GPU" = "1" ]; then - echo "未找到 nvidia-smi" - fail - else - echo "跳过,未找到 nvidia-smi" - fi + echo "未检测到 nvidia-smi,跳过 nvidia-smi 检查" fi if command -v nvcc >/dev/null 2>&1; then check "nvcc --version" nvcc --version else if [ "${REQUIRE_CUDA}" = "1" ]; then - echo "✗ 未找到 nvcc" - exit 1 + fail "REQUIRE_CUDA=1,但未找到 nvcc" else - echo "未找到 nvcc,跳过" + echo "未找到 nvcc,跳过 nvcc 检查" fi fi @@ -101,9 +126,8 @@ fi echo echo "=== 4. PyTorch CUDA 功能检查 ===" -check "torch CUDA 可用性" python3 - < Date: Wed, 29 Apr 2026 13:34:47 +0800 Subject: [PATCH 5/8] feat: modify test.sh --- frameworks/pytorch/2.10.0/test.sh | 2 +- frameworks/pytorch/2.11.0/test.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frameworks/pytorch/2.10.0/test.sh b/frameworks/pytorch/2.10.0/test.sh index aa23ea6..48630f8 100644 --- a/frameworks/pytorch/2.10.0/test.sh +++ b/frameworks/pytorch/2.10.0/test.sh @@ -16,7 +16,7 @@ fi echo "=== PyTorch 容器基础功能测试 ===" echo "测试镜像: ${IMAGE}" -docker run --rm "${IMAGE}" /bin/bash -lc ' +docker run --rm "${IMAGE}" --gpus all /bin/bash -lc ' set -e export CUDA_HOME=/usr/local/cuda diff --git a/frameworks/pytorch/2.11.0/test.sh b/frameworks/pytorch/2.11.0/test.sh index aa23ea6..48630f8 100644 --- a/frameworks/pytorch/2.11.0/test.sh +++ b/frameworks/pytorch/2.11.0/test.sh @@ -16,7 +16,7 @@ fi echo "=== PyTorch 容器基础功能测试 ===" echo "测试镜像: ${IMAGE}" -docker run --rm "${IMAGE}" /bin/bash -lc ' +docker run --rm "${IMAGE}" --gpus all /bin/bash -lc ' set -e export CUDA_HOME=/usr/local/cuda -- Gitee From 0d9407e82a44ac96894a16e8b61db3c32a6e12b6 Mon Sep 17 00:00:00 2001 From: yuchengen Date: Wed, 29 Apr 2026 13:43:25 +0800 Subject: [PATCH 6/8] feat: modify test.sh --- frameworks/pytorch/2.10.0/test.sh | 2 +- frameworks/pytorch/2.11.0/test.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frameworks/pytorch/2.10.0/test.sh b/frameworks/pytorch/2.10.0/test.sh index 48630f8..71e9e0a 100644 --- a/frameworks/pytorch/2.10.0/test.sh +++ b/frameworks/pytorch/2.10.0/test.sh @@ -16,7 +16,7 @@ fi echo "=== PyTorch 容器基础功能测试 ===" echo "测试镜像: ${IMAGE}" -docker run --rm "${IMAGE}" --gpus all /bin/bash -lc ' +docker run --rm --gpus all "${IMAGE}" /bin/bash -lc ' set -e export CUDA_HOME=/usr/local/cuda diff --git a/frameworks/pytorch/2.11.0/test.sh b/frameworks/pytorch/2.11.0/test.sh index 48630f8..71e9e0a 100644 --- a/frameworks/pytorch/2.11.0/test.sh +++ b/frameworks/pytorch/2.11.0/test.sh @@ -16,7 +16,7 @@ fi echo "=== PyTorch 容器基础功能测试 ===" echo "测试镜像: ${IMAGE}" -docker run --rm "${IMAGE}" --gpus all /bin/bash -lc ' +docker run --rm --gpus all "${IMAGE}" /bin/bash -lc ' set -e export CUDA_HOME=/usr/local/cuda -- Gitee From c0d77d8246ff80bda12789e0d55cae3bc554ce17 Mon Sep 17 00:00:00 2001 From: yuchengen Date: Thu, 21 May 2026 09:07:16 +0800 Subject: [PATCH 7/8] =?UTF-8?q?feat:=201=E3=80=81=E4=BF=AE=E6=94=B9Dockerf?= =?UTF-8?q?ile=E6=96=87=E4=BB=B6=E4=B8=AD=E8=AF=AD=E6=B3=95=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frameworks/pytorch/2.10.0/Dockerfile | 2 +- frameworks/pytorch/2.11.0/Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frameworks/pytorch/2.10.0/Dockerfile b/frameworks/pytorch/2.10.0/Dockerfile index 24a8237..d2d0c67 100644 --- a/frameworks/pytorch/2.10.0/Dockerfile +++ b/frameworks/pytorch/2.10.0/Dockerfile @@ -23,4 +23,4 @@ RUN --mount=type=cache,id=pip-cache-opencloudos9-cu128,target=/root/.cache/pip \ COPY test.sh . -RUN ["python3"] \ No newline at end of file +CMD ["python3"] \ No newline at end of file diff --git a/frameworks/pytorch/2.11.0/Dockerfile b/frameworks/pytorch/2.11.0/Dockerfile index a4f3d19..e973972 100644 --- a/frameworks/pytorch/2.11.0/Dockerfile +++ b/frameworks/pytorch/2.11.0/Dockerfile @@ -22,4 +22,4 @@ RUN --mount=type=cache,id=pip-cache-opencloudos9-cu128,target=/root/.cache/pip \ --index-url https://download.pytorch.org/whl/cu128 COPY test.sh . -RUN ["python3"] \ No newline at end of file +CMD ["python3"] \ No newline at end of file -- Gitee From bd684b06a9b6e760e76c35c8cd68b6f58933546c Mon Sep 17 00:00:00 2001 From: yuchengen Date: Thu, 21 May 2026 16:43:00 +0800 Subject: [PATCH 8/8] =?UTF-8?q?feat:=201=E3=80=81=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E7=9A=84=E7=8E=AF=E5=A2=83=E5=8F=98=E9=87=8F?= =?UTF-8?q?NVIDIA=5FVISIBLE=5FDEVICES=3Dall?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frameworks/pytorch/2.10.0/Dockerfile | 1 - frameworks/pytorch/2.11.0/Dockerfile | 1 - 2 files changed, 2 deletions(-) diff --git a/frameworks/pytorch/2.10.0/Dockerfile b/frameworks/pytorch/2.10.0/Dockerfile index d2d0c67..3185627 100644 --- a/frameworks/pytorch/2.10.0/Dockerfile +++ b/frameworks/pytorch/2.10.0/Dockerfile @@ -4,7 +4,6 @@ FROM opencloudos/opencloudos9-cuda-devel:12.8 LABEL maintainer="stronking 363133710@qq.com" LABEL org.opencontainers.image.source="https://gitee.com/OpenCloudOS/ai-agent-container" LABEL org.opencontainers.image.description="Torch 2.10.0 (GPU) on OpenCloudOS 9" -ENV NVIDIA_VISIBLE_DEVICES=all ENV NVIDIA_VISIBLE_DEVICES=all \ PYTHONUNBUFFERED=1 \ diff --git a/frameworks/pytorch/2.11.0/Dockerfile b/frameworks/pytorch/2.11.0/Dockerfile index e973972..6c18270 100644 --- a/frameworks/pytorch/2.11.0/Dockerfile +++ b/frameworks/pytorch/2.11.0/Dockerfile @@ -4,7 +4,6 @@ FROM opencloudos/opencloudos9-cuda-devel:12.8 LABEL maintainer="stronking 363133710@qq.com" LABEL org.opencontainers.image.source="https://gitee.com/OpenCloudOS/ai-agent-container" LABEL org.opencontainers.image.description="Torch 2.11.0 (GPU) on OpenCloudOS 9" -ENV NVIDIA_VISIBLE_DEVICES=all ENV NVIDIA_VISIBLE_DEVICES=all \ PYTHONUNBUFFERED=1 \ -- Gitee