우리는 사용자가 직면 한 구성 요소를 가진 Natural Language Processing 응용 프로그램을 개발하려고합니다. 사용자는 API를 통해 모델을 호출하고 결과를 다시 가져올 수 있습니다. 모델은 Theano가있는 Keras를 사용하여 사전 계산됩니다. 우리는 GPU를 사용하여 교육 속도를 높이고 있습니다. 그러나 예측은 GPU를 사용하여 상당히 빨라졌습니다. 현재 우리는 2 개의 GPU가있는 기계를 가지고 있습니다. 그러나 런타임시 (예 : 사용자가 비트를 마주 치면서 실행하는 경우) 문제가 있습니다. CUDA를 통해 GPU를 공유하는 여러 Python 프로세스가 병렬 처리 속도를 높이는 것처럼 보이지 않습니다. libgpuarray (pygpu), Theano 및 Keras와 함께 nvidia-docker를 사용하고 있습니다. GPU는 여전히 대부분 유휴 상태이지만 더 많은 Python 작업자를 추가해도 프로세스 속도가 향상되지 않습니다.높은 througput 스트림에 대한 예측 시간에 CUDA GPU 사용
API를 사용하여 GPU 모델을 실행하는 문제를 해결하는 가장 좋은 방법은 무엇입니까? 기존 GPU를 구입하기 전에 기존 GPU를보다 효율적으로 활용하는 것이 이상적입니다.
HTTP 호출마다 잠금을 요청하는 대신 GPU로 보내기 전에 버퍼를 원한다고 생각할 수 있습니다.
정확하게 이해했다면 여러 개의 다른 커널/프로세스가 하나의 GPU에서 동시에 실행될 수 있습니다. Afaik GPU는 일반적으로 좋지 않습니다 - 적어도 모든 커널이 특정 개수의 스레드 블록으로 시작될 때. – Shadow
이것은 매우 광범위한 질문입니다. CUDA의 관점에서 또는 파이썬 프레임 워크가 어디에 있든간에이 질문을하는지 여부는 확실하지 않습니다. NVIDIA는 여러 프로세스가 동시에 GPU에 액세스해야하는 MPI와 같은 유스 케이스에 사용되는 MPS라는 제품을 배포합니다. 그게 도움이 되겠습니까? – talonmies
나는 talonmies가 문제를 지적했고 해결책을 제시했다고 믿는다. 다른 프로세스의 커널은 별도의 GPU 컨텍스트에서 실행되며 [별도의 컨텍스트의 커널은 동시에 실행되지 않습니다.] (http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#concurrent-kernel -실행). 해결책은 다른 프로세스를 대신하여 커널을 실행하는 "프록시"프로세스를 사용하여 모두 동일한 컨텍스트를 공유하는 것입니다. 이것은 바로 [MPS] (https://docs.nvidia.com/deploy/pdf/CUDA_Multi_Process_Service_Overview.pdf)가하는 내용입니다. – tera