Перейти к основному содержимому
Главы руководства по обучению Вся документация

SDK Python: методы, результаты и ошибки

Сигнатуры и аргументы TrainingProject, условия возврата и обработка ошибок с полными примерами Python.

Команды и код во всех языковых версиях остаются на английском. Заменяйте ЗАГЛАВНЫЕ заполнители значениями своей учетной записи и оплаченного задания. Не вставляйте реальные ключи в общие ноутбуки или журналы.

Один API проекта, один базовый движок

CLI и Python должны одинаково обрабатывать конфигурацию, состояние и результаты.
  1. from_file Загрузить без изменения весов
  2. plan Проверить разрешенные входные данные
  3. run / управление Управлять worker-процессами и восстановлением
  4. evaluate / export Проверить принятые локальные результаты

from_file: Загрузить без изменения весов. plan: Проверить разрешенные входные данные. run / управление: Управлять worker-процессами и восстановлением. evaluate / export: Проверить принятые локальные результаты

Используйте тот же движок из Python

TrainingProject дополняет TrainingClient, а не заменяет его. Загрузите конфигурацию и API-ключ с нужными ограничениями, проверьте план и запустите обучение. Объект проекта предоставляет принадлежащий ему запуск для проверки и управления. run не перезаписывает существующий запуск, а для resume требуется допустимое состояние восстановления.

  • Пути могут быть строками или объектами os.PathLike. Параметры методов передаются именованными аргументами.
  • from_file проверяет локальную конфигурацию, не меняет веса и не отправляет запросы модели-учителю.
  • Интерфейсы Python и CLI используют одинаковые настройки, fingerprints, бюджеты и результаты.
Полный справочник проекта Python
Поле или интерфейсТип или результатЗначение по умолчанию или код завершенияПоведение и проверка
TrainingProject.from_file(path, *, api_key) TrainingProject Обязательное / без значения по умолчанию Загружает и проверяет путь к конфигурации и непустую секретную строку. Возвращает объект проекта, не меняя веса и не отправляя запросов модели-учителю.
plan(*, dry_run=True) dict true Допустимо только True. Возвращает resolved_configuration, compatibility, data_sharing, budgets, topics, artifacts и fingerprints.
run() dict Обязательное / без значения по умолчанию Ожидает конечного или приостановленного состояния; возвращает общий результат запуска только при успешной операции, иначе выбрасывает соответствующее исключение.
status() dict Обязательное / без значения по умолчанию Читает run_id, status, stop_reason, report_path и unmet_criteria, не запуская worker-процесс.
pause() dict Обязательное / без значения по умолчанию Ожидает подтверждения worker-процесса и допустимую контрольную точку, затем возвращает общий результат запуска. При недопустимом состоянии возникает ошибка конфигурации.
resume() dict Обязательное / без значения по умолчанию Проверяет все fingerprints и возобновляет принадлежащие проекту worker-процессы; при успехе возвращает общий результат запуска.
cancel() dict Обязательное / без значения по умолчанию Ожидает остановки принадлежащих проекту worker-процессов и возвращает состояние отмены; выбрасывает CancellationError, если безопасная остановка не подтверждена.
evaluate(*, split="test") dict "test" Принимает validation или test. Возвращает run_id, split, accepted, criteria, regressions и report_path; при провале приемки сохраняет отчет и выбрасывает EvaluationFailedError.
export(*, format="safetensors") dict "safetensors" Возвращает run_id, format, artifact_path, manifest_path и sha256 для совместимого принятого артефакта.
register_evaluator(name, scorer, *, version) None Обязательное / без значения по умолчанию Зарегистрируйте доверенную функцию оценки до планирования или проверки. Укажите постоянное имя и явную версию. Функция получает prediction, target и row и должна возвращать конечное число от 0 до 1. Встроенные метрики заменять нельзя.
Пример · python
import os
from fusionpointai_training import TrainingProject

project = TrainingProject.from_file(
    "./german-project/training.json",
    api_key=os.environ["FUSIONPOINTAI_API_KEY"],
)
plan = project.plan(dry_run=True)
print(plan["resolved_configuration"], plan["data_sharing"], plan["budgets"])
# Confirm the reviewed plan before starting real work.
result = project.run()
if result["status"] != "completed" or result["stop_reason"] != "accepted":
    raise RuntimeError("Training was not accepted; inspect the retained report.")
evaluation = project.evaluate(split="test")
# A failed required criterion raises EvaluationFailedError after saving its report.
artifact = project.export(format="safetensors")
print(artifact["manifest_path"])

Проверяйте структурированные результаты

Описанные ниже условия возврата определяют структуру данных, а не примерные измерения. Перед развертыванием проверьте status, stop_reason и unmet_criteria. Результаты оценки указывают каждое условие и ухудшение отдельно. Экспорт возвращает локальные пути и метаданные целостности; он не загружает модель автоматически и не заменяет производственный инференс.

  • Данные о статусе и манифесте можно прочитать без новых запросов к модели-учителю.
  • Оценка на итоговом тестовом наборе отделена от проверки, используемой при улучшении модели.
  • Манифест артефакта должен соответствовать реальным файлам, безопасным относительным путям, размерам в байтах и значениям SHA-256.
