天天看點

【機器學習】TensorFlow共享GPU資源

一般在TF serving 在推理測進行控制,可以限制模型大小,可以限制請求數量,同時可以控制排隊數量,也可以限制整個的通路數量 。

下面是沒有對GPU進行限制的,程式會将GPU占滿。

$ nohub tensorflow_model_server \ 
--rest_api_port=8501 \ 
--model_name=mobilenet \ 
--model_base_path="/tmp/mobilenet" >server.log 2>&1
           

下面加入per_process_gpu_memory_fraction,對資源進行控制

$ nohub tensorflow_model_server \ 
--per_process_gpu_memory_fraction=0.3 \ 
--rest_api_port=8501 \ 
--model_name=mobilenet \ 
--model_base_path="/tmp/mobilenet" >server.log 2>&1
           

在k8s容器裡面跑,也可以使用這個參數來控制gpu記憶體使用。

$ nvidia-docker run -t --rm -p 8501:8501 \ 
-v "$TESTDATA/mobilenet:/models/mobilenet" \ 
-e MODEL_NAME=mobilenet \ 
tensorflow/serving:latest-gpu \ 
--per_process_gpu_memory_fraction=0.5
           

在一個容器多個GPU來控制gpu記憶體使用

1.如果本身有AI平台的排程功能,可以通過一些配置來達到目的

2.如果沒有k8s,就一個裸的機器,那麼可以使用

$ NV_GPU=${GPU_id} nvidia-docker run -t --rm -p8501:8501 \ 
-v "$TESTDATA/mobilenet:/models/mobilenet" \ 
-e MODEL_NAME=mobilenet \ 
tensorflow/serving:latest-gpu \ 
--per_process_gpu_memory_fraction=0.5
           

計算運算資源,涉及有很多參數,這裡列出常用參數,進行估算。

1.max_batch_size:一個批次處理的最大請求數量。設定後會将多個請求合并為一個batch進行處理。

2.batch_timeout_micros:在請求未累積到max_batch_size時,等待服務的最大時長。如逾時,則直接處理該批次請求。

3.num_batch_threads:服務可并發處理的batch數量,通常不大于配置設定的CPU核數;

4.max_enqueued_batches: 排程器隊列中最大batch數量。如果目前隊列已滿,那麼之後的請求會傳回錯誤。

【機器學習】TensorFlow共享GPU資源

繼續閱讀