Google ColaboratoryがCUDA9.2になってる

# 言いたい事、タイトル通り
- ここ数日すっかりUbuntu18、CUDA9.2にばかり繋がる
- かつ、chainer公式で対応されました

https://github.com/chainer/google-colaboratory

```
!curl https://colab.chainer.org/install | sh -
```

- これだけで、次にはもうGPUが有効なことが確認できます

```
import chainer
print('GPU availability:', chainer.cuda.available)
print('cuDNN availablility:', chainer.cuda.cudnn_enabled)
```

以上

## あっという間にこの記事は古くなりました、以下は読まなくて良いです。

- Google ColaboratoryがCUDA9.2になってる
- 訂正、たまに9.2になってることがある（？）
- [kmaehashi様のリポを見ると幸せになる](https://github.com/kmaehashi/chainer-colab)
- 以上

## バージョン確認

```python:os
cat /etc/issue
```
```sh:os_output
Ubuntu 18.04.1 LTS \n \l
```

```python:ドライバ
ls -l /usr/lib/x86_64-linux-gnu/libcuda*
```
```sh:ドライバ_output
lrwxrwxrwx 1 root root       12 Aug 21 18:16 /usr/lib/x86_64-linux-gnu/libcuda.so -> libcuda.so.1
lrwxrwxrwx 1 root root       17 Aug 21 18:16 /usr/lib/x86_64-linux-gnu/libcuda.so.1 -> libcuda.so.396.54
-rw-r--r-- 1 root root 14074232 Aug 15 06:17 /usr/lib/x86_64-linux-gnu/libcuda.so.396.54
```

```python:cuda
ls -l /usr/local/cuda
```
```sh:cuda_output
lrwxrwxrwx 1 root root 8 Sep 28 22:08 /usr/local/cuda -> cuda-9.2/
```

## Chainer（というかCupy）使ってる人はおまじないを変更しましょう

[ありがたいことにkmaehashi様のリポで案内が更新されていました（10/4に更新されたようす）](https://github.com/kmaehashi/chainer-colab)

```python:cupyをインストール
!apt -y -q install cuda-libraries-dev-9-2
!pip install -q cupy-cuda92 chainer
```

```python:chainerからgpuが使えることを確認
import chainer
print('GPU availability:', chainer.cuda.available)
print('cuDNN availablility:', chainer.cuda.cudnn_enabled)
```
```sh:chainerからgpuが使えることを確認_output
GPU availability: True
cuDNN availablility: True
```

## 追記、以上の手順じゃ駄目みたいです

- [この手順で将棋AIを動かしてみたら](https://qiita.com/kfjt/items/d6eeec2a6b362032e3b1)
- usi(player)に`go`と伝えた時点でエラーがでました
- cudaとcupyのバージョンミスマッチ？でしょうか

```sh:usiのgoでエラー
NVRTCError                                Traceback (most recent call last)
/usr/local/lib/python3.6/dist-packages/cupy/cuda/compiler.py in compile(self, options)
    240         try:
--> 241             nvrtc.compileProgram(self.ptr, options)
    242             return nvrtc.getPTX(self.ptr)

cupy/cuda/nvrtc.pyx in cupy.cuda.nvrtc.compileProgram()

cupy/cuda/nvrtc.pyx in cupy.cuda.nvrtc.compileProgram()

cupy/cuda/nvrtc.pyx in cupy.cuda.nvrtc.check_status()

NVRTCError: NVRTC_ERROR_COMPILATION (6)

During handling of the above exception, another exception occurred:

CompileException                          Traceback (most recent call last)
<ipython-input-24-3641f643e1de> in <module>()
      3 
      4 player = PolicyPlayer()
----> 5 usi(player)

/content/drive/My Drive/python-dlshogi/pydlshogi/usi/usi.py in usi(player)
     17             player.position(moves)
     18         elif cmd[0] == 'go':
---> 19             player.go()
     20         elif cmd[0] == 'quit':
     21             player.quit()

/content/drive/My Drive/python-dlshogi/pydlshogi/player/policy_player.py in go(self)
     53 
     54         with chainer.no_backprop_mode():
---> 55             y = self.model(x)
     56 
     57             logits = cuda.to_cpu(y.data)[0]

/content/drive/My Drive/python-dlshogi/pydlshogi/network/policy.py in __call__(self, x)
     26 
     27     def __call__(self, x):
---> 28         h1 = F.relu(self.l1(x))
     29         h2 = F.relu(self.l2(h1))
     30         h3 = F.relu(self.l3(h2))

/usr/local/lib/python3.6/dist-packages/chainer/functions/activation/relu.py in relu(x)
    175 
    176     """
--> 177     y, = ReLU().apply((x,))
    178     return y

/usr/local/lib/python3.6/dist-packages/chainer/function_node.py in apply(self, inputs)
    261                 outputs = static_forward_optimizations(self, in_data)
    262             else:
--> 263                 outputs = self.forward(in_data)
    264 
    265         # Check for output array types

/usr/local/lib/python3.6/dist-packages/chainer/function_node.py in forward(self, inputs)
    367         assert len(inputs) > 0
    368         if isinstance(inputs[0], cuda.ndarray):
--> 369             return self.forward_gpu(inputs)
    370         return self.forward_cpu(inputs)
    371 

/usr/local/lib/python3.6/dist-packages/chainer/functions/activation/relu.py in forward_gpu(self, inputs)
     57             y = cudnn.activation_forward(x, _mode)
     58         else:
---> 59             y = cuda.cupy.maximum(x, 0)
     60         self.retain_outputs((0,))
     61         return y,

cupy/core/_kernel.pyx in cupy.core._kernel.ufunc.__call__()

cupy/util.pyx in cupy.util.memoize.decorator.ret()

cupy/core/_kernel.pyx in cupy.core._kernel._get_ufunc_kernel()

cupy/core/_kernel.pyx in cupy.core._kernel._get_simple_elementwise_kernel()

cupy/core/carray.pxi in cupy.core.core.compile_with_cache()

/usr/local/lib/python3.6/dist-packages/cupy/cuda/compiler.py in compile_with_cache(source, options, arch, cache_dir, extra_source)
    162                 return mod
    163 
--> 164     ptx = compile_using_nvrtc(source, options, arch)
    165     ls = function.LinkState()
    166     ls.add_ptr_data(ptx, six.u('cupy.ptx'))

/usr/local/lib/python3.6/dist-packages/cupy/cuda/compiler.py in compile_using_nvrtc(source, options, arch)
     80         prog = _NVRTCProgram(source, cu_path)
     81         try:
---> 82             ptx = prog.compile(options)
     83         except CompileException as e:
     84             dump = _get_bool_env_variable(

/usr/local/lib/python3.6/dist-packages/cupy/cuda/compiler.py in compile(self, options)
    243         except nvrtc.NVRTCError:
    244             log = nvrtc.getProgramLog(self.ptr)
--> 245             raise CompileException(log, self.src, self.name, options)
    246 
    247 

CompileException: /usr/local/lib/python3.6/dist-packages/cupy/core/include/cupy/carray.cuh(10): catastrophic error: cannot open source file "cuda_fp16.h"

1 catastrophic error detected in the compilation of "/tmp/tmpbymobvig/kern.cu".
Compilation terminated.
```

## 追記、の追記

- やられた！
- 何度かランタイムリセットしたら
- Ubuntu17、CUDA8.0の環境につながった
- そこが不安定だとライブラリのバージョン相性が担保できないからやめてくれ！
- 無料だし大声で文句言えない

## 追記、の追記の追記

- その後Ubuntu18の環境につながることがないので、おまじないを変更して将棋AIが動くのかは動作確認できていません。。

以上