[英]Tensorflow object detection API: CUDA_ERROR_OUT_OF_MEMORY on Google Colab
[英]CUDA_ERROR_OUT_OF_MEMORY on Tensorflow#object_detection/train.py
我正在運行 Tensorflow 對象檢測 API 以使用object_detection/train.py
腳本訓練我自己的檢測器,在此處找到。 問題是我不斷收到CUDA_ERROR_OUT_OF_MEMORY
。
我找到了一些減少批量大小的建議,以便訓練器消耗更少的內存,但我從 16 減少到 4 並且我仍然遇到相同的錯誤。 不同的是,當使用batch_size=16時,錯誤在第~18步拋出,現在在~70步拋出。 編輯:設置 batch_size=1 沒有解決問題,因為我在步驟 ~2700 仍然遇到錯誤。
在我停止訓練過程之前,我能做些什么來讓它順利運行? 我真的不需要接受快速培訓。
編輯:我目前為此使用 GTX 750 Ti 2GB。 除了訓練和提供監視器圖像之外,GPU 不用於其他任何用途。 目前,我僅使用 80 張圖像進行訓練,並使用 20 張圖像進行評估。
我認為這與batch_size無關,因為您可以從頭開始訓練。
打開終端ans運行
英偉達-smi -l
檢查發生此錯誤時是否還有其他進程啟動。 如果設置batch_size = 16,則可以很快找到。
找到了解決我問題的方法。 batch_size
並不是問題,但是更高的batch_size
會使訓練內存消耗更快地增加,因為我使用的是config.gpu_options.allow_growth = True
配置。 此設置允許Tensorflow在需要時增加內存消耗,並嘗試使用直到100%的GPU內存。
問題是我同時運行了eval.py
腳本(按照他們的教程中的建議),並且使用了GPU內存的一部分。 當train.py
腳本嘗試全部使用100%時,將引發錯誤。
我通過將培訓過程的最大使用百分比設置為70%來解決了該問題。 它還解決了訓練時口吃的問題。 這可能不是我的GPU的最佳值,但是可以使用config.gpu_options.per_process_gpu_memory_fraction = 0.7
設置進行配置。
另一種選擇是將 GPU 專用於訓練並使用CPU 進行評估。
要以 CPU 為目標,請在運行評估腳本之前設置此環境變量:
export CUDA_VISIBLE_DEVICES=-1
您可以在pipeline.config
中將評估批處理作業大小顯式設置為 1 以消耗更少的內存:
eval_config: {
metrics_set: "coco_detection_metrics"
use_moving_averages: false
batch_size: 1;
}
如果仍有問題,TensorFlow 可能不會在訓練運行之間釋放 GPU 內存。 嘗試重新啟動終端或 IDE,然后重試。 這個答案有更多細節。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.