Построение надежного сквозного ML-пайплайна с использованием MLE-Agent и Ollama локально
В этой статье мы рассмотрим, как объединить MLE-Agent с Ollama для создания полностью локального рабочего процесса машинного обучения без зависимости от API. Мы создадим воспроизводимую среду, сгенерируем небольшой синтетический набор данных и направим агента на написание обучающего скрипта. Эта методика позволит нам поддерживать плавный рабочий процесс и воспользоваться преимуществами автоматизации.
Настройка окружения
Первым шагом является настройка рабочего пространства. Мы установим необходимые зависимости Python и запустим Ollama локально. Это позволит нам избежать проблем с управлением зависимостями и обеспечит надежность кода. Чтобы начать, выполните следующие команды:
import os, re, time, textwrap, subprocess, sys
from pathlib import Path
def sh(cmd, check=True, env=None, cwd=None):
print(f"$ {cmd}")
p = subprocess.run(cmd, shell=True, env={**os.environ, **(env or {})} if env else None,
cwd=cwd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True)
print(p.stdout)
if check and p.returncode != 0: raise RuntimeError(p.stdout)
return p.stdout
WORK = Path("/content/mle_colab_demo"); WORK.mkdir(parents=True, exist_ok=True)
PROJ = WORK/"proj"; PROJ.mkdir(exist_ok=True)
DATA = WORK/"data.csv"; MODEL = WORK/"model.joblib"; PREDS = WORK/"preds.csv"
SAFE = WORK/"train_safe.py"; RAW = WORK/"agent_train_raw.py"; FINAL = WORK/"train.py"
MODEL_NAME = os.environ.get("OLLAMA_MODEL", "llama3.2:1b")
sh("pip -q install --upgrade pip")
sh("pip -q install mle-agent==0.4.* scikit-learn pandas numpy joblib")
sh("curl -fsSL https://ollama.com/install.sh | sh")
sv = subprocess.Popen("ollama serve", shell=True)
time.sleep(4); sh(f"ollama pull {MODEL_NAME}")
Генерация набора данных
Далее мы создадим небольшой помеченный набор данных, который будет использоваться для обучения нашей модели. Это поможет нам проверить эффективность нашего пайплайна. Используйте следующий код:
import numpy as np, pandas as pd
np.random.seed(0)
n = 500; X = np.random.rand(n, 4); y = (X @ np.array([0.4, -0.2, 0.1, 0.5]) + 0.15 * np.random.randn(n) > 0.55).astype(int)
pd.DataFrame(np.c_[X, y], columns=["f1", "f2", "f3", "f4", "target"]).to_csv(DATA, index=False)
Теперь, когда у нас есть набор данных, мы можем настроить окружение для MLE-Agent и задать ему задание на написание скрипта для обучения.
Санитизация сгенерированного кода
Важно убедиться, что сгенерированный скрипт корректен. Мы исправим распространенные ошибки импорта и добавим необходимые зависимости. Вот пример кода, который можно использовать:
def sanitize(src: str) -> str:
if not src: return ""
s = src
fixes = {
r"froms+sklearn.pipelines+imports+SimpleImputer": "from sklearn.impute import SimpleImputer",
r"froms+sklearn.preprocessing+imports+StandardScaler": "from sklearn.preprocessing import StandardScaler",
# добавьте другие фиксированные случаи
}
for pat, rep in fixes.items(): s = re.sub(pat, rep, s)
return s
После этого мы можем запустить наш финальный скрипт, который будет обучать модель и сохранять результаты. Это гарантирует, что мы получим надежный и работоспособный код.
Заключение
В этой статье мы показали, как интегрировать локальные языковые модели с традиционными пайплайнами машинного обучения, обеспечивая надежность и безопасность. Следуя этому процессу, мы можем контролировать выполнение, избегать внешних ключей и использовать автоматизацию для реального обучения моделей.
Не забывайте следить за последними обновлениями на нашем сайте и участвовать в обсуждениях, чтобы быть в курсе самых актуальных новостей в области машинного обучения.














