ChromebookでのVScodeインストールエラーの対処

ChromebookVScodeをインストールしたらエラーが発生。

環境: ASUS chromebook detachable CM3

VSCodeの公式ページよりLinuxdebファイルをダウンロードしたところ、 以下のようなエラーが発生してつまづきました。

Linux アプリケーションのインストール中にエラーが発生しました。

The following packages have unmet dependencies: code: Depends: libnss3 (>= 2:3.26) but it is not installable
Depends: apt but it is not installable
Depends: libxkbfile1 but is not installable
Depends: libsecret-1-0 but is not installable
Depends: libgtk-3-0 (>= 3.10.0) but is not installable

対処

自動でダウンロードされるインストーラChromebookと相性悪いようで、 ***_amd64.deb(AMD64用のインストーラ)がダウンロードされていました。

ChromebookはARM64で動作しているので、 VSCodeの公式ダウンロードサイトの「ARM64」アイコンからARM64用のインストーラを取得すれば解決します。

参考記事:

did2memo.net

tensorflowのtf.dataとmodel.predict()の相性

追記 (2022/01/07)

tensorflow/kerasの推論で tf.data.datasetを活用する方法がわかりました。

model.predict(...)の入力データに「datasetのイテレータ」ではなく、「dataset自体」を渡すことです。

また、dataset.repeat()を使用している場合はイテレータのループ回数が不定になるため、stepsオプションを追加します。

以下に、前回記事のコードを修正したものを貼っておきます。

import os
import tensorflow as tf
from model import MyModel

batch_size=32

def auto_select_accelerator():
    try:
        tpu = tf.distribute.cluster_resolver.TPUClusterResolver()
        tf.config.experimental_connect_to_cluster(tpu)
        tf.tpu.experimental.initialize_tpu_system(tpu)
        strategy = tf.distribute.experimental.TPUStrategy(tpu)
        print("Running on TPU:", tpu.master())
    except ValueError:
        strategy = tf.distribute.get_strategy()
    print(f"Running on {strategy.num_replicas_in_sync} replicas")
    return strategy

strategy = auto_select_accelerator()
REPLICAS = strategy.num_replicas_in_sync
AUTO = tf.data.experimental.AUTOTUNE

filenames = [ file for file in os.listdir( "/tmp/" )   if  ".jpg" in file ]
files = [ "/kaggle/input/dataset-name/" + filename for filename in filenames ]
dataset = tf.data.dataset.from_tensor_slices( files )
dataset = dataset.map( read_file, AUTO ).batch(batch_size).prefetch(1)
steps = len(files)//(batch_size*REPLICAS)
if len(files)%(batch_size*REPLICAS) != 0:
    steps += 1

with strategy.scope():
    model = MyModel( ... )

# datasetをそのまま入力する.
preds = model.predict( dataset, batch_size=batch_size*REPLICAS, steps=steps)

参考情報: TPUを使用している場合、かつ、数十GBのそこそこ大きめのデータセットに対して推論を適用する場合、model.predict()の処理中にTPUのsocket closedエラーが発生することがありました。→datasetを分割して投入することで解消できました。

元の記事

kaggleのコンペでTPUインスタンスを使って学習を実行することに慣れてきました。
tf.data.datasetで使うと効率的に学習できるので、推論でも使ってみたい!と思って試したところ、OOMエラー(メモリ使用上限に達したこと)が発生してセッションが落ちてしまいました。。
使用したtensorflowは2.6.0です。 kaggleのNotebookやGoogle colaboratoryで発生することを確認しています。 (GPUインスタンスでもTPUインスタンスでも発生するようです)

以下のコードを実行すると、もりもり使用メモリが増加していきます。

import os
import tensorflow as tf
from model import MyModel

def auto_select_accelerator():
    try:
        tpu = tf.distribute.cluster_resolver.TPUClusterResolver()
        tf.config.experimental_connect_to_cluster(tpu)
        tf.tpu.experimental.initialize_tpu_system(tpu)
        strategy = tf.distribute.experimental.TPUStrategy(tpu)
        print("Running on TPU:", tpu.master())
    except ValueError:
        strategy = tf.distribute.get_strategy()
    print(f"Running on {strategy.num_replicas_in_sync} replicas")
    return strategy

strategy = auto_select_accelerator()
REPLICAS = strategy.num_replicas_in_sync
AUTO = tf.data.experimental.AUTOTUNE

filenames = [ file for file in os.listdir( "/tmp/" )   if  ".jpg" in file ]
files = [ "/kaggle/input/dataset-name/" + filename for filename in filenames ]
dataset = tf.data.dataset.from_tensor_slices( files )
dataset = dataset.map( read_file, AUTO ).batch(32).prefetch(1)

with strategy.scope():
    model = MyModel( ... )

for batch in dataset:
    preds = model.predict( batch )

del modeltf.keras.backend.clear_session()gc.collect()を試しても開放されず。。
なにか知見が得られましたら、ここに情報を追記しようと思います。

GoogleColabのSession切れ防止

こちらに素晴らしい投稿がありました。

 

デベロッパーツールのコンソールで実行するだけで良いようです。

  1. function ClickConnect(){
  2. console.log("60sごとに再接続");
  3. document.querySelector("colab-connect-button").click()
  4. }
  5. setInterval(ClickConnect,1000*60);

