Как я могу восстановить (или понять вывод h5debug) мой файл hdf5?

Вопрос или проблема

У меня есть файл hdf5, который так велик, что мне пришлось использовать домашний файловый сервер для записи данных (4,04 ТБ, по данным Finder в macOS). Это коллекция логитов, которую рассчитывать несколько часов, и по какой-то причине, после вычисления последней порции данных, произошел сбой.

Теперь я вижу:

h5debug /Volumes/MacBackup-1/gguf/baseline_logits.hdf5

Чтение сигнатуры по адресу 0 (относительно)
Суперблок файла...
Имя файла (при открытии):                             /Volumes/MacBackup-1/gguf/baseline_logits.hdf5
Имя файла (после разрешения символьных ссылок):    /Volumes/MacBackup-1/gguf/baseline_logits.hdf5
Флаги доступа к файлу                                  0x00000000
Количество открытых ссылок на файл:                    1
Адрес суперблока:                                    0 (абс)
Размер пользовательского блока:                       0 байт
Номер версии суперблока:                             0
Номер версии списка свободных блоков:                 0
Номер версии записи символа корневой группы:         0
Номер версии общего заголовка:                       0
Размер смещений файла (тип haddr_t):                 8 байт
Размер длин файлов (тип hsize_t):                    8 байт
Ранг листового узла таблицы символов 1/2:            4
Ранг внутреннего узла таблицы символов 1/2:          16
Ранг внутреннего узла индексного хранилища 1/2:      32
Флаги состояния файла:                                0x00
Адрес расширения суперблока:                         18446744073709551615 (относительно)
Адрес таблицы сообщений заголовка общего объекта:    18446744073709551615 (относительно)
Номер версии сообщения заголовка общего объекта:     0
Количество индексов сообщений заголовка общего объекта:  0
Адрес блока информации драйвера:                    18446744073709551615 (относительно)
Запись символа корневой группы:
   Смещение имени в частной куче:                    0
   Адрес заголовка объекта:                           96
   Тип информации кэша:                               Таблица символов
   Информация о кэшированных записях:
      Адрес B-дерева:                                136
      Адрес кучи:                                    680
Ошибка при закрытии файла!
HDF5: бесконечный цикл при закрытии библиотеки
      L,T_top,F,P,P,Z,FD,VL,VL,PL,E,SL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL,FL

Мне не ясно, что именно не так с этим выводом отладки. Что касается реального размера, я думаю, что он менее 4 ТБ:

ls -la  /Volumes/MacBackup-1/gguf/baseline_logits.hdf5
-rwx------@ 1 macdev  staff   3.7T Nov 12 12:21 /Volumes/MacBackup-1/gguf/baseline_logits.hdf5

Вот лог моего скрипта, когда он завершился с ошибкой, это было не очень специфическое сообщение об ошибке:

[471] 114207.41 ms [472] 24712.48 ms [473] 120010.91 ms [474] 134073.39 ms
INFO - Обработано 4 порции
INFO - Конечный размер файла: 3832472.77 МБ
Запуск с 475 по 478
INFO - generate_logits начинается (версия 0.5.3)
INFO - Загружены предрассчитанные токены из /Users/Shared/Public/huggingface/salamandra-2b-instruct/imatrix/oscar/calibration-dataset.txt.tokens.npy
INFO - Обработка порций с 475 по 478
INFO - Оценочное время выполнения: 6.11 минут для 3 оставшихся порций
[475] 122266.14 ms [476] 27550.59 ms ERROR - Произошла неожиданная ошибка: Невозможно уменьшить счетчик ссылок id (невозможно закрыть файл, errno = 9, сообщение об ошибке="Неверный дескриптор файла")
Произошла ошибка. Выход...

Это было, когда файл только что превышал 4 ТБ (в зависимости от того, как на это смотреть), что кажется подозрительным, но он записывается (с Mac) на машину с Windows 11 с диском на 16 ТБ и 13 ТБ свободного места перед этим, отформатированном в NTFS. Моя информация SMB говорит, что я подключен с smb_3.1.1, с LARGE_FILE_SUPPORTED TRUE, что, я надеюсь, даст мне 16 ТБ, доступные для NTFS.

Как я могу восстановить (или понять вывод h5debug) мой файл hdf5?

Ответ или решение

Восстановление и анализ выводов h5debug для HDF5 файла

Введение

Работа с большими HDF5 файлами, такими как ваш файл размером более 4 ТБ, может быть проблематичной, особенно когда неожиданно возникают ошибки. Ваша ситуация требует не только восстановления данных, но и глубокого анализа всех выводов от утилиты h5debug. Рассмотрим шаги, которые помогут в этом процессе.

Анализ h5debug вывода

Вывод h5debug показывает ряд ключевых параметров вашего HDF5 файла:

  1. Размер файла: Этот аспект важен, так как указывает, что размер файла в файловой системе (3.7 ТБ) меньше, чем тот, что отображается в утилитах, таких как macOS Finder (4.04 ТБ). Превышение порога может быть связано с особенностями файловых систем, таких как NTFS.

  2. Ошибка при закрытии файла: Сообщение Error in closing file! может указывать на проблемы с файловой системой (в данном случае NTFS) или же с сетевым доступом через SMB. В частности, ошибка "Bad file descriptor" может свидетельствовать о том, что файл был поврежден на этапе записи.

  3. Информация о версии и структуре файла: Дебаг выводит различные версии суперконтейнера и других структур HDF5. Хотя эти данные могут не указывать на конкретную причину ошибки, они помогают подтвердить корректность файлового формата.

Возможные причины проблемы

  • Проблемы с файловой системой: Поскольку файл находится на NTFS, рекомендуется проверить файловую систему на наличие ошибок. Используйте утилиты вроде chkdsk на Windows для диагностики и исправления ошибок.

  • Сетевые ошибки: Подключение к файловому серверу по SMB может вызвать задержки или ошибки при записи, что могло привести к повреждению файла. Проверьте стабильность вашего сетевого соединения и возможно, попробуйте записывать файл локально и затем перемещать его.

Восстановление данных

  1. Использование утилиты HDF5:

    • Попробуйте использовать h5dump для извлечения данных из вашего HDF5 файла. Эта утилита может извлекать данные, даже если файл поврежден.
      h5dump /Volumes/MacBackup-1/gguf/baseline_logits.hdf5 > output.txt

      Если файл полностью поврежден, вы можете использовать h5repack для создания нового файла HDF5, возможно, с меньшими блокируются.

  2. Использование специализированных инструментов: Для частичных восстановлений можно использовать сторонние инструменты, такие как HDF5 File Recovery. Они могут обеспечить больше возможностей для восстановления поврежденных данных.

  3. Проверка резервных копий: Если у вас есть резервные копии данных, рассмотрите возможность восстановить файл из этих копий, чтобы минимизировать потерю данных.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...