ChromebookでのVScodeインストールエラーの対処
ChromebookにVScodeをインストールしたらエラーが発生。
環境: ASUS chromebook detachable CM3
VSCodeの公式ページよりLinux用debファイルをダウンロードしたところ、 以下のようなエラーが発生してつまづきました。
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用のインストーラを取得すれば解決します。
参考記事:
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 model
、tf.keras.backend.clear_session()
、gc.collect()
を試しても開放されず。。
なにか知見が得られましたら、ここに情報を追記しようと思います。
kaggleAPI on GoogleColab
Google Colabプラン比較 (Kaggleコンペ用)
はじめに
kaggleのコンペ挑戦を始めてみました。
KaggleのCodeインスタンスではGPUの時間上限があるので、
GPUを手軽に使用できるGoogle Colaboratoryを使用できないか調べてみました。
※記載している情報に誤りがあることがあります。
もし情報の誤りを発見されましたら コメントなどで教えていただけますと助かります。
Google Colaboratoryのプラン比較
調べてみたところ、次のような構成のようです。
Colab |
Colab Free |
Colab Pro |
Colab Pro + |
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/月)。
比較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