今までlinuxのshellからopenコマンドを定期送信していましたが、

とても楽になりそうです。

kaggleAPI on GoogleColab

Kaggle APIを使ってGoogle Colaboratory上でデータセットをダウンロードしようとしたところ、zipfileでダウンロードされずにTooManyRequestsエラーで失敗することがありました。

Google ColaboratoryにデフォルトでインストールされているKaggleAPIが古いことが原因でした。

こちらのコマンドでkaggleAPIを更新することで対処できました。

!pip uninstall -y kaggle
!pip install --upgrade pip
!pip install kaggle==1.5.6

 

出典

www.kaggle.com

Google Colabプラン比較 (Kaggleコンペ用)

はじめに

kaggleのコンペ挑戦を始めてみました。

KaggleのCodeインスタンスではGPUの時間上限があるので、

GPUを手軽に使用できるGoogle Colaboratoryを使用できないか調べてみました。

 

※記載している情報に誤りがあることがあります。

もし情報の誤りを発見されましたら コメントなどで教えていただけますと助かります。

 

 Google Colaboratoryのプラン比較

 調べてみたところ、次のような構成のようです。

 

Colab

Colab Free

Colab Pro

Colab Pro +

GPU

K80(12GB)

K80(12GB) , T4(16GB) and P100(16GB)

K80(12GB) , T4(16GB) and P100(16GB)

runtime

12hr

24hr

24hr

background

×

×

Session Timeout

30min-90min(ばらつきあり)

30min-90min(ばらつきあり)

30min-90min(ばらつきあり)

Mem(DRAM)

16GB

16GB(標準)/32GB(ハイメモリVM

16GB(標準)/52GB(ハイメモリVM

Disk

107.77GB(CPU/TPU)/68.40GB(GPU

225.89GB(CPU/TPU)/147.15GB(GPU

?(調べて出てこなかった)

Terminal

×

Cost

Free

月額1072円 ($9.99 USD)

月額5243円  ($49.99 USD)

 

参考にしたページ:

https://towardsdatascience.com/google-colab-pro-is-it-worth-49-99-c542770b8e56

https://webbigdata.jp/study/post-9927

https://upura.hatenablog.com/entry/2021/08/12/144546

 

考察

コンペにはColab Pro以上は最低限必要のようです。

Kaggleの画像コンペでは訓練/検証データが100GB前後である場合が多いので、Colab Free容量不足のため厳しいです。

・教示データ=127.45GB  :https://www.kaggle.com/c/rsna-miccai-brain-tumor-radiogenomic-classification

・教示データ=98.27 GB : GLR2021 (https://www.kaggle.com/c/landmark-recognition-2021)

 

まとめ

繰り返しコンペにトライする場合、Google Colaboratory Proプランが良いようです。

コンペのsubmissionとコードの記録は履歴を残しておきたいので、次のような感じに使い分けるとよいかもです。

 ◆コンペ開始 (データ入出力やEDAの実施)

 → Kaggle Code

  いろんな方のCodeをその場で実行して感触をつかみます。EDAの段階ではpandasやsklearnでのデータ可視化がメインのため、GPUは不要。

◆コンペ中盤 (モデル試作やハイパーパラメータ試行錯誤)

 → Google Colab Proで実施。githubやGoogleDriveに記録を残す。

◆Submission登録

 → Kaggle Code (Submissionとコードの履歴をセットで残すため)

 

 

参考情報

比較1: Kaggle Codeインスタンス

KaggleのCodeインスタンスは制約があるもののとても使いやすいですね。

<メリット>

・コンペデータをダウンロードする必要がない。

・KaggleのCodeに来歴をつけて残せる。Input/Outputも残せる。

<デメリット>

・20分でセッションが切れる。(openコマンドで対処可能かも?試していないです)

・1か月の利用時間上限がある(41hr/月)。

GPUインスタンスは同時に1つまでしか実行できない。

 

比較2: AWS EC2 (G4dn.xlarge)

 低価格でインスタンスを用意できるAWSを使用した場合のコストを簡単に見積ってみました。

 月10回(週2-3回)の頻度で12hr/回実行すると、g4dn.xlargeでは

 10回/月x12hr/回x0.71USD/hr = 85.2 USD/月 (オンデマンド/東京リージョン)

 スポットインスタンスを使用して、なんとかColab Pro+と同じぐらいのコスト。

 

  <メリット>

 自前で作成したカスタムAMIを使用できる。

 インスタンスを停止させることで必要な時に簡単にインスタンスを起動できる。

 

 <デメリット>

 インスタンスを多重に起動するとコストはN倍化。

 Colab Proプラン以上は同時に複数のNotebookを起動できるので、AWS EC2より得な気がします。

 

参考にしたページ:

https://aws.amazon.com/jp/ec2/instance-types/g4/

https://aws.amazon.com/jp/ec2/pricing/on-demand/

 

初めての投稿

はじめまして、「もとの」といいます。

 

からあげ先生のkindle書籍(以下リンク)を拝読して、ぜひ自分も何か発信していきたいと思うようになりました。

趣味やエンジニア的な内容など雑記的な日記になる予定です。

気楽に続けていけたらと思います。

 

ゼロから始める情報発信: No Output, No Value | からあげ | 個人の成功論 | Kindleストア | Amazon