Вопрос или проблема
У меня есть файл 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 файла:
-
Размер файла: Этот аспект важен, так как указывает, что размер файла в файловой системе (3.7 ТБ) меньше, чем тот, что отображается в утилитах, таких как macOS Finder (4.04 ТБ). Превышение порога может быть связано с особенностями файловых систем, таких как NTFS.
-
Ошибка при закрытии файла: Сообщение
Error in closing file!
может указывать на проблемы с файловой системой (в данном случае NTFS) или же с сетевым доступом через SMB. В частности, ошибка "Bad file descriptor" может свидетельствовать о том, что файл был поврежден на этапе записи. -
Информация о версии и структуре файла: Дебаг выводит различные версии суперконтейнера и других структур HDF5. Хотя эти данные могут не указывать на конкретную причину ошибки, они помогают подтвердить корректность файлового формата.
Возможные причины проблемы
-
Проблемы с файловой системой: Поскольку файл находится на NTFS, рекомендуется проверить файловую систему на наличие ошибок. Используйте утилиты вроде
chkdsk
на Windows для диагностики и исправления ошибок. -
Сетевые ошибки: Подключение к файловому серверу по SMB может вызвать задержки или ошибки при записи, что могло привести к повреждению файла. Проверьте стабильность вашего сетевого соединения и возможно, попробуйте записывать файл локально и затем перемещать его.
Восстановление данных
-
Использование утилиты HDF5:
- Попробуйте использовать
h5dump
для извлечения данных из вашего HDF5 файла. Эта утилита может извлекать данные, даже если файл поврежден.h5dump /Volumes/MacBackup-1/gguf/baseline_logits.hdf5 > output.txt
Если файл полностью поврежден, вы можете использовать
h5repack
для создания нового файла HDF5, возможно, с меньшими блокируются.
- Попробуйте использовать
-
Использование специализированных инструментов: Для частичных восстановлений можно использовать сторонние инструменты, такие как
HDF5 File Recovery
. Они могут обеспечить больше возможностей для восстановления поврежденных данных. -
Проверка резервных копий: Если у вас есть резервные копии данных, рассмотрите возможность восстановить файл из этих копий, чтобы минимизировать потерю данных.
Заключение
Работа с большими файлами может быть вызовом, и ошибки, такие как те, которые вы описали, требуют тщательного анализа и вмешательства. Используя предложенные стратегии, включая диагностику файловой системы и специализированные инструменты, вы сможете восстановить ваши данные и предотвратить подобные сценарии в будущем. Также стоит рассмотреть альтернативные методы распределения нагрузки при вычислениях и сохранить данные по частям, чтобы минимизировать риски потери информации в будущем.