GPU для ваших проектов · оплата криптовалютой без KYC Как арендовать
Русский
Открыть консоль
Практическое руководство / KERNODECK

Завершённый процесс — это ещё не принятый результат.

Перед длительной обработкой зафиксируйте её входные данные, назначение, события прогресса и критерий успеха. Если у вас есть удалённый shell, отделите сессию подключения от вычислительного процесса. В конце проверьте код возврата, а затем сами результаты: команда без ошибок не доказывает ни того, что все данные обработаны, ни того, что выходные данные пригодны к использованию.

7 мин чтения · Руководство для разработчиков

1. Различайте четыре состояния, которые экран смешивает

Открытое соединение доказывает лишь то, что вы ещё можете обмениваться данными с машиной. Видимый терминал может содержать shell, вычисление в котором уже завершено. И наоборот, потеря соединения не позволяет заключить, что процесс остановился. Поэтому начните с присвоения имени запуску и месту, где можно найти его следы.

Отслеживайте отдельно существование процесса, его бизнес-прогресс и приёмку результата. Количество строк в журнале — не счётчик успешно обработанных данных: программа может повторять одно и то же предупреждение. Частичный вывод может быть читаемым, но при этом неполным.

Этот метод предполагает, что вы получили и проверили необходимые средства доступа. Он не обещает ни определённого протокола доступа, ни автоматического сохранения файлов. Доступные инструменты и назначения должны быть проверены в фактически предоставленном окружении.

Прокрутите таблицу, чтобы увидеть все столбцы.
Каждое наблюдение отвечает на свой вопрос.
НаблюдениеО чём оно говоритЧего оно не доказывает
Активное соединениеКанал отвечает.Вычисление продвигается.
Процесс присутствуетЗапуск ещё существует.Он обрабатывает нужные элементы.
Подтверждённый счётчик растётЗапланированные единицы завершены.Весь корпус обработан.
Код возврата равен нулюПрограмма сообщает о нормальном завершении.Результат соответствует вашему контракту.
Выходные данные проверены и полученыВыбранные критерии проверены.Качество выше этих критериев.

2. Подготовьте опознаваемый запуск, прежде чем отсоединять его

Проверьте данные, фактическую конфигурацию и короткий первый прогон приложения. Диагностика GPU отвечает на другой вопрос: умеет ли backend выполнять вычисление? Она не подтверждает полную загрузку корпуса и логику вашей программы. Выполните эти проверки до запуска на длительное время.

Выберите идентификатор запуска и новую папку. Сохраните команду без секретов, версию кода, идентификацию входных данных и ожидаемый результат. Предусмотрите, куда писать журналы и откуда забирать файлы. Два запуска не должны одновременно писать в одну папку.

Для работы, разделённой на независимые партиции, решите, когда партиция считается завершённой: вычисление закончено, файл закрыт, содержимое проверено и состояние сохранено. Файл в процессе записи не должен означать то же самое, что принятый результат. Также проверьте фактически доступное место перед стартом.

3. Сохраняйте находимый терминал, когда это позволяет контекст

Если окружение предоставляет Unix-оболочку и tmux, этот мультиплексор позволяет отсоединить терминал и вернуться к нему после переподключения. Он защищает этот сценарий от потери клиента подключения; это не механизм восстановления после перезагрузки машины или уничтожения процесса.

Приведённые ниже команды носят учебный характер и не выполняются. Они предполагают Bash, tmux и вашу собственную программу traitement.py с показанными опциями; этот файл не является предоставляемым ресурсом. Сначала проверьте её короткую команду и используйте отдельное имя сессии, чтобы не перепутать два вычисления.

Создайте сессию, затем запустите второй блок внутри неё. Создание папки завершается ошибкой, если она уже существует, что предотвращает незаметное повторное использование её журналов. Код возврата сохраняется, если оболочка доходит до этапа записи; резкая остановка может помешать созданию этого файла. Таким образом, отсутствие кода не является неявным успехом.

С настройками по умолчанию отсоединитесь с помощью Ctrl-b, затем d. После переподключения выведите список сессий, затем подключитесь к нужной. Оболочка может оставаться видимой, когда программа уже завершилась: проверьте журнал и сохранённый код. Не запускайте сразу вторую копию только потому, что ваш прежний терминал исчез.

Создать сессию — учебные команды
tmux new -s campagne-a
Внутри сессии — пример для адаптации, не выполняется
mkdir -p runs
mkdir runs/campagne-a && (
  code_retour=0
  python -u traitement.py --config config.toml --output runs/campagne-a \
    > runs/campagne-a/execution.log 2>&1 || code_retour=$?
  printf '%s\n' "$code_retour" > runs/campagne-a/exit-code.txt
  exit "$code_retour"
)
После переподключения — найти сессию
tmux ls
tmux attach -t campagne-a

4. Считать принятую работу, а не только активность

Опция Python -u отключает буферизацию его стандартного вывода и вывода ошибок. Она помогает видеть отправляемые сообщения, но не создаёт событий прогресса в приложении. Библиотека или тихий этап всё ещё могут требовать отдельного наблюдения.