Пример · text
TrainingProject return contract (dictionary shapes)
from_file: validates configuration, attaches its owned run; no weight updates.
plan: {schema_version, resolved_configuration, compatibility, data_sharing,
       budgets, topics, artifacts, fingerprints}; dry_run must be true.
run/resume: {run_id, status, stop_reason, report_path, unmet_criteria}.
status/pause/cancel: {run_id, status, stop_reason, report_path, unmet_criteria}.
stop_reason is null until terminal; run/resume block until terminal or paused.
pause blocks until owned workers acknowledge an atomic checkpoint.
cancel blocks until owned workers stop; a failed stop raises CancellationError.
evaluate: {run_id, split, accepted, criteria, regressions, report_path}.
export: {run_id, format, artifact_path, manifest_path, sha256}.
Returned paths are local, resolved paths; no model upload is implied.
Status output is redacted and may be read without opening an API connection.
from_file requires path: str | os.PathLike and a nonempty api_key: str.
plan accepts dry_run=True only; False is ConfigurationError, not execution.
evaluate accepts split="validation" or "test"; defaults to test.
export accepts safetensors or adapters when supported by the selected adapter.
All method keyword options are keyword-only. Unlisted arguments are rejected.

Обрабатывайте ошибки, не скрывая их

Классы ошибок проекта наследуются от TrainingError и соответствуют кодам завершения CLI. Ошибки конфигурации и совместимости возникают до обучения. При превышении бюджета или провале оценки сохраняются отчеты и невыполненные критерии. Ошибка остановки worker-процесса или контрольной точки остается ошибкой, пока не подтверждена безопасная очистка.

  • Успешные методы возвращают документированные словари. При провале критериев после сохранения отчета выбрасывается EvaluationFailedError.
  • Не записывайте в журналы API-ключи, заголовки авторизации, полное окружение или конфиденциальные примеры обучения.
  • Не запускайте автоматические повторы для всех исключений. Сначала проверьте состояние запуска и сервиса.
Ошибки Python и соответствующие коды завершения CLI
Поле или интерфейсТип или результатЗначение по умолчанию или код завершенияПоведение и проверка
ConfigurationError TrainingError 2 Недопустимая схема, аргумент, путь или состояние либо неподдерживаемое переопределение. Исправьте входные данные до повтора.
CompatibilityError TrainingError 3 Адаптер, модель, оборудование, точность, распределенная схема или формат не поддерживаются.
AuthenticationError TrainingError 4 Ключ отсутствует или просрочен, нет права доступа либо запрещена передача данных модели-учителю; не включайте секреты в сообщение.
BudgetExceededError TrainingError 5 Конечный бюджет исчерпан до приемки. Сохраните допустимую контрольную точку и невыполненные критерии.
EvaluationFailedError TrainingError 6 Обязательные критерии не выполнены, улучшение остановилось или ухудшение сохраняется. Сохраните отчет об оценке.
CheckpointError TrainingError 7 Состояние восстановления недопустимо, неполно или не соответствует запуску. Не принуждайте к возобновлению.
CancellationError TrainingError 7 Не удалось подтвердить безопасную остановку принадлежащих проекту worker-процессов; не закрывайте задачу очистки.
ExportError TrainingError 7 Артефакт не поддерживается или недопустим, путь небезопасен либо проверка контрольной суммы не пройдена; не передавайте его.
TrainingError Exception 7 Базовая ошибка обучения. Все описанные ошибки наследуются от этого класса; сохраните диагностику без секретов.
Пример · python
import os
from fusionpointai_training import TrainingProject
from fusionpointai_training.errors import (
    AuthenticationError, BudgetExceededError, CompatibilityError,
    ConfigurationError, EvaluationFailedError, TrainingError,
)

try:
    project = TrainingProject.from_file(
        "./german-project/training.json",
        api_key=os.environ.get("FUSIONPOINTAI_API_KEY", ""),
    )
    project.plan(dry_run=True)
    project.run()
    result = project.evaluate(split="test")
except (ConfigurationError, CompatibilityError):
    print("Correct the configuration before starting a new run.")
except AuthenticationError:
    print("Check access without logging the key.")
except BudgetExceededError:
    print("Preserve the checkpoint. A larger approved budget requires a new plan.")
except EvaluationFailedError:
    print("Preserve failed criteria; do not publish this model as accepted.")
except TrainingError:
    print("Inspect redacted diagnostics; do not blindly repeat a write.")
# CancellationError, CheckpointError and ExportError also inherit TrainingError.
Пример · python
from fusionpointai_training import register_evaluator

def category_match(prediction, target, row):
    return float(prediction.strip().casefold() == target.strip().casefold())

register_evaluator("category_match", category_match, version="1")
# Register before project.plan() in the same Python process.
# In rubric.json: "metric": "category_match", "minimum_score": 0.85
# This scorer measures category equality, not open-ended semantic correctness.