C++編譯的Tensorflow進行顯存限制

tensorflow進行模型時會將顯存佔滿,導致不能與其他模型並行。

在Python中的Tensorflow顯存設置代碼

config=tf.ConfigProto();
config.gpu_options.per_process_gpu_memory_fraction=0.5
set_session(tf.Session(config=config))

在C++中

GPUOption類中有一個per_process_gpu_memory_fraction對象。其默認值爲1。所以會每次將顯存佔滿,將改值修改即可。

    Session* session;

    ConfigProto configProto;
    //新建一個gpuoption對象
    GPUOptions gpuOptions;
    //設置顯存
    gpuOptions.set_per_process_gpu_memory_fraction(0.3);
    //修改configProto中的gpuoption對象
    configProto.set_allocated_gpu_options(&gpuOptions);
    
    //新建一個sessionOption對象並將configProto對象賦值給它
    SessionOptions sessionOptions;
    sessionOptions.config=configProto;
    Status status = NewSession(sessionOptions, &session);//創建新會話Session

SessionOption類中含有ConfigProto的對象,若不需要對顯存進行修改,則直接調用SessionOptions的默認構造函數即可。

Status status = NewSession(SessionOptions(), &session);

一開始是想使用configProto.gpuoption()函數來獲得gpuoption對象,並對它進行修改。但是發現該函數返回的是一個const對象。。。。

後來使用ConfigProto.set_allocated_gpu_options()函數完成。

不加顯存限制結果如下:

加顯存限制結果:

因爲出來Tensorflow以外還有其他模型,所以顯卡數值不是完全的0.3。但是可以看出明顯限制顯存了。可以同時加載多個模型了。

發佈了63 篇原創文章 · 獲贊 71 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章