TensorFlowSharp GPU 显存 分配

TensorFlow 运行时默认会最大化使用显存,如果需要控制其显存的分配,可以进行相应的设定。相关设定大多是在python或c++的运行环境下设置的,c#环境下的设置方法可以如下文。主要使用了 options.SetConfig(InPtr protoData,int length)

1.通过python获取protoData
protoData 是一串二进制流,但c#中没有找到生成这个二进制流的方法,所以只好通过python生成,代码如下

import tensorflow as tf

config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.3 最大使用30%的显存

bytes = config.SerializeToString()
hexstring = " ".join("%02d" % b for b in bytes)
print(hexstring)

输出为 50 09 09 51 51 51 51 51 51 211 63

2.TensorFlowSharp 中导入二进制流

TFSessionOptions options = new TFSessionOptions();
byte[] data = { 50, 9, 9, 51, 51, 51, 51, 51, 51, 211, 63 }; //0.3
 
IntPtr buffer = Marshal.AllocHGlobal(data.Length);
Marshal.Copy(data, 0, buffer, data.Length);
TFStatus ts = new TFStatus();
options.SetConfig(buffer, data.Length, ts);
Marshal.FreeHGlobal(buffer);
 
TFSession session = new TFSession(graph, options);

这样实例化出来的session 就会限制在30%显存运行。如果需要其他设置,只需要在python中获取到相应的二进制流,然后在c#中设置一下就可以了

发表回复

您的电子邮箱地址不会被公开。