2017-05-09 9 views
0

우리는 사용자가 직면 한 구성 요소를 가진 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로 보내기 전에 버퍼를 원한다고 생각할 수 있습니다.

+1

정확하게 이해했다면 여러 개의 다른 커널/프로세스가 하나의 GPU에서 동시에 실행될 수 있습니다. Afaik GPU는 일반적으로 좋지 않습니다 - 적어도 모든 커널이 특정 개수의 스레드 블록으로 시작될 때. – Shadow

+1

이것은 매우 광범위한 질문입니다. CUDA의 관점에서 또는 파이썬 프레임 워크가 어디에 있든간에이 질문을하는지 여부는 확실하지 않습니다. NVIDIA는 여러 프로세스가 동시에 GPU에 액세스해야하는 MPI와 같은 유스 케이스에 사용되는 MPS라는 제품을 배포합니다. 그게 도움이 되겠습니까? – talonmies

+0

나는 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

답변

1

이 질문은 귀하의보다 일반적인 질문에 대한 대답이 아니라 설명 된 시나리오를 어떻게 이해했는지에 대한 답변을 기반으로합니다.

일부 컴퓨팅 작업에 GPU를 사용하는 시스템을 누군가 코딩 한 경우 GPU가 제공 할 수있는 전체 리소스 또는 그와 비슷한 것을 얻을 수 있도록 실행을 병렬 처리하는 시간을 가지기를 바란다.

즉, 두 번째 유사한 작업을 추가하는 경우 (병렬 작업이라도) 완료하는 데 걸리는 총 시간은 순차적으로 완료하는 데 걸리는 시간과 비슷해야합니다 (즉, 순차적으로 완료해야 함). 두 번째 작업의 이점을 얻기 위해 활용도가 낮은 GPU 리소스. 사실 두 작업 모두 느려질 수 있습니다 (예를 들어 둘 다 어떻게 든 L2 캐시를 많이 활용하고 함께 실행하면 문제가 발생할 수 있습니다). 이 경우, 두 번째 링크는 프레젠테이션 공식 문서입니다됩니다 nvprof profiler 또는 nvvp frontend (첫 번째 링크를 사용하여 - 당신은 성능을 개선하고자 할 때 어떤 속도에서

는 할 수있는 좋은 일이 당신의 응용 프로그램을 프로파일입니다).