Мне нужно сделать много прогнозов с помощью небольших нейронных сетей (100–150 параметров). Я реализовал это в TensorFlow и столкнулся с проблемами эффективности. вот псевдокод:
for my_dense_netowrk,my_lstm_netowrk in networks_list
my_dense_netowrk.paramters = 100
my_lstm_netowrk.paramters = 150
for images in data[:60]:
@tf.function
def tf_wrapper(images, state):
model_data = meta_model(images)
data_prepared = image_preparation(model_data)
results = my_dense_netowrk(data_prepared)
results.shape = (19000,1,1)
better_results, state = my_lstm_netowrk(results, state)
return better_results, state
better_results, state = tf_wrapper(images, state)
my_dense_netowrk_n2.paramters = 100
my_lstm_netowrk_n2.paramters = 100
and continue...
Я использую API конвейера данных тензорного потока, и фактически все необходимые данные (переменная данных) могут быть размещены в моей памяти.
Я не указал размер пакета для своей нейронной сети при построении и вставке данных в виде огромной стопки (размер пакета 19000) в нейронную сеть для распараллеливания всего. Даже lstm не ограничен обработкой последовательностей, поскольку ему приходится обрабатывать 19 000 входных данных одновременно. Но когда я увеличил параметры своей нейронной сети в 10 раз (что мне не нужно), мой код почти не заметил, полагая, что размер пакета довольно велик.
@tf. Функция немного ускоряет работу.
Я пробовал профилировать, но не смог найти узкое место, так как происходит слишком много операций. Я обнаружил, что запуск ядра занимает половину времени, потому что обычно тензорный поток ожидает, что этот процесс займет много времени, поэтому я думаю, он не оптимизирован для таких задач, потому что, когда я увеличиваю свой цикл с 60 до 6000, он становится в 10 раз более эффективным на каждый проход цикла! Похоже, на подготовку требуется время.
Функция image_preparation() использует только tf-операции, такие как изменение формы, стек, плитка, и я не могу подготовить данные заранее.
Я использую macOS с чипом M3 Max, и нет никакой разницы, использую ли я графический процессор или процессор. Я пробовал Python 3.8, 3.9, 3.10, 3.11, 3.12.
Так что похоже, что tensorflow не разливается по моим моделям, что странно, и там В Интернете не так много дискуссий о том, как эффективно получать множество прогнозов из небольших моделей, все используют такие библиотеки для огромных НС. И графический процессор совсем не помогает, хотя я думаю, что мой конвейер должен от этого выиграть, поскольку я использую огромные пакеты. Поэтому мне очень сложно найти хорошее решение моей проблемы, и я хотел попросить совета. Может быть, для моей проблемы есть лучшие фреймворки машинного обучения (PyTorch, Jax, может быть, что-то еще?) Или я просто плохо разбираюсь в профилировании? или мне для этого попробовать собрать собственное ядро на ассемблере? Я не знаю
Мне нужно сделать много прогнозов с помощью небольших нейронных сетей (100–150 параметров). Я реализовал это в TensorFlow и столкнулся с проблемами эффективности. вот псевдокод: [code]for my_dense_netowrk,my_lstm_netowrk in networks_list my_dense_netowrk.paramters = 100 my_lstm_netowrk.paramters = 150 for images in data[:60]: @tf.function def tf_wrapper(images, state): model_data = meta_model(images) data_prepared = image_preparation(model_data)
and continue... [/code] [list] [*]Я использую API конвейера данных тензорного потока, и фактически все необходимые данные (переменная данных) могут быть размещены в моей памяти. [*]Я не указал размер пакета для своей нейронной сети при построении и вставке данных в виде огромной стопки (размер пакета 19000) в нейронную сеть для распараллеливания всего. Даже lstm не ограничен обработкой последовательностей, поскольку ему приходится обрабатывать 19 000 входных данных одновременно. Но когда я увеличил параметры своей нейронной сети в 10 раз (что мне не нужно), мой код почти не заметил, полагая, что размер пакета довольно велик. [*]@tf. Функция немного ускоряет работу. [*]Я пробовал профилировать, но не смог найти узкое место, так как происходит слишком много операций. Я обнаружил, что запуск ядра занимает половину времени, потому что обычно тензорный поток ожидает, что этот процесс займет много времени, поэтому я думаю, он не оптимизирован для таких задач, потому что, когда я увеличиваю свой цикл с 60 до 6000, он становится в 10 раз более эффективным на каждый проход цикла! Похоже, на подготовку требуется время. [*]Функция image_preparation() использует только tf-операции, такие как изменение формы, стек, плитка, и я не могу подготовить данные заранее. [*]Я использую macOS с чипом M3 Max, и нет никакой разницы, использую ли я графический процессор или процессор. Я пробовал Python 3.8, 3.9, 3.10, 3.11, 3.12. [/list] Так что похоже, что tensorflow не разливается по моим моделям, что странно, и там В Интернете не так много дискуссий о том, как эффективно получать множество прогнозов из небольших моделей, все используют такие библиотеки для огромных НС. И графический процессор совсем не помогает, хотя я думаю, что мой конвейер должен от этого выиграть, поскольку я использую огромные пакеты. Поэтому мне очень сложно найти хорошее решение моей проблемы, и я хотел попросить совета. Может быть, для моей проблемы есть лучшие фреймворки машинного обучения (PyTorch, Jax, может быть, что-то еще?) Или я просто плохо разбираюсь в профилировании? или мне для этого попробовать собрать собственное ядро на ассемблере? Я не знаю
Я работаю над научно-исследовательским проектом, где мне нужно делать много прогнозов с помощью небольших нейронных сетей (100–150 параметров). Я реализовал это в TensorFlow и столкнулся с проблемами эффективности. вот псевдокод:
Моя нейронная сеть
def buildModel(optimizer):
model = tf.keras.models.Sequential( )
model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics= )
return model
Вы создаете веб-приложение, которое контролирует обучение модели машинного обучения в режиме реального времени. Бэкэнд отправляет метрики обучения (потеря, точность, градиентные нормы) каждые несколько секунд через WebSocket, но вы испытываете...
Я реализую самоорганизующуюся карту Кохонена (SOM) на Python. Моя цель — обучить SOM масштабированным входным данным (X_scaled) и итеративно обновлять веса в течение нескольких эпох. Однако я столкнулся с двумя основными проблемами:...
Я реализую самоорганизующуюся карту Кохонена (SOM) на Python. Моя цель — обучить SOM масштабированным входным данным (X_scaled) и итеративно обновлять веса в течение нескольких эпох. Однако я столкнулся с двумя основными проблемами:...