나는 10 개의 모델을 가지고이 모델들을 앙상블 화하고자합니다. 매우 빠른 응답 시간으로 추론해야합니다. 일을앙상블 모델의 추론 시간을 향상시키는 방법
container[i]->predict(input, pred);
로 :로
std::vector<std::thread> threads;
for (int i = 0; i < n_models; ++i) {
threads.emplace_back(std::thread(&Search::make_infer, this,
std::ref(container[i]),
std::ref(input),
std::ref(pred_2d[i])));
}
을 그리고 Search::make_infer
가 정의된다
// model containder
std::vector<std::shared_ptr<LRModel>> container;
// predictions, n_models = 10
std::vector<std::vector<std::string>> pred_2d(n_models);
가 그럼 난 동시에 예측을 위해 스레드 풀을 사용
은 우선은 컨테이너를 정의 응답 시간이 80ms에서 40ms로 단축되었습니다. 그러나 여전히 만족스럽지 못합니다. 시간을 10ms로 줄여야합니다. 이것을 어떻게 더 최적화 할 수 있습니까?
'입력'이란 무엇입니까? 다른 데이터는 각 스레드 (인덱스)에 대해 독립적 인 것처럼 보이지만이 스레드는 공유되는 것으로 보입니다. 그 데이터는 읽기 전용이고 메모리에 있습니까? 또한 실제로는 메모리 액세스 패턴에 따라 캐싱 문제로 인해 성능에 큰 영향을 줄 수 있으므로 모든 데이터가 첫 번째 수준의 캐시에 들어 가지 않으면 더 많은 스레드가 반드시 성능을 향상시키지 않습니다. 실제로 성능은 많은 요소에 따라 달라 지므로 일반적인 조언을하는 것은 어렵습니다. 또한 성능은 코어의 수, CPU의 캐시 크기 등에 따라 달라질 수 있습니다 ... 가장 좋은 점은 프로파일 링과 비교하는 것입니다 ... – Phil1970
@ Phil1970'input'은 RPC의 '벡터'입니다 의뢰."모든 데이터가 첫 번째 레벨 캐시에 맞지 않는지 이해하지 못합니다 ..."? 실제로 모든 데이터를 1 차 캐시에 넣을 수 있습니까? –
fishiwhj