服务器背景
一台16核64g(数据存储机,命名tensor101) 一台4核16g(命名tensor102)
案例背景
针对某款手游,观察玩家在7天内的行为,包括在副本,经验,金币,市场等各个方面的表现识别这个玩家是否是脚本玩家。
单机模式
训练数据量:716392, 7, 18 测试数据量:182158, 7, 18 本例采用的是LSTM 模型。 epochs = 5 # 总轮次 batch_size = 1024 # 单次训练batch num_workers = 1 # 机器个数 sequence_length = 7 # 样本时间步长
def get_strategy():
"""
单机模式
:return:
"""
import tensorflow as tf
strategy = tf.distribute.MirroredStrategy()
return strategy
单机模式下的参数
epochs = 5
batch_size = 1024 # 单次训练batch
num_workers = 1 # 机器个数
sequence_length = 7 # 样本时间步长
strategy = get_strategy()
# strategy = get_multi_strategy()
data = get_data()
c_data = clean_data(data, sequence_length)
test_x, test_s_x,test_y = c_data[3:]
train_datasets, test_datasets, steps_per_epoch_size, test_steps = create_dataset(batch_size,num_workers,c_data)
print("steps_per_epoch_size,test_steps:",steps_per_epoch_size,test_steps)
with strategy.scope():
model = build_and_compile_cnn_model()
print('start fit model')
from time import time
start = time()
history = model.fit(train_datasets, epochs=epochs,steps_per_epoch=steps_per_epoch_size,shuffle=True,class_weight={1:4,0:1},
validation_data=test_datasets,validation_steps=test_steps)
print('Time: {:5.2f}s'.format(time() - start))
训练过程
打开服务器tensor101 的 top 可以看到在单机模式下也只有一个单核在进行运算

训练结果

多机多卡模式
训练数据量:720773, 7, 18 测试数据量:177777, 7, 18 本例采用的是LSTM 模型。 epochs = 5 # 总轮次 batch_size = 256 # 每个机器单次训练batch num_workers = 4 # 机器个数(tensor101 开 3个端口) sequence_length = 7 # 样本时间步长
注:若在分布式集群中有一台未启动则所有的集群都不会进行迭代,另外一定要保持迭代次数相同。
在构建分布式的模型中,由于tensorflow的分布式接口还不完善,存在某些函数用不了的情况,如优化器的选择之类的。
def get_multi_strategy():
"""
分布式模式
:return:
"""
import tensorflow as tf
import argparse
import os
import json
parser = argparse.ArgumentParser(description='tensorflow_test')
parser.add_argument('-worker', default=0) # --work_num
args, unknown_args = parser.parse_known_args()
HOST_CONFIG = ["tensor101:20000","tensor101:20001","tensor101:20002","tensor102:20000"]
os.environ['TF_CONFIG'] = json.dumps({
'cluster': {
'worker': HOST_CONFIG
},
'task': {'type': 'worker', 'index': args.worker}
})
print (os.environ['TF_CONFIG'])
strategy = tf.distribute.experimental.MultiWorkerMirroredStrategy()
return strategy
多机多卡模式的参数 在这里我们控制每轮迭代的batch一样,都是1024,则每台机子的训练batch就是256,其他参数保持一致 分布式模式下数据只需要存储在一台机器上面,其他机器的配置参数保持一致即可。 这里选择存储的机器是tensor01.
训练过程如下
tensor101 开了3个端口的机器执行情况如下


训练结果
