使用Keras训练Sequential模型时如何限制CPU使用率至80%
限制Keras模型训练时的CPU使用率至80%
Keras(默认以TensorFlow为后端)会默认占用全部可用CPU资源,导致使用率拉满。以下是两种可靠的解决方案:
方法1:通过TensorFlow配置限制线程数
直接在TensorFlow层面控制运算线程数,从根源上减少CPU占用:
在导入库后、模型初始化前添加以下配置(根据你的CPU核心数调整线程数,例如8核CPU设为6-7,即可将使用率控制在80%左右):
import tensorflow as tf # 设置 intra-op 和 inter-op 线程数 tf.config.threading.set_intra_op_parallelism_threads(6) tf.config.threading.set_inter_op_parallelism_threads(6)
如果使用TensorFlow 1.x兼容模式,可改用Session配置:
from tensorflow.compat.v1 import ConfigProto, InteractiveSession config = ConfigProto() config.intra_op_parallelism_threads = 6 config.inter_op_parallelism_threads = 6 session = InteractiveSession(config=config)
方法2:系统层面限制进程CPU使用率
如果框架层面的设置效果不佳,可通过系统工具或Python库直接限制进程资源:
方式A:用psutil库动态限制
安装psutil:pip install psutil,然后在代码中添加进程限制逻辑:
import psutil # 获取当前训练进程 p = psutil.Process() # 绑定进程到指定CPU核心(示例:8核CPU绑定前6个核心,使用率约75-80%) p.cpu_affinity([0,1,2,3,4,5]) # 可选:降低进程优先级,减少CPU抢占 p.nice(psutil.BELOW_NORMAL_PRIORITY_CLASS)
方式B:Linux系统用taskset命令启动脚本
直接在启动Python脚本时绑定CPU核心,无需修改代码:
# 示例:绑定到0-5号CPU核心 taskset -c 0-5 python your_training_script.py
修改后的完整训练代码示例
import tensorflow as tf import psutil from sklearn.metrics import accuracy_score from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense # 配置TensorFlow线程数 tf.config.threading.set_intra_op_parallelism_threads(6) tf.config.threading.set_inter_op_parallelism_threads(6) # 设置进程CPU亲和性 p = psutil.Process() p.cpu_affinity([0,1,2,3,4,5]) def get_model(n_inputs, n_outputs): model = Sequential() model.add(Dense(2500, input_dim=n_inputs, kernel_initializer='he_uniform',activation='relu')) model.add(Dense(n_outputs, activation='sigmoid')) model.compile(loss='binary_crossentropy', optimizer='adam') return model def train_model(X, y): results = list() n_inputs, n_outputs = X.shape[1], y.shape[1] model = get_model(n_inputs, n_outputs) model.fit(X, y, verbose=1, epochs=100) yhat = model.predict(X) yhat = yhat.round() acc = accuracy_score(y, yhat) print('>%.3f' % acc) results.append(acc) return model,results model,results = train_model(X, y)
注意事项
- 线程数/核心数需根据实际CPU配置调整:例如4核CPU设为3个核心,使用率可控制在75%左右,接近80%的目标。
- 若使用GPU训练,TensorFlow会自动将核心运算转移到GPU,CPU使用率会自然下降,无需额外限制。
psutil.cpu_affinity支持Windows、Linux多平台,taskset仅适用于Linux系统。
内容的提问来源于stack exchange,提问作者Ankit Bijlwan
相关产品推荐
相关产品推荐

