ccr.ccs.tencentyun.com/qcloud/taco-training:cu112-cudnn81-py3-0.3.2
操作系统 | 说明 |
CentOS | |
Ubuntu |
docker pull ccr.ccs.tencentyun.com/qcloud/taco-training:cu112-cudnn81-py3-0.3.2
docker run -it --rm --gpus all --shm-size=32g --ulimit memlock=-1 --ulimit stack=67108864 --name ttf1.15-gpu ccr.ccs.tencentyun.com/qcloud/taco-training:cu112-cudnn81-py3-0.3.2
pip show ttensorflow
deep_dynamic_variables = tf.get_variable(name="deep_dynamic_embeddings",initializer=tf.compat.v1.random_normal_initializer(0, 0.005),shape=[100000000, self.embedding_size])deep_sparse_weights = tf.nn.embedding_lookup(params=deep_dynamic_variables,ids=ft_sparse_val,name="deep_sparse_weights")deep_embedding = tf.gather(deep_sparse_weights, ft_sparse_idx)deep_embedding = tf.reshape(deep_embedding,shape=[self.batch_size, self.feature_num * self.embedding_size])
deep_dynamic_variables = tf.dynamic_embedding.get_variable(name="deep_dynamic_embeddings",initializer=tf.compat.v1.random_normal_initializer(0, 0.005),dim=self.embedding_size,devices=["/{}:0".format(FLAGS.device)],init_size=100000000)deep_sparse_weights = tf.dynamic_embedding.embedding_lookup(params=deep_dynamic_variables,ids=ft_sparse_val,name="deep_sparse_weights")deep_embedding = tf.gather(deep_sparse_weights, ft_sparse_idx)deep_embedding = tf.reshape(deep_embedding,shape=[self.batch_size, self.feature_num * self.embedding_size])
tf.dynamic_embedding.get_variable
,详情请参见 tensorflow 动态 embedding 说明文档。tf.dynamic_embedding.embedding_lookup
,详情请参见 tensorflow 动态 embedding 说明文档。opt = tf.train.experimental.enable_mixed_precision_graph_rewrite(opt)
export TF_ENABLE_AUTO_MIXED_PRECISION=1
config = tf.ConfigProto()config.graph_options.optimizer_options.global_jit_level = tf.OptimizerOptions.ON_1sess = tf.Session(config=config)
TF_XLA_FLAGS=--tf_xla_auto_jit=1
cd /opt/dynamic-embedding-demo
bash download_dataset.sh
#进入benchmark目录cd benchmark#按照默认配置运行python train.py#每次修改batch size,需要将本地数据集缓存文件删掉rm -f .index .data-00000-of-00001python train.py --batch_size=16384#分别使用静态embedding和动态embedding进行DeepFM模型训练python train.py --batch_size=16384 --is_dynamic=Falsepython train.py --batch_size=16384 --is_dynamic=True#调整Deep部分的fc层数python train.py --batch_size=16384 --dnn_layer_num=12
cd ps && bash start.sh
cd estimator && bash start.sh
docker pull ccr.ccs.tencentyun.com/qcloud/taco-training:cu112-cudnn81-py3-0.3.2
docker run --network host -it --rm --gpus all --privileged --shm-size=32g --ulimit memlock=-1 --ulimit stack=67108864 --name lightcc ccr.ccs.tencentyun.com/qcloud/taco-training:cu112-cudnn81-py3-0.3.2
pip show light-horovod
/usr/lib/x86_64-linux-gnu/libnccl-net.so
文件移动到系统 lib 库目录之外(例如 /root
目录下)。该 lib 库中在 init 时会检查特定目录下的 HARP 配置文件是否存在,如果不存在程序会报错。环境变量 | 默认值 | 说明 |
LIGHT_2D_ALLREDUCE | 0 | 是否使用 2D-Allreduce 算法 |
LIGHT_INTRA_SIZE | 8 | 2D-Allreduce 组内 GPU 数 |
LIGHT_HIERARCHICAL_THRESHOLD | 1073741824 | 2D-Allreduce 的阈值,单位是字节,小于等于该阈值的数据才使用 2D-Allreduce |
LIGHT_TOPK_ALLREDUCE | 0 | 是否使用 TOPK 压缩通信 |
LIGHT_TOPK_RATIO | 0.01 | 使用 TOPK 压缩的比例 |
LIGHT_TOPK_THRESHOLD | 1048576 | TOPK 压缩的阈值,单位是字节,大于等于该阈值的数据才使用topk压缩通信 |
LIGHT_TOPK_FP16 | 0 | 压缩通信的 value 是否转为 FP16 |
#允许root使用ssh服务,并启动服务(默认端口:22)sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_configservice ssh start && netstat -tulpn
#修改容器内ssh默认端口为2222,防止与host冲突sed -i 's/#Port 22/Port 2222/' /etc/ssh/sshd_configservice ssh restart && netstat -tulpn
#设置root passwdpasswd root
#产生ssh keyssh-keygen
#配置ssh使其默认使用2222端口#创建 ~/.ssh/config,并添加以下内容,保存退出#注意:这里使用的ip是两台机器`ifconfig eth0`显示的ipHost gpu1hostname 10.0.2.8port 2222Host gpu2hostname 10.0.2.9port 2222
#两台机器互相免密,同时本机对自己做免密ssh-copy-id gpu1ssh-copy-id gpu2
#测试是否建立成功免密ssh gpu1ssh gpu2
wget https://raw.githubusercontent.com/horovod/horovod/master/examples/tensorflow/tensorflow_synthetic_benchmark.py
/usr/local/openmpi/bin/mpirun -np 16 -H gpu1:8,gpu2:8 --allow-run-as-root -bind-to none -map-by slot -x NCCL_ALGO=RING -x NCCL_DEBUG=INFO -x HOROVOD_MPI_THREADS_DISABLE=1 -x HOROVOD_FUSION_THRESHOLD=0 -x HOROVOD_CYCLE_TIME=0 -x LIGHT_2D_ALLREDUCE=1 -x LIGHT_TOPK_ALLREDUCE=1 -x LIGHT_TOPK_THRESHOLD=2097152 -x LD_LIBRARY_PATH -x PATH -mca btl_tcp_if_include eth0 python3 tensorflow_synthetic_benchmark.py --model=ResNet50 --batch-size=256
-np
和 -H
参数。其他主要参数说明如下:NCCL_ALGO=RING
:选择 NCCL 中的通信算法为 ring 算法。NCCL_DEBUG=INFO
:开启 NCCL 中的 debug 输出。-mca btl_tcp_if_include eth0
:选择 eth0 设备作为 MPI 多机通信的网络设备。在有多个网卡时需要特殊指定,有些网卡无法通信,不指定 MPI 选到无法通信的网卡会产生报错。机型:CVM GT4.41XLARGE948(A100*8 + 50G VPC) GPU 驱动:460.27.04 容器:ccr.ccs.tencentyun.com/qcloud/taco-training:cu112-cudnn81-py3-0.3.2 | ||
network | ResNet50 Throughput(images/sec) | |
| horovod 0.21.3 | lightcc 3.0.0 |
NCCL + HRAP | 8970.7 | 10229.9 |
NCCL + kernel socket | 5421.9 | 7183.5 |
sed -i '/GRUB_CMDLINE_LINUX/ s/"$/ default_hugepagesz=1GB hugepagesz=1GB hugepages=50"/' /etc/default/grub
sudo update-grub2 && sudo reboot
sudo grub2-mkconfig -o /boot/grub2/grub.cfg && sudo reboot
curl -s -L http://mirrors.tencent.com/install/GPU/taco/harp_setup.sh | bash
/usr/local/tfabric/tools/config
目录下已生成配置文件 ztcp*.conf
,则表示配置成功。docker pull ccr.ccs.tencentyun.com/qcloud/taco-training:cu112-cudnn81-py3-0.3.2
docker run -it --rm --gpus all --privileged --net=host -v /sys:/sys -v /dev/hugepages:/dev/hugepages -v /usr/local/tfabric/tools:/usr/local/tfabric/tools ccr.ccs.tencentyun.com/qcloud/taco-training:cu112-cudnn81-py3-0.3.2
#允许root使用ssh服务,并启动服务(默认端口:22)sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_configservice ssh start && netstat -tulpn
#修改容器内ssh默认端口为2222,防止与host冲突sed -i 's/#Port 22/Port 2222/' /etc/ssh/sshd_configservice ssh restart && netstat -tulpn
#设置root passwdpasswd root
#产生ssh keyssh-keygen
#配置ssh使其默认使用2222端口#创建 ~/.ssh/config,并添加以下内容,保存退出#注意:这里使用的ip是两台机器`ifconfig eth0`显示的ipHost gpu1hostname 10.0.2.8port 2222Host gpu2hostname 10.0.2.9port 2222
#两台机器互相免密,同时本机对自己做免密ssh-copy-id gpu1ssh-copy-id gpu2
#测试是否建立成功免密ssh gpu1ssh gpu2
wget https://raw.githubusercontent.com/horovod/horovod/master/examples/tensorflow/tensorflow_synthetic_benchmark.py
/usr/local/openmpi/bin/mpirun -np 16 -H gpu1:8,gpu2:8 --allow-run-as-root -bind-to none -map-by slot -x NCCL_ALGO=RING -x NCCL_DEBUG=INFO -x HOROVOD_MPI_THREADS_DISABLE=1 -x HOROVOD_FUSION_THRESHOLD=0 -x HOROVOD_CYCLE_TIME=0 -x LIGHT_2D_ALLREDUCE=1 -x LIGHT_TOPK_ALLREDUCE=1 -x LIGHT_TOPK_THRESHOLD=2097152 -x LD_LIBRARY_PATH -x PATH -mca btl_tcp_if_include eth0 python3 tensorflow_synthetic_benchmark.py --model=ResNet50 --batch-size=256
-np
和 -H
参数。其中主要参数说明如下:NCCL_ALGO=RING
:选择 NCCL 中的通信算法为 ring 算法。NCCL_DEBUG=INFO
:开启 NCCL 中的 debug 输出。开启后,HARP 将产生如下图所示的输出:-mca btl_tcp_if_include eth0
:选择 eth0 设备作为 MPI 多机通信的网络设备,在有多个网卡时需要特殊指定。有些网卡无法通信,不指定 MPI 选到无法通信的网卡会产生报错。mv /usr/lib/x86_64-linux-gnu/libnccl-net.so /usr/lib/x86_64-linux-gnu/libnccl-net.so_bak
本页内容是否解决了您的问题?