Ускорение конвейера вывода PythonJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Ускорение конвейера вывода Python

Сообщение Anonymous »

Я пытаюсь создать распределенную платформу вывода LLM с поддержкой Huggingface. Реализация предполагает использование Python для обработки модели и Java для взаимодействия с внешними системами. Ниже приведен код Python, отвечающий за получение входного текста из программы Java, его обработку с помощью предварительно обученного LLM и возврат обработанного текста:

Код: Выделить всё

import socket, sys
import threading
from transformers import pipeline

generator = pipeline('text-generation', model='gpt2-large', device="cuda")

def process_input(input_text):
request = generator(input_text, min_length=200)
return request[0]["generated_text"]

def handle_connection(conn):
with conn:
data = conn.recv(10240).decode()
processed_data = process_input(data.strip())
conn.sendall(processed_data.encode())

PORT = int(sys.argv[1])

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind(('localhost', PORT))
s.listen()
while True:
conn, addr = s.accept()
thread = threading.Thread(target=handle_connection, args=(conn,))
thread.start()
Как видите, он принимает сокетные соединения от процесса Java, получает текст, возвращает результат запроса и закрывает соединение, и все это внутри выполнения потока. Для всех потоков существует общий конвейер, поскольку он занимает слишком много места в памяти и создается только 1 раз.
На стороне Java у меня есть класс LLMProcess, который обрабатывает создание процесса Python и взаимодействие с ним, используя потоки для каждого времени существования запроса.

Код: Выделить всё

LLMProcess process = new LLMProcess();

for (int i = 0; i < 50; i++) {
int index = i;
Thread thread = new Thread(() -> {
System.out.println("" + index + " : " + process.request("Sample text");
System.out.flush();
});
thread.start();
}
Однако при попытке выполнить значительное количество запросов одновременно система демонстрирует последовательное поведение при обработке запросов и демонстрирует накладные расходы, связанные с использованием потоков, вместо того, чтобы эффективно использовать параллельную обработку через Конвейер LLM и ускорение графического процессора.
Цель — оптимизировать этот процесс за счет минимизации накладных расходов на использование потоков и полного использования доступных ресурсов графического процессора. Несмотря на наличие поддержки графического процессора, его загрузка при выполнении программы остается минимальной, обычно не превышающей 3%.

Подробнее здесь: https://stackoverflow.com/questions/784 ... e-pipeline
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»