Slide 1

Slide 1 text

Colaboratoryで分析コンペ をする時のテクニック集 2021.3.2 分析コンペ勉強会 @currypurin

Slide 2

Slide 2 text

自己紹介 ● こんなアイコンでTwitter・Kaggleしています ● 去年の6月から、データサイエンティストとして働いています ● 趣味:Kaggle、漫画、podcast、clubhouse ● 今回、Cassavaコンペのsolutionを発表する予定でした ● 最終日、cvも改善し、これはいけるでしょう からの、Private872位という順位。 ● 上位のsolutionをみても、多くのチームとは自チームとの違いが分 からず。。。1位と2位はとあるweightを使用。。。 ● ということで、Cassavaコンペでも使ったColaboratoryの話をしま す。 2

Slide 3

Slide 3 text

今日の発表内容 ● Colaboratoryの概要、Colaboratoryを使って目指すところ ● Colaboratoryのテクニック集 3

Slide 4

Slide 4 text

Colaboratoryの概要 colaboratoryを使って目指すところ 4

Slide 5

Slide 5 text

KaggleのCodeコンペの場合 Kaggle Datasets (Notebook Output Files) KaggleNotebook modelのweight 推論 & submitファイル作成 読み込み この環境は固定されている。 選べるのは、modelのweightの作 成(学習)をどこでするか。 環境 価格 GPU・TPUの使用制限 学習データの ダウンロード Kaggle Datasets へのアップ Kaggle notebook 無料 週30~40時間程度 自動 自動 クラウド・ オンプレ 有料 なし 手動 手動 Colaboratory 無料 Kaggleのnotebookより 緩やかな制限 手動 手動 この赤枠の課題を 克服できると、 Kaggleの notebookよりも便 利に使うことができ る 5

Slide 6

Slide 6 text

Colaboratoryとは Colaboratory(略称: Colab)は、ブラウザから Python を記述、実 行できるサービスです。次の特長を備えています。 - 環境構築が不要 - GPU への無料アクセス - 簡単に共有 「Colaboratoryとは」より https://colab.research.google.com/notebooks/intro.ipynb?hl=ja 6

Slide 7

Slide 7 text

Colaboratoryとは ● 使用中に次のようなポップアップが出るなど、長時間の学習には向いていない。 ● 1セッション最大12時間の制限や、アイドル時間が長いと接続が切れることがあ る 7

Slide 8

Slide 8 text

Colaboratoryとは ● Colaboratoryには、Pro(有料版、月額9.99ドル)があり、現在米国と カナダでのみ提供されている ● 3月中旬にProが提供される地域が増えるとの噂がある https://colab.research.google.com/signup? authuser=2# より 8

Slide 9

Slide 9 text

Colaboratoryとは ● データ量の大きいKaggleの画像コンペでも、Colaboratoryを使って優勝した例 がある(TPUを使用) ● 日本でもColab proの提供が開始すると、データ分析コンペのために、使用する 人が更に増えそう ● Colaboratoryのテクニックなど、交換しましょう ● 「colaboratoryでkaggleをするときに便利なコード」にZenn.devのスクラップがあ るので、是非書き込んでください! 9

Slide 10

Slide 10 text

Colaboratoryテクニック集 10

Slide 11

Slide 11 text

Colaboratory テクニック集 1. テーマの設定(darkモード等)、エディタの設定(インデント幅等) 2. Kaggleのnotebook環境か、Colaboratory環境かを判別 3. notebook名を取得 4. Googledriveのファイルへのアクセスを許可 5. 学習速度比較、Mydriveの使用、colaboratory vs Kaggle notebook vs GCP 6. kaggle apiを使用する a. データのダウンロード i. 速度比較 b. Kaggle Datasetsへのアップロード 7. weightのロード、速度比較 8. Githubのrepositoryをclone a. public repository b. private repository 9. Githubのipynbファイルを開く、Githubに保存 自分が使っているやり方を紹介します。更に良い方法があれば、是非教えてください! 11

Slide 12

Slide 12 text

1.テーマの設定、エディタの設定 Colaboratory上部の「ツール > 設定」から設定が可能 12

Slide 13

Slide 13 text

テーマ:light、dark、adaptiveがある。 darkには、default dark、monokai、high contrast dark、synthwave84が選択可能 1.テーマの設定 lightとadaptiveの違いは不明 13

Slide 14

Slide 14 text

2.ColaboratoryかKaggleNotebookか判別 import sys # Colaboratory環境ならTrue 'google.colab' in sys.modules # Kaggle Notebook環境ならTrue 'kaggle_web_client' in sys.modules 14

Slide 15

Slide 15 text