Определите понятные фазы: чтение, подготовка, вычисление, запись, проверка. Добавьте счётчик с устойчивой единицей измерения, а также итог, когда он известен. Если вы считаете принятые партиции, не переходите на счётчик прочитанных строк посреди журнала, не изменив его название.

Следующий учебный пример относится к восьми партициям по пятьсот элементов, то есть к четырём тысячам элементов. В показанный момент приняты только пять партиций. Шестая является частичной и не должна раздувать итог. Эти числа показывают правило подсчёта; они не описывают никакого выполнения Kernodeck.

Прокрутите таблицу, чтобы увидеть все столбцы.
Учебный снимок, не выполняется: пять принятых партиций из восьми.
ПартицииСостояниеЭлементы, засчитанные как принятыеРешение
1–5Проверены2 500Сохранить их идентификаторы и результаты.
6Частичная запись0Не объявлять эту партицию завершённой.
7 и 8Подлежат обработке0Оставаться в списке работы.
СовокупностьНеполный2 500 из 4 000Не принимать итоговую папку.

5. Изучить молчание или прерывание, не создавая дубликат

Когда ни один счётчик не движется, определите последнюю известную фазу и её последнюю завершённую единицу. Проверьте, существует ли процесс, появилось ли сообщение об ошибке и остаётся ли место назначения пригодным для использования. Медленный запуск модели и заблокированный цикл могут давать одинаковый неподвижный экран; контекст определяет следующую проверку.

Подготовьте добровольную остановку в вашем приложении: запрос остановки, завершение безопасной единицы, сохранение состояния, затем выход. Сигналы и прерывания зависят от системы. Python не может перехватить SIGKILL, а обработчик Python может дождаться завершения длительного нативного вызова, прежде чем выполниться. Таким образом, сохранение при остановке не заменяет периодических резервных копий.

После потери подключения сначала найдите существующую сессию и выполнение. После подтверждённой остановки определите, что завершено, а что частично. Для обучения возобновление требует подробных состояний модели и оптимизации; посвящённое руководство проверяет этот случай в новом процессе.

6. Возобновлять только то, что допускает договор

В нашем примере возобновление по разделам предполагает, что каждый раздел независим, а входные данные, код и конфигурация остаются неизменными. Оно может сохранить пять проверенных результатов и полностью пересчитать шестой, прежде чем продолжить со следующими двумя. Если эти допущения не выполняются, такое сокращение не оправдано.

Не просто добавляйте новые строки в частичный файл. Вы рискуете получить дубликаты или смешать две конфигурации. Используйте ожидаемые идентификаторы, чтобы различать полный, неполный и отсутствующий. Сохраните прежнее состояние как элемент объяснения, с отдельным местом назначения для новой попытки.

Проверьте свою стратегию на контролируемом прерывании, прежде чем полагаться на неё в большой обработке. Критерий — эквивалентность полезных выходных данных согласно вашему контракту, а не идентичность сообщений о ходе выполнения. Обучение, вычисления с внешними эффектами и распределённая обработка требуют иных гарантий, чем этот пример независимых разделов.

7. Принять и получить результат до завершения работы

Начните с кода возврата, затем сопоставьте выходные данные с манифестом входных. Для нашего примера дождитесь восьми разделов и четырёх тысяч предусмотренных идентификаторов, без пропусков и дубликатов. Проверьте формат, размеры и значимые значения; чтение файла не доказывает, что он содержит правильный результат.

Получите принятые выходные данные, разрешённую конфигурацию, версии и отчёт о проверке. Сравните размеры и, при необходимости, контрольные суммы между источником и копией. Идентичная контрольная сумма помогает проверить перенос байтов; она не доказывает ни качество модели, ни законное происхождение файла.

Наконец, откройте результат из места его хранения с помощью инструмента, который будет его использовать. Предусмотрите этот шаг до окончания вашего доступа к вычислениям. Работа завершена, когда проверенный результат можно получить и интерпретировать, а не когда последний процент достиг ста.

Ваши вопросы

Всегда ли закрытие удалённого соединения останавливает вычисление?

Нет: это зависит от того, как был запущен процесс. Сессия tmux позволяет отсоединить его от клиентского терминала, если этот инструмент доступен. После повторного подключения сначала найдите существующее выполнение, прежде чем запускать другое.

Достаточно ли кода возврата, равного нулю, для подтверждения моего результата?

Нет. Он указывает, что программа сообщает о нормальном завершении. Проверьте также полноту идентификаторов, формат и предусмотренные бизнес-критерии. Программа может завершиться нормально, обработав неправильное подмножество.

Означает ли неподвижный журнал, что GPU заблокирован?

Не обязательно. Программа может подготавливать данные, ожидать записи или не выдавать сведения о ходе выполнения. Определите фазу и состояние процесса, прежде чем решать об остановке. Явный бизнес-счётчик полезнее, чем одно лишь наличие сообщений.