Недавно тоже узнал про эту библиотеку, надо изучать ее возможности. В особенности, есть ли возможность использовать скользящее окно с ограничением на размер (количество точек) и длительности (максимально допустимая разница во времени между первым и последним значением) — полезно для временных рядом с пропущенными данными. Операция достаточно простая, но зачастую плохо интегрируемая с библиотеками, которые ожидают временной ряд, я не подготовленные данные (тензор какой-нибудь размерности).
Там еще много скриптов которые связывают разные шаги на баше. А так да — порог вхождения достаточно высокий мне кажется, особенно, если есть желание что-то поменять в самой библиотеке.
Я знаю Питера и Виджея, это те персонажи в таблице, они возглавляют ту группу и рассказывали про текущий статус пару недель назад.
Про ваши вопросы — прошу простить за прямоту, но звучит так, как будто вы хотите получить бесплатную консультацию. Если вам интересно и у вас есть интересные данные, мы можем обучить модель на ваших данных под ключ, мои контакты есть в миллионе мест в интернете.
Упс, мне действительно просто интересно, извиняюсь что не так выразился. Я в прошлом работал над бенчмарками для DL приложений и мы в том числе запускали Kaldi в разных конфигурациях на фишере (2k часов). Когда все данные были в памяти, Kaldi работал пошустрее (понятно почему). Мы даже переписали nnet1 (да, давно было)) что-бы ускорить тренировку на CPU. В те времена Ден Повей говорил, что если ты не исследователь из Google, Baidu и т.п., то с Kaldi легче получить хорошие результаты. Ситуация, судя по всем, поменялась с тех пор.
Одна из рабочих групп MLPerf — Datasets работает над большим публичным набром данных для SST. Сейчас размер примерно 70 тысяч часов, цель — 100 тысяч. Референсная модель RNN transducer, которая (грубая оценка) должна обучиться на 100к часах за 10-30 дней на 64х RTX 2080 картах. У меня недостаточно опыта чтобы прокомментировать качество данных, но вот что используется:
Libri Speech & Common Voice ~ 2к часов
Некоторые (не помню, что точно значит) данные из интернета ~ 2к часов
Синтезированная речь (Текст модели GPT-2 начитан Voicery) ~ 1k часов
Аудиокниги (LibriVox) — 65k часов
У этой группы крутые советники — Kelly Davis, Mark Liberman, Andrew Ng и Dan Povey.
Пара вопросов:
1. С точки зрение текущего состояния предметной области и доступных фреймворков, как бы вы оценили Kaldi?
2. Если порассуждать на тему больших датасетов (> 100k часов) и подходов к построению state-of-the-art моделей (будь то классические DNN/HMM модели или end-to-end) и доступных фреймворков (например, Kaldi), CPU память имеет хоть какое-либо влияние на скорость/качество обучения или нет? Скажем, система с несколькими десятками террабайт RAM и 8-16 GPU которая вместит весь рабочий сет в /dev/shm. Или стандартный размер в 256GB-1TB которые доступны в большинстве серверных машин с 8 картами «just right»?
Одна из рабочих групп MLPerf — Best Practices — занимается похожим. Текущий упор на повторяемости (reproduciability) и переносимости (portability) с технической точки зрения.
Не используя BLAS для матричных умножений (для CPU выбор досточно обширен — OpenBLAS, BLIS, ATLAS, ACML, MKL, или что-то более высокоуровневое, типа Eigen), вы мгновенно теряете в производительности, причем достаточно много. Если мне не изменяет память, на процессорах семейства Haswell, 18 ядер, MNIST на плоских полносвязанных сетках тренируется за несколько десятков секунд до ~98% (с учетом того, что бейзлайн в 90% с логистической регрессией достигается за секунды).
А в целом, тот стиль архитектуры, который вы используете (в частности, выделение понятия нейрона в отдельный класс), был популярен лет 15 назад. Сейчас используют векторизированные представления/вычисления.
Свернём исходный тензор 1х1 свёрткой, подобно тому как мы делали в блоке Inception, получив тензор (M−2)∗(M−2)∗C2. Эта операция называется pointwise convolution
А разве при 1x1 свертке c шагом 1 по пространственным координатам меняются размерности? Вроде должно быть M∗M∗C2.
Согласен. Один из сценариев использования, который мне приходит в голову, это подбор параметров алгоритма оптимизации и архитеруры сети. Тут да, трафик между GPU отсутствует. Но все равно остается траффик CPU-GPU, который скорее всего удасться скрыть. Или специализированные алгортмы, например, реализованные в фреймфорке KALDI. Там тоже отсутствует траффик между GPU, и паралельно (итеративно) обучаются реплики сетей на достаточно больших батчах данных с последующей агрегацией весов.
Сомневаюсь. Надо вовремя данные подгружать для следующей итерации плюс при параллелизме по данным надо часто агрегировать градиенты. CPU-GPU и GPU-GPU коммуникация критически важна. Нейронные сетки надо на DGX-1 считать или чем то похожем с 8 GPU и NVLink'ом.
Прошу прощения, но все, что можно было сделать не правильно, было так и сделано (начиная от именования функций (
Do_it
?), и заканчивая архитектурой).К сожалению, данная статья только уводит в сторону.
Посмотрите простую реализацию micrograd — в первом приближении идея представлена OK.
Я знаю Питера и Виджея, это те персонажи в таблице, они возглавляют ту группу и рассказывали про текущий статус пару недель назад.
Упс, мне действительно просто интересно, извиняюсь что не так выразился. Я в прошлом работал над бенчмарками для DL приложений и мы в том числе запускали Kaldi в разных конфигурациях на фишере (2k часов). Когда все данные были в памяти, Kaldi работал пошустрее (понятно почему). Мы даже переписали nnet1 (да, давно было)) что-бы ускорить тренировку на CPU. В те времена Ден Повей говорил, что если ты не исследователь из Google, Baidu и т.п., то с Kaldi легче получить хорошие результаты. Ситуация, судя по всем, поменялась с тех пор.
У этой группы крутые советники — Kelly Davis, Mark Liberman, Andrew Ng и Dan Povey.
Пара вопросов:
1. С точки зрение текущего состояния предметной области и доступных фреймворков, как бы вы оценили Kaldi?
2. Если порассуждать на тему больших датасетов (> 100k часов) и подходов к построению state-of-the-art моделей (будь то классические DNN/HMM модели или end-to-end) и доступных фреймворков (например, Kaldi), CPU память имеет хоть какое-либо влияние на скорость/качество обучения или нет? Скажем, система с несколькими десятками террабайт RAM и 8-16 GPU которая вместит весь рабочий сет в /dev/shm. Или стандартный размер в 256GB-1TB которые доступны в большинстве серверных машин с 8 картами «just right»?
Вроде как результат проверки либо «Наблюдения не соответствуют гипотезе, отклоняем» либо «Недостаточно данных чтобы отклонить гипотезу».
А в целом, тот стиль архитектуры, который вы используете (в частности, выделение понятия нейрона в отдельный класс), был популярен лет 15 назад. Сейчас используют векторизированные представления/вычисления.
Y = exp(W*log(|x| + e))
А разве при 1x1 свертке c шагом 1 по пространственным координатам меняются размерности? Вроде должно быть M∗M∗C2.