GPU для ваших проєктів · оплата криптою без KYC Як орендувати
Українська
Відкрити консоль
Практичний посібник / KERNODECK

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

Перед довгим обчисленням зафіксуйте його вхідні дані, місце призначення, події прогресу та критерій успіху. Якщо у вас є віддалений shell, відокремте сесію з'єднання від процесу обчислення. Наприкінці перегляньте код повернення, а потім самі результати: команда без помилок не доводить ні того, що всі дані було оброблено, ні того, що вихідні дані придатні до використання.

7 хв читання · Посібник для розробників

1. Розрізняйте чотири стани, які екран змішує в один

Відкрите з'єднання доводить лише те, що ви ще можете взаємодіяти з машиною. Видимий термінал може містити shell, обчислення якого вже завершилося. І навпаки, втрата з'єднання не дає змоги зробити висновок, що процес зупинився. Тож почніть з того, щоб дати назву виконанню та місцю, де шукати його сліди.

Відстежуйте окремо існування процесу, його бізнес-прогрес і прийняття результату. Кількість рядків у журналі - це не лічильник успішно оброблених даних: програма може повторювати те саме попередження. Частковий вивід може бути читабельним, але неповним.

Цей метод передбачає, що ви отримали та перевірили необхідні засоби доступу. Він не обіцяє ні конкретного протоколу доступу, ні автоматичного збереження файлів. Доступні інструменти та місця призначення слід перевіряти в середовищі, яке фактично надано.

Прокрутіть таблицю, щоб побачити всі стовпці.
Кожне спостереження відповідає на інше питання.
СпостереженняЩо воно показуєЧого воно не доводить
Активне з'єднанняКанал відповідає.Обчислення просувається.
Процес наявнийВиконання ще існує.Воно обробляє правильні елементи.
Підтверджений лічильник зростаєЗаплановані одиниці завершено.Увесь корпус завершено.
Код повернення дорівнює нулюПрограма повідомляє про нормальне завершення.Результат відповідає вашому договору.
Вихідні дані проконтрольовано та отриманоОбрані критерії перевірено.Якість, що перевищує ці критерії.

2. Підготуйте ідентифіковане виконання, перш ніж відокремити його

Перевірте дані, фактичну конфігурацію та короткий перший прохід застосунку. Діагностика GPU відповідає на інше питання: чи вміє бекенд виконувати обчислення? Вона не підтверджує повне завантаження корпусу чи логіку вашої програми. Виконайте ці перевірки перед запуском на тривалий час.

Виберіть ідентифікатор виконання та новий каталог. Збережіть команду без секретів, версію коду, ідентичність вхідних даних і очікуваний результат. Передбачте, куди писати журнали та звідки отримувати файли. Два запуски не повинні одночасно писати в той самий каталог.

Для роботи, розділеної на незалежні партиції, визначте, коли партиція стає завершеною: обчислення виконано, файл закрито, вміст перевірено та стан збережено. Файл, який ще записується, не повинен мати те саме значення, що й прийнятий результат. Також перевірте фактично доступний простір перед стартом.

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 заблоковано?

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