1. Розрізняйте чотири стани, які екран змішує в один
Відкрите з'єднання доводить лише те, що ви ще можете взаємодіяти з машиною. Видимий термінал може містити shell, обчислення якого вже завершилося. І навпаки, втрата з'єднання не дає змоги зробити висновок, що процес зупинився. Тож почніть з того, щоб дати назву виконанню та місцю, де шукати його сліди.
Відстежуйте окремо існування процесу, його бізнес-прогрес і прийняття результату. Кількість рядків у журналі - це не лічильник успішно оброблених даних: програма може повторювати те саме попередження. Частковий вивід може бути читабельним, але неповним.
Цей метод передбачає, що ви отримали та перевірили необхідні засоби доступу. Він не обіцяє ні конкретного протоколу доступу, ні автоматичного збереження файлів. Доступні інструменти та місця призначення слід перевіряти в середовищі, яке фактично надано.
Прокрутіть таблицю, щоб побачити всі стовпці.| Спостереження | Що воно показує | Чого воно не доводить |
|---|---|---|
| Активне з'єднання | Канал відповідає. | Обчислення просувається. |
| Процес наявний | Виконання ще існує. | Воно обробляє правильні елементи. |
| Підтверджений лічильник зростає | Заплановані одиниці завершено. | Увесь корпус завершено. |
| Код повернення дорівнює нулю | Програма повідомляє про нормальне завершення. | Результат відповідає вашому договору. |
| Вихідні дані проконтрольовано та отримано | Обрані критерії перевірено. | Якість, що перевищує ці критерії. |
2. Підготуйте ідентифіковане виконання, перш ніж відокремити його
Перевірте дані, фактичну конфігурацію та короткий перший прохід застосунку. Діагностика GPU відповідає на інше питання: чи вміє бекенд виконувати обчислення? Вона не підтверджує повне завантаження корпусу чи логіку вашої програми. Виконайте ці перевірки перед запуском на тривалий час.
Виберіть ідентифікатор виконання та новий каталог. Збережіть команду без секретів, версію коду, ідентичність вхідних даних і очікуваний результат. Передбачте, куди писати журнали та звідки отримувати файли. Два запуски не повинні одночасно писати в той самий каталог.
Для роботи, розділеної на незалежні партиції, визначте, коли партиція стає завершеною: обчислення виконано, файл закрито, вміст перевірено та стан збережено. Файл, який ще записується, не повинен мати те саме значення, що й прийнятий результат. Також перевірте фактично доступний простір перед стартом.
3. Зберігайте термінал таким, щоб його можна було знайти, коли це дозволяє контекст
Якщо середовище пропонує оболонку Unix і tmux, цей мультиплексор дозволяє від’єднати термінал і повернутися до нього після повторного підключення. Він захищає цей процес від втрати клієнта з’єднання; це не механізм відновлення після перезавантаження машини чи знищення процесу.
Наведені нижче команди мають навчальний характер і не виконуються. Вони припускають Bash, tmux і вашу власну програму traitement.py з показаними опціями; цей файл не є наданим ресурсом. Спершу перевірте його коротку команду та використовуйте окрему назву сесії, щоб не сплутати два обчислення.
Створіть сесію, а потім запустіть другий блок усередині неї. Створення каталогу завершується невдачею, якщо він уже існує, що запобігає непомітному повторному використанню його журналів. Код повернення зберігається, якщо оболонка доходить до етапу запису; різка зупинка може перешкодити створенню цього файлу. Тож відсутність коду не є неявним успіхом.
Зі стандартними скороченнями від’єднуйтеся за допомогою Ctrl-b, а потім d. Після повторного підключення перелічіть сесії та приєднайтеся до потрібної. Оболонка може залишатися видимою, навіть коли програма завершилася: перегляньте журнал і збережений код. Не запускайте одразу другу копію лише тому, що ваш попередній термінал зник.
tmux new -s campagne-amkdir -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-a4. Рахуйте прийняту роботу, а не лише активність
Опція Python -u знімає буферизацію його стандартного виводу та виводу помилок. Вона допомагає бачити надіслані повідомлення, але не створює подій прогресу в застосунку. Бібліотека або тихий етап усе ще можуть вимагати власного спостереження.
Визначте зрозумілі фази: читання, підготовка, обчислення, запис, перевірка. Додайте лічильник зі сталою одиницею, а також підсумок, коли він відомий. Якщо ви рахуєте прийняті розділи, не переходьте посеред журналу до лічильника прочитаних рядків, не змінивши його назву.
Наступний навчальний приклад стосується восьми розділів по п’ятсот елементів, тобто чотирьох тисяч елементів. На ілюстрований момент прийнято лише п’ять розділів. Шостий частковий і не повинен збільшувати підсумок. Числа показують правило підрахунку; вони не описують жодного виконання Kernodeck.
Прокрутіть таблицю, щоб побачити всі стовпці.| Розділи | Стан | Елементи, зараховані як прийняті | Рішення |
|---|---|---|---|
| 1–5 | Перевірені | 2 500 | Зберегти їхні ідентичності та результати. |
| 6 | Частковий запис | 0 | Не оголошувати цей розділ завершеним. |
| 7 і 8 | До опрацювання | 0 | Залишити у списку роботи. |
| Загалом | Неповний | 2 500 із 4 000 | Не приймати фінальну теку. |
5. Дослідіть тишу або переривання, не створюючи дублікат
Коли жоден лічильник не рухається, визначте останню відому фазу та її останню завершену одиницю. Перевірте, чи існує процес, чи з’явилося повідомлення про помилку та чи залишається призначення придатним. Повільний запуск моделі та заблокований цикл можуть давати той самий нерухомий екран; контекст визначає наступну перевірку.
Підготуйте добровільну зупинку у вашому застосунку: запит на зупинку, завершення безпечної одиниці, збереження стану, а потім вихід. Сигнали та переривання залежать від системи. Python не може перехопити SIGKILL, і обробник Python може чекати завершення довгого нативного виклику, перш ніж виконатися. Тож збереження під час зупинки не замінює періодичних збережень.
Після втрати з’єднання спершу знайдіть наявну сесію та виконання. Після підтвердженої зупинки визначте, що завершено, а що часткове. Для навчання відновлення вимагає докладних станів моделі та оптимізації; присвячений посібник перевіряє цей випадок у новому процесі.
6. Відновлюйте лише те, що дозволяє контракт
У нашому прикладі відновлення за розділами передбачає, що кожен розділ є незалежним, а вхідні дані, код і конфігурація залишаються однаковими. Воно може зберегти п'ять підтверджених результатів і повністю перерахувати шостий, перш ніж перейти до наступних двох. Якщо ці припущення не виконуються, таке скорочення не є виправданим.
Не просто додавайте нові рядки до часткового файлу. Інакше ви ризикуєте створити дублікати або змішати дві конфігурації. Використовуйте очікувані ідентифікатори, щоб розрізнити повний, неповний і відсутній стан. Збережіть попередній стан як елемент пояснення, з окремим призначенням для нової спроби.
Перевірте свою стратегію на контрольованому перериванні, перш ніж покладатися на неї для великої обробки. Критерієм є еквівалентність корисних результатів згідно з вашим контрактом, а не ідентичність повідомлень про прогрес. Навчання, обчислення із зовнішніми ефектами та розподілена обробка вимагають інших гарантій, ніж цей приклад незалежних розділів.
7. Прийняти й отримати результат перед завершенням роботи
Почніть із коду повернення, а потім зіставте результати з маніфестом вхідних даних. Для нашого прикладу очікуйте вісім розділів і чотири тисячі передбачених ідентифікаторів, без пропусків і дублікатів. Перевірте формат, розміри та відповідні значення; читання файлу не доводить, що він містить правильний результат.
Отримайте прийняті результати, дозволену конфігурацію, версії та звіт про перевірку. Порівняйте розміри та, за потреби, відбитки між оригіналом і копією. Ідентичний відбиток допомагає перевірити передавання байтів; він не доводить ні якість моделі, ні законне походження файлу.
Нарешті відкрийте результат із місця його збереження за допомогою інструмента, який його використовуватиме. Передбачте цей крок до завершення вашого доступу до обчислень. Робота завершена, коли перевірений результат можна отримати й інтерпретувати, а не коли останній відсоток сягнув ста.