Я пытаюсь сгенерировать встраивание предложений, используя преобразователи sbert для объятий. В настоящее время я использую предварительно обученную модель all-MiniLM-L6-v2 для создания встраивания предложений с помощью pyspark в кластере AWS EMR. Но похоже, что даже после использования udf (для распределения по разным экземплярам) функция model.encode() работает очень медленно. Есть ли способ оптимизировать этот процесс для быстрого встраивания в очень большой набор данных в среде pyspark? Набор данных содержит около 2 млн строк.
Я пытался получить вложения напрямую, используя функцию model.encode, а для распределения в разных экземплярах я использую функцию udf, которая будет транслировать модель в разные экземпляры. Кроме того, увеличение размера кластера не очень помогает. Любые предложения/ссылки будут оценены!
Даже с распределенными вычислениями и большим количеством процессоров создание вложений с использованием преобразователей предложений происходит медленно. Существуют экземпляры p3 EC2 GPU, которые предоставляют GPU для параллельных больших вычислений. Используя графические процессоры и пакетную обработку, я могу эффективно генерировать вложения преобразователей предложений. В моем случае один экземпляр GPU ec2 как минимум в 8 раз быстрее, чем экземпляры CPU.
Пакетная обработка необходима для эффективного использования графического процессора. В противном случае это то же самое, что и генерировать встраивание одного предложения для предложения за раз.