簡體   English   中英

Tensorflow#object_detection/train.py 上的 CUDA_ERROR_OUT_OF_MEMORY

[英]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,但每次創建訓練檢查點時只會消耗幾秒鍾,這種情況並不常見。
  • 優勢: 100% 的 GPU 始終用於訓練

要以 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM