在2019年PyTorch开发者大会上,Facebook,Google和Salesforce Research联合宣布启动PyTorch-TPU项目。项目的目标是在保持PyTorch的灵活性的同时让社区尽可能容易地利用云TPU提供的高性能计算。团队创建了PyTorch/XLA这个repo,它可以让使PyTorch连接到云TPU并使用TPU内核,同时Colab也支持在云TPU上使用PyTorch/XLA。现在,PyTorch/XLA 已在Google Cloud上达到通用标准(GA),并为我们提供了许多方便易用的接口。赶紧来看看PyTorch/XLA都有哪些功能吧
借助PyTorch/XLA GA,云TPU正式支持PyTorch 1.6。其他值得注意的新功能包括:
详细使用方法参照用户指南[1]。
PyTorch/XLA已被用于在云TPU上训练众多深度学习模型。包括:
在大多数情况下,在云TPU上训练这些模型几乎不需要更改代码。可以参考官方教程[2]获得上述模型的详细教程,也可以参考PyTorch / XLA GitHub[3]代码库找到训练的其他模型架构的示例。
PyTorch/XLA使用“lazy tensor”进行抽象。使用lazy tensor时,运算的evaluation会被推迟到这个运算被访问之前。此时,运算被描述为中间表示图,当我们需要运算结果时(访问),就通过XLA编译这些中间表示图,并发送到TPU内核以执行。这种XLA编译对CPU和GPU都支持。其他技术详细信息,可以参考GitHub[4]。
首先需要创建一个配有PyTorch / XLA映像的Google Compute Engine虚拟机和一个云TPU实例。创建好虚拟机和云TPU实例后,需要配置conda环境并设置XRT_TPU_CONFIG环境变量指向云TPU实例:
export XRT_TPU_CONFIG="tpu_worker;0;<TPU_IP_ADDRESS>:8470"
现在就可以开始在云TPU上训练模型了!
实际代码中需要改动的地方包括:
import torch_xla可以参考英文博客原文[5]中的代码实例看看具体的区别。
PyTorch/XLA支持将刚刚在单个云TPU上执行的训练扩展到整个云TPU Pod或者任意Pod切片,只需要使用xla_dist包装就可以了:
python -m torch_xla.distributed.xla_dist \
--tpu=$TPU_NAME \
--conda-env=torch-xla-1.6 \
--env ANY_ENV_VAR=VALUE \
-- \
python /path/to/your/code.py --train_arg1 \
--train_arg2 ...
官方提供的Colab notebook[6]写得非常详细,现在就开始探索吧!
更多详情请参考英文博客原文[7]以及Google官方博文[8]
参考文献
[1]用户指南: https://docs.google.com/document/d/1RzNgpTK4wESImhIwgMbknqn9xVNUFtCTCknNfONlMlo/edit
[2]官方教程: https://cloud.google.com/tpu/docs/tutorials/
[3]PyTorch / XLA GitHub: https://github.com/pytorch/xla
[4]GitHub: https://github.com/pytorch/xla/blob/master/API_GUIDE.md#xla-tensor-deep-dive
[5]英文博客原文: https://medium.com/pytorch/pytorch-xla-is-now-generally-available-on-google-cloud-tpus-f9267f437832
[6]Colab notebook: https://github.com/pytorch/xla/tree/master/contrib/colab
[7]英文博客原文: https://medium.com/pytorch/pytorch-xla-is-now-generally-available-on-google-cloud-tpus-f9267f437832
[8]Google官方博文: https://cloud.google.com/blog/products/ai-machine-learning/pytorch-is-now-ga-on-google-cloud-tpu
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/756/viewspace-3152100/ ,如需转载,请注明出处,否则将追究法律责任。