ユーザ用ツール

サイト用ツール


ai:pytorch

PyTorch

Chainer と同じ流れをくむ Define by Run 型のフレームワーク。 Define by Run 型の利点を活かしつつ、Chainer の様々な欠点を補う形で開発が進められている。 Python に強く依存していた Chainer と違い、TensorFlow 同様 C++ で実装されている。 Python 上からしか高レベル API が使えないフレームワークが多い中、Python と全く同じ高レベル API を C++ から使うことができる。 Define by Run 型は Model 構造の定義がコードと独立しておらず異なる環境での再利用が難しいが、Script code に変換することで対応している。

Install 手順

  • Python, C++ ともに公式サイトよりビルド済みバイナリをダウンロード可能。
  • Linux, Windows, macOS
    • GPU は CUDA のみ。ROCm 版もあるらしい。

メモ

CPU と GPU 間のメモリ転送は明示的に記述する必要あり。ただし非常に簡単。

float  batch_size[ 3*32*32 ];
torch::Tensor  inputs_cpu= torch::from_blob( float_array, { batch_size, 3, 32, 32 }, torch::ScalarType::Float );
auto  inputs_gpu= inputs_cpu.to( torch::kCUDA );
 
auto  outputs_gpu= model->forward( inputs_gpu );
auto  outputs_cpu= outputs_gpu.to( torch::kCPU );

Model (Module) の定義は class ~Impl を使い、TORCH_MODULE() マクロで定義する。

#include  <torch/torch.h>
 
class ModelFCImpl : public torch::nn::Module {
    torch::nn::Linear  fc1= nullptr;
    torch::nn::Linear  fc2= nullptr;public:
    ModelFC()
    {
        fc1= register_module( "fc1", torch::nn::Linear( 512, 256 ) );
        fc2= register_module( "fc2", torch::nn::Linear( 256, 10 ) );}
    torch::Tensor  forward( const torch::Tensor& x )
    {
        ~
        x= torch::relu( fc1( x ) );
        x= fc2( x );
        return  x;
    }
};
 
TORCH_MODULE( ModelFC );

Shape 定義は NCHW 形式で IntArrayRef を使う。std::vector<int64_t> が利用可能。

TORCH_MODULE() で定義しておけば直接 torch::save() や torch::load() が使える。

C++ API sample

RADEON (ROCm) で PyTorch を使う方法

RADEON で PyTorch の C++ API を使う。

ROCm 4.3 + PyTorch 1.11 (2021/11/27)

  • Ubuntu 20.04LTS RADEON Vega 56
$ sudo apt update
$ sudo apt dist-upgrade
$ sudo apt install libnuma-dev
$ sudo reboot
$ sudo apt install wget gnupg2
$ wget -q -O - https://repo.radeon.com/rocm/rocm.gpg.key | sudo apt-key add -
$ echo 'deb [arch=amd64] https://repo.radeon.com/rocm/apt/4.3/ ubuntu main' | sudo tee /etc/apt/sources.list.d/rocm.list
$ sudo apt update
$ sudo rocminfo
$ sudo apt install rocm-dkms
$ sudo reboot
$ sudo apt install git cmake
$ sudo apt install python3-pip
$ pip3 install setuptools numpy wheel pyyaml
$ git clone --recursive https://github.com/pytorch/pytorch
$ cd pytorch
$ sudo apt install rccl rocm-libs
$ pip3 install typing_extensions
$ python3 tools/amd_build/build_amd.py
$ ROCclr_DIR=/opt/rocm/rocclr RCCL_DIR=/opt/rocm/rccl/lib/cmake/rccl/ PYTORCH_ROCM_ARCH=gfx900 hip_DIR=/opt/rocm/hip/cmake/ USE_NVCC=OFF BUILD_CAFFE2_OPS=0 PATH=/usr/lib/ccache/:$PATH USE_CUDA=OFF python3 setup.py bdist_wheel
ai/pytorch.txt · 最終更新: 2021/11/27 20:45 by oga