一般在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數量。如果目前隊列已滿,那麼之後的請求會傳回錯誤。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPn1UMNpmT5VlaNBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL5AjN0ETNzIjM4AjMwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)