2017-11-19 10 views
0

사용자가 보내는 모든 메시지를 다른 ML 관련 작업을 위해 벡터로 변환해야하는 chat-bot을 만들고 있습니다. 나는 이것을하기 위해 미리 훈련 된 Word2Vec 모델을 사용하고있다. Word2Vec 모델은 Gensim 라이브러리를 사용하여 생성되었으며 디스크에 600MB 파일로 저장되며 Django/Python 웹 응용 프로그램에서 사용됩니다.ML 모델을 사용하는 많은 요청 처리하기

새 메시지가 API 요청으로 수신 될 때마다 함수는 word2Vec 모델을로드하고 해당 개체를 사용하여 메시지의 벡터를 생성합니다. 이것은 실시간으로 발생해야합니다. 새로운 메시지가 수신 될 때마다 응용 프로그램이 Word2Vec 모델의 인스턴스를로드하므로 너무 많은 요청이 동시에 발생하면 메모리 문제가 발생합니다 (Word2Vec 모델의 인스턴스가 여러 개 있기 때문에 메모리 문제가 발생할 수 있음). 그 당시 RAM에 존재). 너무 많은 메모리를 사용하지 않도록 효율적으로 메모리를 처리하는 방법은 무엇입니까?

답변

0

"벡터"를 생성하여 사용자에게 즉시 반환해야합니까? 그렇지 않은 경우 celery worker으로 요청을 전달하는 것이 좋습니다.

처리 대기열에 할당 할 작업자 수를 선택하여 메모리 사용을 관리 가능한 수준으로 제한 할 수 있습니다.

+0

예 즉시 생성해야합니다. 즉, 실시간으로 발생합니다. – Vinay

+1

[Queuing Theory] (https://en.wikipedia.org/wiki/Queueing_theory)를 보면 다음과 같은 메시지가 나타납니다. 각 작업이 즉시 처리되도록 보장하는 유일한 방법은 작업이 예상되는 것보다 많은 근로자를 확보 할 수 있도록하는 것입니다. 이는 각 작업자가 모델을 실행할 수 있도록 충분한 메모리를 사용할 수 있음을 의미합니다. 메모리가 너무 많으면 불행히도 태스크를 큐에 넣고 샐러리를 처리해야합니다. [Django Channels] (https://channels.readthedocs.io/en/latest/)과 같은 이메일을 통해 작업 완료를 사용자에게 알릴 수 있습니다. –