From b830e9ab927c3c02509eb28e04099ef4c8cdc7fa Mon Sep 17 00:00:00 2001 From: yuchengen Date: Fri, 29 May 2026 09:15:44 +0800 Subject: [PATCH 1/2] feat: add MLflow 3.11.0 container image for OC9 --- frameworks/MLflow/3.11.0/Dockerfile | 25 +++ frameworks/MLflow/3.11.0/README.md | 189 +++++++++++++++++++++++ frameworks/MLflow/3.11.0/build.conf | 4 + frameworks/MLflow/3.11.0/test.sh | 77 +++++++++ frameworks/MLflow/3.11.0/test_result.png | Bin 0 -> 18850 bytes 5 files changed, 295 insertions(+) create mode 100644 frameworks/MLflow/3.11.0/Dockerfile create mode 100644 frameworks/MLflow/3.11.0/README.md create mode 100644 frameworks/MLflow/3.11.0/build.conf create mode 100644 frameworks/MLflow/3.11.0/test.sh create mode 100644 frameworks/MLflow/3.11.0/test_result.png diff --git a/frameworks/MLflow/3.11.0/Dockerfile b/frameworks/MLflow/3.11.0/Dockerfile new file mode 100644 index 00000000..5723495c --- /dev/null +++ b/frameworks/MLflow/3.11.0/Dockerfile @@ -0,0 +1,25 @@ +FROM opencloudos/opencloudos9-minimal:latest + +LABEL maintainer="stronking 363133710@qq.com" +LABEL org.opencontainers.image.source="https://gitee.com/OpenCloudOS/ai-agent-container" +LABEL org.opencontainers.image.description="MLflow 3.11.0 container image based on OpenCloudOS 9" + +ARG MLFLOW_VERSION=3.11.0 + +ENV LANG=en_US.UTF-8 +ENV LC_ALL=en_US.UTF-8 +ENV PYTHONUNBUFFERED=1 + +# Install MLflow +RUN python3 -m ensurepip +RUN --mount=type=cache,id=pip-cache-opencloudos9-cu128,target=/root/.cache/pip pip3 install mlflow==$MLFLOW_VERSION + +# Default MLflow configuration +ENV MLFLOW_HOST=0.0.0.0 +ENV MLFLOW_PORT=5000 + +EXPOSE 5000 + +WORKDIR /workspace + +CMD ["sh", "-c", "mlflow server --host ${MLFLOW_HOST} --port ${MLFLOW_PORT}"] diff --git a/frameworks/MLflow/3.11.0/README.md b/frameworks/MLflow/3.11.0/README.md new file mode 100644 index 00000000..0a2f57d3 --- /dev/null +++ b/frameworks/MLflow/3.11.0/README.md @@ -0,0 +1,189 @@ + +# MLflow on OpenCloudOS 9 + +## 基本信息 + +- **框架版本**:v3.11.1 +- **基础镜像**:opencloudos9-minimal +- **Python 版本**:3.11 +- **CUDA 版本**:N/A + +--- + +## 项目简介 + +[MLflow](https://github.com/mlflow/mlflow) 是一个开源的机器学习生命周期管理平台,主要提供以下能力: + +- 实验追踪(Experiment Tracking) +- 参数与指标记录 +- Artifact 管理 +- 模型注册(Model Registry) +- 模型部署(Serving) + +本镜像基于 OpenCloudOS 9 构建,提供轻量级 MLflow Tracking Server 运行环境。 + +--- + +## 构建 + +```bash +docker build -t oc9-mlflow:3.11.1 . +```` + +--- + +## 使用示例 + +### 查看 MLflow 版本 + +```bash +docker run --rm oc9-mlflow:3.11.1 \ + python3 -c "import mlflow; print(mlflow.__version__)" +``` + +--- + +## 启动 MLflow Tracking Server + +```bash +docker run -d \ + --name mlflow \ + -p 5000:5000 \ + oc9-mlflow:3.11.1 +``` + +访问: + +```text +http://localhost:5000 +``` + +--- + +## 持久化实验数据 + +默认情况下,容器中的实验数据会随着容器删除而丢失。 + +推荐挂载数据目录: + +```bash +docker run -d \ + --name mlflow \ + -p 5000:5000 \ + -v $(pwd)/mlruns:/mlruns \ + oc9-mlflow:3.11.1 \ + sh -c "mlflow server \ + --backend-store-uri sqlite:///mlruns/mlflow.db \ + --default-artifact-root /mlruns \ + --host 0.0.0.0 \ + --port 5000" +``` + +目录说明: + +```text +mlruns/ +├── mlflow.db +└── artifacts +``` + +--- + +## 实验追踪示例 + +创建示例脚本: + +```python +import mlflow +import random + +mlflow.set_tracking_uri("http://127.0.0.1:5000") +mlflow.set_experiment("demo-experiment") + +with mlflow.start_run(): + + mlflow.log_param("learning_rate", 0.01) + mlflow.log_param("epochs", 10) + + for step in range(10): + loss = 1.0 / (step + 1) + accuracy = 0.8 + random.random() * 0.1 + + mlflow.log_metric("loss", loss, step=step) + mlflow.log_metric("accuracy", accuracy, step=step) + + with open("result.txt", "w") as f: + f.write("training completed") + + mlflow.log_artifact("result.txt") +``` + +运行: + +```bash +python3 train.py +``` + +然后访问: + +```text +http://localhost:5000 +``` + +即可查看实验参数、指标和 Artifact。 + +--- + +## 容器网络使用示例 + +如果训练任务运行在其他容器中,建议使用 Docker Network。 + +创建网络: + +```bash +docker network create mlflow-net +``` + +启动 MLflow: + +```bash +docker run -d \ + --name mlflow \ + --network mlflow-net \ + -p 5000:5000 \ + oc9-mlflow:3.11.1 +``` + +训练容器中配置: + +```bash +export MLFLOW_TRACKING_URI=http://mlflow:5000 +``` + +--- + +## 默认配置 + +| 配置项 | 默认值 | +| ----------------- | ---------- | +| Host | 0.0.0.0 | +| Port | 5000 | +| Working Directory | /workspace | + +--- + +## 已知问题 + +* 当前镜像为轻量版,不包含 PyTorch、TensorFlow 等深度学习框架 +* 不包含 CUDA 与 GPU 运行环境 +* Model Serving 场景下,部分依赖需用户自行安装 + +--- + +## 上游项目 + +* MLflow: https://github.com/mlflow/mlflow +* OpenCloudOS: https://gitee.com/OpenCloudOS + +``` +``` diff --git a/frameworks/MLflow/3.11.0/build.conf b/frameworks/MLflow/3.11.0/build.conf new file mode 100644 index 00000000..6fdf0d8e --- /dev/null +++ b/frameworks/MLflow/3.11.0/build.conf @@ -0,0 +1,4 @@ +# MLflow 3.11.0 on OpenCloudOS 9 +IMAGE_NAME=oc9-mlflow +IMAGE_TAG=3.11.0 +GPU_TEST=false \ No newline at end of file diff --git a/frameworks/MLflow/3.11.0/test.sh b/frameworks/MLflow/3.11.0/test.sh new file mode 100644 index 00000000..1cb9a5c4 --- /dev/null +++ b/frameworks/MLflow/3.11.0/test.sh @@ -0,0 +1,77 @@ +#!/bin/bash +set -e + +IMAGE="${1:?ERROR: 缺少镜像参数。用法: bash test.sh }" + +DOCKER_CMD="docker run --rm -e GIT_PYTHON_REFRESH=quiet" + +echo "=== MLflow 基础功能测试 ===" + +echo -n "检查 MLflow import 和版本... " +$DOCKER_CMD "$IMAGE" python3 -c "import mlflow; print(mlflow.__version__)" >/tmp/mlflow_import.log 2>&1 \ + && echo "✓ 通过" || { echo "✗ 失败"; cat /tmp/mlflow_import.log; exit 1; } + +echo -n "检查 MLflow CLI... " +$DOCKER_CMD "$IMAGE" mlflow --version >/tmp/mlflow_cli.log 2>&1 \ + && echo "✓ 通过" || { echo "✗ 失败"; cat /tmp/mlflow_cli.log; exit 1; } + +echo -n "检查实验追踪核心功能... " +$DOCKER_CMD "$IMAGE" python3 -c " +import os +import tempfile +import mlflow + +tmpdir = tempfile.mkdtemp() +db_path = os.path.join(tmpdir, 'mlflow.db') + +mlflow.set_tracking_uri('sqlite:///' + db_path) +mlflow.set_experiment('ci-test-experiment') + +with mlflow.start_run(): + mlflow.log_param('learning_rate', 0.01) + mlflow.log_metric('accuracy', 0.95) + + run = mlflow.active_run() + assert run is not None + assert run.info.run_id is not None + +print('MLflow experiment tracking works') +" >/tmp/mlflow_tracking.log 2>&1 \ + && echo "✓ 通过" || { echo "✗ 失败"; cat /tmp/mlflow_tracking.log; exit 1; } + +echo -n "检查 MLflow Tracking Server 启动... " +$DOCKER_CMD "$IMAGE" bash -c " +set -e + +TMPDIR=\$(mktemp -d) + +mlflow server \ + --backend-store-uri sqlite:///\$TMPDIR/mlflow.db \ + --default-artifact-root \$TMPDIR/artifacts \ + --host 127.0.0.1 \ + --port 5000 >/tmp/mlflow_server.log 2>&1 & + +PID=\$! + +for i in \$(seq 1 60); do + if curl -fs http://127.0.0.1:5000/health >/dev/null 2>&1; then + kill \$PID + wait \$PID 2>/dev/null || true + exit 0 + fi + + if ! kill -0 \$PID 2>/dev/null; then + cat /tmp/mlflow_server.log + exit 1 + fi + + sleep 1 +done + +cat /tmp/mlflow_server.log +kill \$PID 2>/dev/null || true +exit 1 +" >/tmp/mlflow_server_check.log 2>&1 \ + && echo "✓ 通过" || { echo "✗ 失败"; cat /tmp/mlflow_server_check.log; exit 1; } + +echo "=== 所有测试通过 ===" \ No newline at end of file diff --git a/frameworks/MLflow/3.11.0/test_result.png b/frameworks/MLflow/3.11.0/test_result.png new file mode 100644 index 0000000000000000000000000000000000000000..f4e0160ef3a7bd89aad4268fcb4aaef32731592c GIT binary patch literal 18850 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 literal 0 HcmV?d00001 -- Gitee From 795f967798d358f2123c3304997a845a6e6c1656 Mon Sep 17 00:00:00 2001 From: yuchengen Date: Mon, 1 Jun 2026 16:25:00 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20Readme.md=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=A1=86=E6=9E=B6=E7=89=88=E6=9C=AC=E7=BB=9F=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frameworks/MLflow/3.11.0/README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/frameworks/MLflow/3.11.0/README.md b/frameworks/MLflow/3.11.0/README.md index 0a2f57d3..1a1ac12e 100644 --- a/frameworks/MLflow/3.11.0/README.md +++ b/frameworks/MLflow/3.11.0/README.md @@ -3,7 +3,7 @@ ## 基本信息 -- **框架版本**:v3.11.1 +- **框架版本**:v3.11.0 - **基础镜像**:opencloudos9-minimal - **Python 版本**:3.11 - **CUDA 版本**:N/A @@ -27,7 +27,7 @@ ## 构建 ```bash -docker build -t oc9-mlflow:3.11.1 . +docker build -t oc9-mlflow:3.11.0 . ```` --- @@ -37,7 +37,7 @@ docker build -t oc9-mlflow:3.11.1 . ### 查看 MLflow 版本 ```bash -docker run --rm oc9-mlflow:3.11.1 \ +docker run --rm oc9-mlflow:3.11.0 \ python3 -c "import mlflow; print(mlflow.__version__)" ``` @@ -49,7 +49,7 @@ docker run --rm oc9-mlflow:3.11.1 \ docker run -d \ --name mlflow \ -p 5000:5000 \ - oc9-mlflow:3.11.1 + oc9-mlflow:3.11.0 ``` 访问: @@ -71,7 +71,7 @@ docker run -d \ --name mlflow \ -p 5000:5000 \ -v $(pwd)/mlruns:/mlruns \ - oc9-mlflow:3.11.1 \ + oc9-mlflow:3.11.0 \ sh -c "mlflow server \ --backend-store-uri sqlite:///mlruns/mlflow.db \ --default-artifact-root /mlruns \ @@ -151,7 +151,7 @@ docker run -d \ --name mlflow \ --network mlflow-net \ -p 5000:5000 \ - oc9-mlflow:3.11.1 + oc9-mlflow:3.11.0 ``` 训练容器中配置: -- Gitee