2.ColaboratoryかKaggleNotebookか判別 使用例 import sys from pathlib import Path if 'google.colab' in sys.modules: # colab環境 INPUT = (‘/content/input/’) elif 'kaggle_web_client' in sys.modules: # kaggle環境 INPUT = Path(‘../input/’) ● ColaboratoryかKaggleNotebookかにより、INPUTのディレクトリを変更 ● これにより、同じコードのまま、どちらの環境でも動かすことが可能 15

Slide 16

Slide 16 text

3.Notebook名を取得 from requests import get name_notebook = get('http://172.28.0.2:9000/api/sessions').json()[0]['name'] # 変更しない場合、notebook名は’Untitled0.ipynb’ ● Notebook名を変更するだけで、学習した重みファイルの保存先のフォルダ名 に用いるようにするなど、便利に使える ● Notebook名の変更は忘れにくいと思う ○ Notebook名の変更を忘れなければ、学習した重みファイルを上書きしてしまうというミスを防 止できる 16

Slide 17

Slide 17 text

4.Google Driveのファイルへのアクセスを許可 ● Google Driveへのファイルへのアクセスを許可することで、保存していたファイ ルの読み込み、ファイルの保存ができる ● Google Driveのファイルの読み書きはやや遅い ● 課金すれば、Google Driveの容量を増やせる ここをクリック ポップアップの Googleドライブに接続をクリック from google.colab import drive drive.mount('/content/drive') #挿入されたこのコードを実行し、認証 または 接続完了 17

Slide 18

Slide 18 text

4.Google Driveのファイルのパス ● フォルダの右端をクリックからパスをコ ピーで、パスを取得可能 ● このパスで、通常のディレクトリのよう にアクセスできる。 # 左のKaggleフォルダ ‘/content/drive/MyDrive/kaggle’ # 左のsample_dataフォルダ ‘/content/sample_data’ 18

Slide 19

Slide 19 text

5.学習速度比較 MyDriveの使用 ● Cassavaコンペの学習データ、21,397枚の学習速度 ○ 画像データをMyDriveに置くか、content直下に置くかで速度を比較した。 環境 画像 gpu 1epochの学習時間 colaboratory content直下 P100 410秒 colaboratory MyDrive P100 476秒 ● 学習時間は、2epoch学習した時間の平均。画像サイズ384, batch_size20など同一条件で比較 ● content直下(ローカル)に画像をおいた方が、やや速い ● 長時間学習するときは、MyDriveにおかない方が良いかも ● ただし、content直下は、セッションが切れる度にリセットされる ● もう少し差があるかと思っていました。(以前はもっと差があったはず) content直下 MyDrive 19

Slide 20

Slide 20 text

5.Pytorchでの学習速度比較 ● Cassavaコンペの学習データ、21,397枚の学習速度 環境 gpu 1epochの学習時間 kaggle notebook P100 540秒 Colaboratory P100 410秒 GCP (highmem-8(vCPU x 8、メモリ 52 GB)) P100 395秒 GCP (highmem-8(vCPU x 8、メモリ 52 GB)) V100 168秒 ● 学習時間は、2epoch学習した時間の平均、画像サイズ384, batch_size20など同一条件で比較 ● gcpは、AI PlatformのPyTorch:1.7として提供されている環境を利用 ● P100での速度は、GCP、Colaboratory、kaggle notebookの順であった。 ● V100は速いので、ColabProの提供開始で使えるようになるのに期待。 20

Slide 21

Slide 21 text

5.Pytorchでの学習速度まとめ ● 長く学習するときは、content直下にファイルをおいたほうが効率が 良い ● Colaboratoryは遅くない ● では、データをどのようにcontent直下にダウンロードしてくるのが効率的か 21

Slide 22

Slide 22 text

1. 2.   6.Kaggle apiを使用する ● /root/.kaggle に kaggle.jsonをアップする from google.colab import files files.upload() ここをクリックしてkaggle.jsonをアップ または # /root/.kaggleにkaggle.jsonを移動する !mkdir -p ~/.kaggle !mv kaggle.json ~/.kaggle/ !chmod 600 ~/.kaggle/kaggle.json 22

Slide 23

Slide 23 text

6.a データのダウンロード # タイタニックコンペの例 !kaggle competitions donwload -c titanic 23

Slide 24

Slide 24 text

6.a.i 速度比較 Kaggle apiでのダウンロードとGoogle Driveからのコピーの速度比較 Cassavaコンペのデータで比較。(自分でzip化した、5.8Gのデータ) ・Kaggleデータセットからダウンロードしたほうが少し早い Google Driveからcontent 直下へコピー Kaggle apiでkaggleデータ セットからdownload データのコピー・ダウンロード 2分24秒 1分00秒 zipfileを解凍 1分31秒 24

