NISHIO Hirokazu[日本語][English]

広聴AIからのサルベージ

2025-03-27 Azure環境の広聴AIに大きなデータを入れたらしばらく実行された後でエラーになってしまった どういう原因で失敗したのかを調べるためにAzure Container Appの中の中間データを取り出したい image

注:

  • 成功したレポートのデータを取り出すスクリプトは3/25に作ってある
  • 今回は中間データを取り出したいという話で、これは大部分の人には必要ない作業
  • o3は「o3-mini-high.iconAzureの環境なら、Azure Blob Storageへのアップロードが唯一現実的です」とかいってくる面倒なシチュエーションを無理やりハックするメモです
  • これをやっている間、管理画面や結果表示画面はもちろんみんな動かなくなる
  • 普通の24時間運用するWebサービスの運用としてはあり得ないことをするのだけど、今回は顧客向けに24時間提供している状況ではないのでやってる

コンテナにbashで入る

:

az containerapp exec \
  --name <コンテナアプリ名> \
  --resource-group <リソースグループ名> \
  --container <コンテナ名> \
  --command "/bin/bash"

zipしてport=8001でserveする

$ apt update $ apt install zip $ cd broadlistening/pipeline $ zip -r outputs.zip outputs $ python -mhttp.server 8001

apiサーバのイングレスの設定を一時的に変える

APIサーバは普通にHTTPSでアクセスすると{"status":"ok"}と返してくる これはAzureがリクエストを8000番で動いているHTTPサーバに転送している この設定を一時的に8001番に変える

imageimage

これでAPIサーバにアクセスした時に先ほど作ったresults.zipが見えて、ダウンロードできるようになる。 image

ダウンロードし終わったら忘れずに元に戻しておく

余談: 結果を見てみる

imageimage 通常の成功したレポートは左のようになるが、今回のは右 args.csvにextractionの結果の25000~件5.2MBのデータが出力されている nasukaさんの推測ではOut of Memoryじゃないかということだったが、多分そうなのだろうという感じ

embeddingでtext-embedding-3-smallを使ってて、1件あたり1536次元のfloat32になる。 それをPythonのlist[float]で扱ってる Pythonのfloatは倍精度float64で8バイトなので合計 = 1536 × 8 = 12,288バイト(約12KB) 25000件ならざっくり300MB メモリ1GBのコンテナだとアプリケーションが使える余裕がそんなにはないってことなんだろうな 2GBなら余裕なはず


(C)NISHIO Hirokazu / Converted from Markdown (ja)
Source: [GitHub] / [Scrapbox]