Google ColabにおけるTensorFlow 1.x系のサポート終了への対応

# はじめに
Google Colaboratory (以下Colab) において、TensorFlow 1.x系のサポートを正式に終了し、これらを使用したコードが実行できなくなりました。
GoogleやTwitterで検索をかけてみると、どうやら2022年8月3日ごろにこの報告が得られています。
筆者はStyleGAN2に関するコードを`tensorFlow-gpu==1.14.0`を使用して動作させていたため影響を受けることとなり、解決を図りました。

(2022/10/14追記)
現在、こちらの方法では動作しないことがわかっています。
TF1.x系は既にColabにプリセットで入っているCUDAのバージョンに対応していないみたいなので、CUDA+cudnnを自力導入すれば動くかもしれません。しかし、私の手元では今のところ動いていません。

# 問題
今までは以下の二つのバージョンインストールとマジックコマンドにより動作が確認できていました。
```
!pip uninstall -y tensorflow tensorflow-gpu tensorboard tensorflow-estimator
!pip install tensorflow-gpu==1.14.0
```
```
%tensorflow_version 1.x
```
しかし、下記のエラーコードのように下のマジックコマンドをColabが受け付けなくなり、今までこの方策によりTF 1.x系を動作させていたコードは動かなくなりました。
```
/usr/local/lib/python3.7/dist-packages/google/colab/_tensorflow_magics.py in _tensorflow_version(line)
     39 
     40              Your notebook should be updated to use Tensorflow 2.
---> 41              See the guide at https://www.tensorflow.org/guide/migrate#migrate-from-tensorflow-1x-to-tensorflow-2."""
     42                        ))
     43 

ValueError: Tensorflow 1 is unsupported in Colab.

Your notebook should be updated to use Tensorflow 2.
See the guide at https://www.tensorflow.org/guide/migrate#migrate-from-tensorflow-1x-to-tensorflow-2.
```
明確に「Tensorflow 1.x系はColabではサポートしていない」と述べられており、移行のためのリンクが提示されています。
確かにTensorflow 1.x系は既にだいぶ時代遅れでありますが、そうはいっても大幅な改修を行うことなく動作するのであればそれに越したことはありません。

# 要約
応急処置的ではありますが、以下の実行により動作しました。
```
!pip uninstall -y tensorflow tensorflow-gpu tensorboard tensorflow-estimator
!pip install tensorflow-gpu==1.15.2
``` 

# 前提
- Google ColabにおいてGPUマウントを使用している
- 従来は`tensorflow-gpu==1.14.0`で動作を確認

# やったこと①: マジックコマンドを削除

マジックコマンドを使用していることでエラーが出ていたため、`!pip install tensorflow-gpu==1.14.0`を使用した状態で実行してみました。
結果として下記のエラーメッセージが得られました。
```
NotFoundError: /content/drive/MyDrive/research/stylegan2encoder/dnnlib/tflib/_cudacache/fused_bias_act_7afc56c69f557109a44b12c5807eb900.so: undefined symbol: _ZN10tensorflow12OpDefBuilder5InputESs
```
調べてみたところ、[こちら](https://qiita.com/jun40vn/items/696f98753c12bdeec634)によるとTensorflowとCUDAのバージョンの食い違いが原因で出るエラーのようです。

# やったこと②: ColabのCUDAのバージョン変更
上記から、[こちら](https://qiita.com/chin_self_driving_car/items/f00af2dbd022b65c9068)を参考にCUDAのバージョン変更を行いました。2022年8月18日現在では、CUDAは10.0までは対応しているようです。
下記の実行により、CUDAのバージョンが10.0へ変更されていることがわかります。
```
(code)
import os
p = os.getenv('PATH')
ld = os.getenv('LD_LIBRARY_PATH')
os.environ['PATH'] = f"/usr/local/cuda-10.0/bin:{p}"
os.environ['LD_LIBRARY_PATH'] = f"/usr/local/cuda-10.0/lib64:{ld}"
!nvcc --version
------------------------------------------
(results)
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2018 NVIDIA Corporation
Built on Sat_Aug_25_21:08:01_CDT_2018
Cuda compilation tools, release 10.0, V10.0.130
```
しかしながら、エラーメッセージは変わらずTensorflowとCUDAのバージョンの食い違いに関するものでした。

# やってみたこと③: Tensorflowのバージョンを1.15.2に変更する
半ば途方に暮れつつも、 [こちら](https://github.com/karaage0703/karaage-ai-book/issues/36)の情報にたどり着きました。
また、このリンクの参照先として[こちらのStackOverFlow](https://stackoverflow.com/questions/73215696/did-colab-suspend-tensorflow-1-x)も同様の問題に対する解決策としてこちらの方法を提示していました。

結果として、こちらに従って下記を実行するとエラーはなく無事動作しました。
```
!pip uninstall -y tensorflow tensorflow-gpu tensorboard tensorflow-estimator
!pip install tensorflow-gpu==1.15.2
```

# 注意点
今回の対応では、なぜ1.15.2なら動作するのか、Colab内においてどう他の1.x系と扱いが異なっているのかという点については正直わかりかねているため、この対応は応急処置的であり根本的な解決にならない可能性があります。
加えて、今後Google側の対応によりTensorflow 1.x系が完全に使用不可になる可能性も高いので十分留意してください。