Slide 25

Slide 25 text

6.b Kaggle Datasetsへのアップロード import json from kaggle.api.kaggle_api_extended import KaggleApi ID = ‘<自分のkaggleのID>’ DATASET_ID = ‘’ UPLOAD_DIR = ‘’ def dataset_create_new(): dataset_metadata = {} dataset_metadata['id'] = f'{ID}/{DATASET_ID}' dataset_metadata['licenses'] = [{'name': 'CC0-1.0'}] dataset_metadata['title'] = DATASET_ID with open(OUTPUT_DIR / 'dataset-metadata.json', 'w') as f: json.dump(dataset_metadata, f, indent=4) api = KaggleApi() api.authenticate() api.dataset_create_new(folder=UPLOAD_DIR, convert_to_csv=False, dir_mode='tar') ● Kaggleデータセットを新規作成する場合 25

Slide 26

Slide 26 text

6.b Kaggle Datasetsへのアップロード VERSION_NOTES = ‘’ def dataset_create_version(): api = KaggleApi() api.authenticate() api.dataset_create_version(folder=UPLOAD_DIR, version_notes=VERSION_NOTES, convert_to_csv=False, dir_mode='tar') ● Kaggleデータセットを更新する場合 26

Slide 27

Slide 27 text

7.weightのロード ● MyDriveからのロードと、content直下からのロード ロード時間 MyDrive 0.4秒 content 直下 0.3秒 # weight loadの例 model = timm.create_model('tf_efficientnet_b3_ns', pretrained=False) weight_path = ‘weightのpath’ model.load_state_dict(torch.load(weight_path)) ● ほぼ変わらない結果となった。 ● Cassavaコンペ期間中はMyDriveからだと数分かかることがあったので、その 場合はcontent直下にコピーしてロードすると解決した。 27

Slide 28

Slide 28 text

8.Githubのpublic repositoryをclone ● Bringing data info the Google Colab environment に詳しく書かれている !git clone https://github.com/username/repository.git /content/foldername 複製元のリポジトリ colaboratoryでの複製先 ● Public repositoryをcloneする場合 28

Slide 29

Slide 29 text

8.Githubのprivate repositoryをclone その1 !git clone https://username:[email protected]/username/repository.git ● GithubのPasswordを直接記載する方法であり、Bringing data info the Google Colab environment では、「NOT recommended」とされている ● Password method 29

Slide 30

Slide 30 text

8.Githubのprivate repositoryをclone その2 # その2、SSH keyを使う方法 !ssh-keygen -t rsa -b 4096 -C "[email protected]" !cat /root/.ssh/id_rsa.pub # これで表示されたkeyを、githubのsettings>deploy keysに登録 !ssh-keyscan github.com >> /root/.ssh/known_hosts !chmod 644 /root/.ssh/known_hosts !chmod 600 /root/.ssh/id_rsa !ssh -T [email protected] !git clone [email protected]:username/privaterepo.git /content/foldername SSH keyを作成し、公開鍵を githubに登録 githubをknown_host設定し、 接続確認。レポジトリを clone する /root/.ssh/は、セッションが切 れるとなくなってしまうので、 ローカルに保存したり、 Drive に保存するなどし、毎回 up or copyして使うと良いと思う Bringing data info the Google Colab environmentより 30

Slide 31

Slide 31 text

9.GitHubのipynbファイルを開く、GitHubに保存 ● Colaboratoryのファイル > Notebookを開く > Github に進んで認証し、日公開 リポジトリも含めるにチェックすると、githubのipynbファイルを開くことができる ● 編集後、Githubにコピーを保存でGitHubへの保存ができる 31

Slide 32

Slide 32 text

まとめ ● MyDriveの読み書きは遅いと思っていましたが、それほど遅くはありませんで した。(前はもっと遅かった気がします) ● 日本でもColaboratory Proの提供が開始されると、Kaggleでとても使えるツー ルになると思います ● 他にも便利な使い方があれば、是非教えてください 32

Slide 33

Slide 33 text

参照したウェブサイト ● 公式 ○ Colaboratory へようこそ ○ 外部データ: ローカル ファイル、ドライブ、スプレッドシート、 Cloud Storage ○ Colab Pro ○ Bringing data into the Google Colab environment ● その他 ○ colaboratoryでkaggleをするときに便利なコード ○ GitHubでssh接続する手順~公開鍵・秘密鍵の生成から ~ - Qiita ○ お前らのSSH Keysの作り方は間違っている - Qiita ○ Google Colaboratoryの90分セッション切れ対策【自動接続】 - Qiita 33