記錄一下Faiss在項目使用中的一些優化,對OMP_NUM_THREADS 環境變量參數的測試驗證~python
OMP_NUM_THREADS 用於控制線程併發數. 測試條件:單個循環請求,持續時間大於15m; 基礎數據:200w 軟件環境:docker; ubuntu 16.04 ;python2.7; faiss:1.4.0-cpu 檢索服務功能: (漢明距離計算 + 歐式距離計算 )
測試總結以下: * CPU=1 & OMP_NUM_THREADS=1時, - 1m,5m,15m load average 分佈爲 31.54,41.16,43.43; - CPUs(%) 用戶空間佔比:32.1;內核空間佔比:2.4;空閒佔比:65.2; - faiss 檢索耗時大約在5-6ms左右; - 檢索服務總體響應時間較平穩,大部分在12ms左右; * CPU=3 & OMP_NUM_THREADS=1時, - 1m,5m,15m load average 分佈爲 49.17,48.70,50.54; - CPUs(%) 用戶空間佔比:39.5;內核空間佔比:4.2;空閒佔比:30.3; - faiss 檢索耗時大約在5-7ms左右; - 檢索服務總體響應時間較平穩,大部分耗時在12ms左右; * CPU=3 & OMP_NUM_THREADS=10時, - 1m,5m,15m load average 分佈爲 41.33,43.90,55.87; - CPUs(%) 用戶空間佔比:20.7;內核空間佔比:2.3;空閒佔比:58.0; - faiss 檢索耗時不穩定,抖動較大, 大約在10-90ms左右; - 檢索服務總體響應時間存在抖動,大約在14-92ms左右; * CPU=1 & OMP_NUM_THREADS=10時, - 1m,5m,15m load average 分佈爲 67.77,61.89,61.07; - CPUs(%) 用戶空間佔比:20.6;內核空間佔比:2.9;空閒佔比:18.2; - faiss 檢索耗時不穩定,抖動較大, 大約在5-80ms左右; - 檢索服務總體響應時間存在抖動,大約在13-99ms左右; 最終結論: a: OMP_NUM_THREADS=1時,faiss檢索耗時較穩定; b: OMP_NUM_THREADS=10時,faiss檢索耗時不穩定,抖動較大; b: OMP_NUM_THREADS=1時, 多核CPU相較於單核CPU,負載略高,利用率略高,空閒佔比較低; c: OMP_NUM_THREADS=10時, 多核CPU相較於單核CPU,負載較低,利用率較低,空閒佔比較高; d: 優化方向:OMP_NUM_THREADS=1 + 多進程