一台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 可以看到在单机模式下也只有一个进程在进行运算
可以看到整个模型的参数有44w个,每轮训练大概用时100秒,总体训练5轮用时528s。
时间有限做例子我只训练了5轮,结果对于脚本玩家的识别准确率达到98%。
训练数据量:720773, 7, 18
测试数据量:177777, 7, 18
本例采用的是LSTM 模型。
epochs = 5 # 总轮次
batch_size = 256 # 每个机器单次训练batch
num_workers = 4 # 机器个数(tensor101 开 3个端口)
sequence_length = 7 # 样本时间步长
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个端口的机器执行情况如下
tensor102 机器执行情况如下
在训练次数较少的情况下,总体上的训练结果没有单机模式好。但是在训练轮次比较多的时候这两者之间并没有多大差别(测试过迭代轮次50轮结果并没有多大差别)
从迭代速率上来看,分布式模式下的训练速度每次迭代要80s,总体需要414s,比单机模式下的快100s,但是并没有想象中的快多少,这是什么原因呢?