タグ

performanceに関するsh19910711のブックマーク (187)

  • PythonのcProfileモジュールを使ってプロファイル取得とSnakeVizによる可視化 - 偏った言語信者の垂れ流し

    先日のPyCon Kyushu Kagoshima 2024で登壇したcProfileの資料の内容から抜粋しつつ、cProifleの使い方について少し書いてみます。 tokibito.hatenablog.com Pythonのプロファイルとは Pythonの実行に関する統計情報 関数がどれだけ呼ばれたか 実行時間どのぐらいかかったか Pythonでは標準モジュールのcProfileを使うと、プロファイルを取得できます。 プロファイルを取得する対象のコード read_file.py: import datetime import timeit DATA_FILE = "data.jsonl" def main(): """ファイルの行数をカウントするスクリプト""" print("start:", datetime.datetime.now()) result = 0 with open(

    PythonのcProfileモジュールを使ってプロファイル取得とSnakeVizによる可視化 - 偏った言語信者の垂れ流し
    sh19910711
    sh19910711 2024/06/09
    "cProfileで取得したプロファイル情報は、標準モジュールのpstatsでテキストとして読むことができますが、SnakeVizを使うとウェブブラウザ上でグラフ表示、データのソートなどができて簡単"
  • 大テーブルと小テーブルのJOINのコスト計算の話

    https://mysql-unconference.connpass.com/event/310279/ https://amamanamam.hatenablog.com/entry/2024/02/11/005331

    大テーブルと小テーブルのJOINのコスト計算の話
    sh19910711
    sh19910711 2024/06/08
    "大きめのテーブル(100万行)と小さめのテーブル(3行)をLEFT JOINするクエリが妙に遅い / hash joinが選択されている + 後者のテーブルの行数を10行に増やすと、後者の結合タイプがeq_refに変わる"
  • json/protobuf(wire)/gobをバイナリ効率とかの観点から比べてみる - ちりもつもればミルキーウェイ

    はじめに どうも @convto です。 以前に protobufのwire encodingについて遊んた ことや gobについていろいろ仕様を調べて遊んだ こととかがあったので、いっちょいい感じの比較ができるんではということでやっていきたいと思います。 ついでにgobについては 当時のモチベを調べたりもしたことある のでそのへんもおまけ程度に言及しつつ、こういうときにgobつかえそうだよ〜みたいなのをまとめてみます。 比較するのは json protobuf(wire) gob です。おもな観点はバイナリ効率ですが、それぞれのエンコーディングのメッセージの互換性やら、周辺エコシステムの広がりも含めて評価できればと思います。 ちなみにバイナリの比較についてはせっかくなので稚作の↓をつかってます。そこそこ便利なので用途に合う方はぜひ愛でてあげてください github.com これは Go

    json/protobuf(wire)/gobをバイナリ効率とかの観点から比べてみる - ちりもつもればミルキーウェイ
    sh19910711
    sh19910711 2024/06/08
    "エンコーディングのメッセージの互換性やら、周辺エコシステムの広がり / wire: keyにあたる概念をfield_numberとtype(型情報)を統合したtagという概念で管理 / gob: 外部定義やアノテーションなしにGoの値をそのまま使える" 2022
  • Cloud TPUの使いどころガイドライン - Qiita

    TPUもリリースされ、CPU, GPU, TPUをどういった時に、何を基準に使い分ければよいのかと思っていたら、以下に記載されていることだったのでメモ。 https://cloud.google.com/tpu/docs/tpus Cloud TPUは特定のワークロードに最適化されているので、機械学習のワークロードによってはCompute EngineのインスタンスでCPUGPUを使用した方がよいケースがある。一般的には、どの環境を選択すべきかは以下のガイドラインに従えばよい。 CPU 柔軟性があるプロトタイプを素早く作る必要がある場合 モデルのトレーニングに時間がかからないような単純なモデル 小さなモデル C++で記述されたカスタムTensorFlow operationが大部分を占めるモデル 利用可能なI/Oやホストのネットワークバンド幅が制限されているモデル GPU TensorF

    Cloud TPUの使いどころガイドライン - Qiita
    sh19910711
    sh19910711 2024/06/08
    "行列計算が大きく占めているモデル / 向いてないワークロード: 頻繁にブランチングしてたり要素ごとの積が多くを占めるような線形代数のプログラム / TPU: 大量の行列積演算が速くなるように最適化されている" 2018
  • 128bit除算も定数除算最適化したい - よーる

    一般に整数除算(ここでは剰余演算も含むこととします)を行う命令は遅いです。 そのため、除算はなるべく回避したいものです。 除数がコンパイル時定数の場合、コンパイラの最適化により、除算が取り除かれることがあります。 これを定数除算最適化と呼びます。 定数除算最適化では、除算はいくつかの軽量な命令に分解されます。 二のべき乗で割る場合、単にシフト命令が使われます。 それ以外の数で割る場合、乗算とシフト命令が使われます。 符号付きの除算の場合、零への丸めの部分の取り扱いが面倒ですが、追加のシフト命令と加算命令だけで(分岐命令を使わずに)なんとかできるようです。 さて、この定数除算最適化は、128bit整数の除算の場合は常には行われないようです。 これを何とかしてみたいと思います。 もちろん、手で最適化されたコードを書けばできますが、コンパイル時計算により除数が決まる場合などに対応するのは困難とい

    128bit除算も定数除算最適化したい - よーる
    sh19910711
    sh19910711 2024/05/30
    "定数除算最適化: 二のべき乗で割る場合、単にシフト命令が使われ + それ以外の数で割る場合、乗算とシフト命令 / 定数除算最適化は、128bit整数の除算の場合は常には行われないようです" 2023
  • BigQuery の 履歴ベースの最適化 (History-based Optimizations) を試したかった

    はじめに こんにちは、クラウドエース データソリューション部所属の濱です。 データソリューション部では、Google Cloud が提供しているデータ領域のプロダクトについて、新規リリースをキャッチアップするための調査報告会を毎週実施しています。 新規リリースの中でも、特に重要と考えるリリースを記事としてまとめ、ページのように公開しています。 クラウドエース データソリューション部 について クラウドエースの IT エンジニアリングを担う システム開発統括部 の中で、特にデータ基盤構築・分析基盤構築からデータ分析までを含む一貫したデータ課題の解決を専門とするのが データソリューション部 です。 弊社では、新たに仲間に加わってくださる方を募集しています。もし、ご興味があれば エントリー をお待ちしております! 今回紹介するリリースは、2024年4月1日にリリースされた「クエリの履歴ベースの

    BigQuery の 履歴ベースの最適化 (History-based Optimizations) を試したかった
    sh19910711
    sh19910711 2024/05/29
    "History-based Optimizations: すでに実行した類似クエリの実行情報を使用して追加の最適化を適用 + ロジックが似ている処理を繰り返し行う場合に本機能が適用 / 類似の定義は公式ドキュメントには記載がありません"
  • ローカルLLMの長文推論、メモリ使用量を節約する方法:KVキャッシュの量子化|AIサトシ

    大規模言語モデル(LLM)において、メモリ使用量の効率化は非常に重要です。特に長文処理を行う場合です。モデルに入力するコンテクストが長くなるほど、メモリ消費量も増加します。 プロンプトに入力する文字数(Token数)と必要メモリについて計算したメモ📝 精度との兼ね合いですが、長文扱うときは、mistral-v0.1圧倒的にコスパ良い pic.twitter.com/Nqn5SXDZ9u — AI𝕏サトシ⏩ (@AiXsatoshi) May 27, 2024 Mistral-7Bは、v0.1では、約4K tokensのSliding window attention(SWA)にて、コンテクスト長に消費されるメモリを低減しました。しかし、性能への影響からと考えますが、v0.2以降のアップデートで、SWAは排除されています。入力トークンを絞ることでメモリ容量を低減すれば、当然複雑性や表現力

    ローカルLLMの長文推論、メモリ使用量を節約する方法:KVキャッシュの量子化|AIサトシ
    sh19910711
    sh19910711 2024/05/29
    "Mistral-7B: v0.2以降のアップデートでSWAは排除 + 入力トークンを絞ることでメモリ容量を低減すれば当然複雑性や表現力が低下 / KVキャッシュ量子化: 計算結果を保存して再利用 + 消費者向けGPUでより長いテキスト生成が可能"
  • ESP32のC/C++の関数をアセンブリ言語化し手作業で最適化してみる

    はじめに 前回の記事ではESP32を対象に、アセンブリ言語の読み方を説明しました。今回はもう少し具体的な例を挙げて説明をしていきます。 前提条件 XtensaコアのESP32シリーズ (ESP32/ESP32-S2/ESP32-S3) を使用していること。 ArduinoIDEまたはVSCode+PlatformIOでESP32用のプログラムを実行できること。 前回までの記事の内容までを把握していること。 ※ ESP32-C3などはXtensaコアではないため、記事の対象から外れます。 今回取り扱うサンプルコード 今回はC/C++で作成した関数をアセンブリ言語化し手作業で最適化する手法を説明します。 比較的手軽にアセンブリ言語化の恩恵が得やすい 『配列に対して何らかの演算を行い、結果を配列に格納する』 という処理例を用意します。 今回取り扱う例は以下のようにしました。 void test

    ESP32のC/C++の関数をアセンブリ言語化し手作業で最適化してみる
    sh19910711
    sh19910711 2024/05/28
    "floatの計算には時間が掛かる / madd.s命令でf0レジスタに演算結果が入りますが、次行ですぐにssi命令でf0の値を使おうとしています。このときssi命令はf0の値が利用可能になるまで待機させられてしまう"
  • なぜCatboostの推論は速いの? - 簡単なレポート

    前回の記事「AutoML v.s. Catboost」に出てくるCatboostは、XGBoostやLightGBMと比べて30-60倍も推論が速いという特徴があります。 推論時間は、kaggleなどのコンペでは推論に時間をかけられるのであまり気にしませんが、実サービスとなると重要ですよね。 推論時間の比較 以下のグラフは、3大GBDTライブラリでの推論時間比較です。Catboostがずば抜けて速いことがやかります。 そして学習時間の速さに定評があるLightGBMは、なんと最遅です。 この推論時間の速さは、CatboostがGBDTのベースとなる決定木に symmetric tree と呼ばれる、特殊な形の木を使っているからです。 ここで、symmetric treeとは以下の図の右側のような木です。左側は普通の決定木です。 なぜsymmetric treeは速いか 「同一の深さではすべ

    なぜCatboostの推論は速いの? - 簡単なレポート
    sh19910711
    sh19910711 2024/05/27
    "Catboost: 決定木に symmetric tree と呼ばれる、特殊な形の木を使っている + 同一の深さではすべての分岐条件が同じ / LightGBM: 学習時間の速さに定評 / GPUを用いた場合は、学習時間でもCatboostが最速" 2019
  • Hive on TezのEXPLAINを読み解く | DevelopersIO

    こんにちは、小澤です。 RDBではおなじみのEXPLAIN、実行計画を確認しクエリを最適化したり、インデックスの貼り方を考えたりするのによく使われるかと思います。 このEXPLAINですが、Hiveでも利用可能です。 HiveのEXPLAINはMapReduceやTez, Sparkのジョブに変換されるため、少々見方が特殊でこれらの知識も必要になります。 実行エンジンによって表示され方が異なるため、今回はHive on Tezに限定してこのEXPLAINの見方を解説していきます。 今回利用するクエリ 今回は、TPC-DSというOLAPなどの分析系クエリのベンチマークで利用されるデータを利用して見ていきたいと思います。 TPC-DSの詳細については解説しませんので、気になる方は公式の情報をご確認ください。 TPC-DS HiveでTPC-DSを利用できる環境を整えるために、以下のスクリプトを

    Hive on TezのEXPLAINを読み解く | DevelopersIO
    sh19910711
    sh19910711 2024/05/26
    "HiveのEXPLAIN: MapReduceやTez, Sparkのジョブに変換されるため、少々見方が特殊 / ジョブを実行すると、TezのWebUIからビジュアライズされたものが確認できますが、実行計画のこの部分から同じものを作成することも可能" 2017
  • Python+Peewee ORM+SQLiteで1億レコード最速insertチャレンジ | さかな前線

    イワシの大群が特に大規模になったとき、それをサーディンランと呼び、個体数は数千万とも数億とも数十億ともいわれるのだそうです。そのような生物量がそれほど密集したとき酸素濃度は足りるんだろうかと心配です。 さて、データ処理の一環で億オーダーのレコード数(ディスク上で~100GB)をもつSQLiteテーブルを構築しようということになり、データ自体は生CSVがある状態でこれをなるべく短時間でDBに流し込むという雑なチャレンジをしてみたので、雑な記録をまとめておきました。 できるだけPythonで閉じさせたかったため、C++などで書くという選択肢はなし。 またDBサイズがサイズなのでインメモリではなくファイルに吐き出します。 またスキーマ定義をさくっとやりたい・DB構築後の扱いを楽にしたいということで、PythonベースのORM Peeweeを使用することにしています。なおPeeweeについて詳細は

    sh19910711
    sh19910711 2024/05/26
    "億オーダーのレコード数(ディスク上で~100GB)をもつSQLiteテーブルを構築しよう / これをなるべく短時間でDBに流し込むという雑なチャレンジ / Peewee: PythonベースのORM + 軽量でありまたPythonic" 2019
  • Pytorch高速化 (3) TensorRTで推論を10倍高速化 - arutema47's blog

    TLdr; torch2trtというpytorchモデルをTensorRTに簡単に変換するライブラリを使い、Jetson nano+xavier上で画像認識とセグメンテーションの推論処理を10倍高速化できることを確認しました。 ただtorch2trtはカスタムモデルには対応していないため(resnetなどtorchvision標準モデルのみ)、自作モデルのTensorRT変換は大変だと思います。 TLdr; TensorRTとは TesnorRTを気軽に試す 画像認識 画像セグメンテーション 他高速化シリーズ aru47.hatenablog.com aru47.hatenablog.com TensorRTとは https://amzn.to/3q9qrEK https://amzn.to/37ndtL5 例えばJetsonNanoなどは安価に入手できるエッジデバイスだが搭載しているGP

    Pytorch高速化 (3) TensorRTで推論を10倍高速化 - arutema47's blog
    sh19910711
    sh19910711 2024/05/24
    "TensorRT: 推論を高速化させるフレームワーク + エッジデバイスでも高速な推論が可能 / グラフ最適化: CNN, relu, batchnormと3ステップ計算が頻出することを利用し、その計算をまとめた専用レイヤーを用意" 2020
  • Huggingface transformersモデルのONNX runtimeによる推論の高速化 - Retrieva TECH BLOG

    Chief Research Officerの西鳥羽 (Jiro Nishitoba (@jnishi) | Twitter) です。 今回はHugging Face TransformersのモデルのONNX runtimeで実行を試してみました。それにより特にCUDAでの実行では2.4倍近い高速化が行えました。 Hugging Face TransformersのモデルのONNX形式への変換方法から、ONNX runtimeでの実行も含めて紹介したいと思います。 ONNXとは ONNX形式への変換 ONNX形式に変換したモデルを用いて推論する ONNX形式のモデルからGPUでの推論 実験 まとめ ONNXとは ONNX とは、機械学習のモデルを表現するOpenなフォーマットです。機械学習を実現するフレームワークは数多くありますが、ONNX形式での出力をサポートしてるものも多数存在 *1

    Huggingface transformersモデルのONNX runtimeによる推論の高速化 - Retrieva TECH BLOG
    sh19910711
    sh19910711 2024/05/24
    "ONNX runtime: 推論処理の高速化も実現 + CUDAでの実行では2.4倍近い高速化 / Hugging Face Transformersには学習済みモデルをONNX形式に変換するツールがついています / onnxruntime-gpu をインストールした後は providers の指定が必須" 2022
  • PGOによるコンパイラ最適化 / Compiler Optimization with PGO

    Go1.13以後のエラーハンドリングについて語ろう / Let's talk about error handling after Go 1 13

    PGOによるコンパイラ最適化 / Compiler Optimization with PGO
    sh19910711
    sh19910711 2024/05/24
    "SSA: ASTからマシンコードに変換するまでの中間コード + go tool compile -d ssa/helpで詳細 / PGOによるコンパイラ最適化: CPUやRAMの利用状況、関数呼び出しの頻度などを収集し、次回のコンパイラ最適化にフィードバック" 2023
  • Redshift Serverless RPUスケールの挙動 - Qiita

    Redshift Serverlessを使用して気づいたポイントについて記す 思ったよりスケールしない Serverlessであり、負荷に応じて自動的にスケールするなら、Base RPUは8(最小値)で良いと考えて設定した。 しかし、実際にQueryを実行すると、非常に実行が遅く、実際に実行時のCloudwatchを見ると全くRPUがスケールしていないことがわかった。 この挙動が疑問に思えたため、以下の試行を行い、挙動を確認した。 (ちなみに試したのは2023年の3月なのでまた挙動は変わっている可能性もある) まず、十分な負荷のかかるようなデータとSQLを準備するのはそれ自体が工数がかかるので、AWSのブログで紹介されているTPC-DSベースのRedshift用のDWHベンチマークを使用することとした https://github.com/awslabs/amazon-redshift-u

    Redshift Serverless RPUスケールの挙動 - Qiita
    sh19910711
    sh19910711 2024/05/24
    "自動的にスケールするなら、Base RPUは8(最小値)で良いと考え / 非常に実行が遅く、実際に実行時のCloudwatchを見ると全くRPUがスケールしていないことがわかった / Cloud-DWB-Derived-from-TPCDS" 2023
  • #15 pd.DataFrame.corrより高速に相関行列を計算してみた

    TL; DRfrom scipy.spatial.distance import pdist from scipy.spatial.distance import squareform1 - squareform(pdist(df.T, 'correlation'))で df.corr() と同じ相関行列が計算できます。 背景機械学習などでは説明変数のカラム同士の多重共線性を考慮して相関が高いカラムの一方を削除するといった前処理がしばしば行われます (LightGBMなどの場合はあまり気にせずそのまま計算しちゃうこともありますが) このように相関行列を計算する時は、すでにデータをpd.DataFrameの形式で保存していることも多く、pandasの pd.DataFrame.corr を使うかなと思います。 しかし、 pd.DataFrame.corrはデータ数や説明変数の数が多いとやはり

    sh19910711
    sh19910711 2024/05/23
    "pd.DataFrame.corr: データ数や説明変数の数が多いとやはり次元の呪いの影響を受け計算コストが高くなりがち / pdist: metrics と呼ばれる引数があり 'correlation' を指定すると 1 — 相関係数を距離として上三角行列を計算" 2019
  • 小さなファイルが大きな問題を引き起こす

    原文: https://blog.cloudera.com/blog/2019/05/small-files-big-foils-addressing-the-associated-metadata-and-application-challenges/ 著者: Shashank Naik, Bhagya Gummalla 訳注: 稿は2019/5/9に公開されたブログ記事の翻訳です。 「スモール・ファイル」はApache Hadoopの世界では一般的な課題であり、注意して扱わないと、いくつかの複雑な問題を引き起こす可能性があります。Apache Hadoop分散ファイルシステム(HDFS)は、テラバイトからペタバイトの範囲にわたる、大きなデータセットを格納して処理するために開発されました。しかしHDFSはスモール・ファイルを効率的に格納しないため、スモール・ファイルによってNameNo

    小さなファイルが大きな問題を引き起こす
    sh19910711
    sh19910711 2024/05/22
    "スモール・ファイル: NameNodeのメモリ使用率とRPC呼び出しの効率が悪くなり、スキャンのスループットが低下 / Spark: 各パーティションは、デフォルトで1つのHDFSブロック / できる限りHDFSブロックサイズの倍数に近づける" 2019
  • ArmのScalable Matrix Extension (SME)を試す

    最近のCPUには行列乗算に役立つ命令が載っていることがあります。IntelのAdvanced Matrix Extensions (AMX)、AppleのAMX、IBM PowerのMatrix-Multiply Assist (MMA),そしてここで取り上げるArmのScalable Matrix Extension (SME)です。 SMEはここ数年(2021年ごろから?)話は聞きますが、実物の話は聞かないという状況でした(私の中では)。それが最近発表されたApple M4に実装されているという噂を聞いて、俄然興味が出てきました。Apple M4の実物は私は持っていませんが、QEMUを使うとSMEの動作確認ができるようです。やってみましょう。 環境構築とベクトル長 Ubuntu 24.04上のGCC 14/Clang 18とQEMU 8.2で動作確認します。Ubuntuはx86_64で

    ArmのScalable Matrix Extension (SME)を試す
    sh19910711
    sh19910711 2024/05/20
    "SME; Scalable Matrix Extension: 行列乗算に役立つ + 最近発表されたApple M4に実装されているという噂 + QEMUを使うとSMEの動作確認ができる / Macに搭載されれば個人のパソコンでSMEプログラミングができる"
  • tqdmでメモリリークにハマった話(機械学習) - Qiita

    事件 PytorchのResNetモデルを使って画像の訓練をしていたら、エポックのループ毎に、CPU / GPUメモリ両方の使用率がガンガン上がっていく事件に遭遇した。 解決方法(tqdmの使い方) tqdmは、進捗をプログレスバーで表示してくれる便利なライブラリだが、そこに落とし穴があった。 import tqdm # 訓練画像の data loader をループを回す for x in tqdm(loader): y = model(x)

    tqdmでメモリリークにハマった話(機械学習) - Qiita
    sh19910711
    sh19910711 2024/05/07
    "ResNetモデルを使って画像の訓練をしていたら、エポックのループ毎に、CPU/GPUメモリ両方の使用率がガンガン上がっていく事件 / enumerateでラッパーしてからtqdmを噛ませる" 2021
  • 小ネタ:Pytorch で Automatic Mixed Precision (AMP) の ON/OFF をするときの話 - 俵言

    最近気付いたのでメモ。長くなってしまったので、結論だけ見たい場合はまとめまで読み飛ばしてください。 まえおき NN を学習する際の GPU メモリの使用量軽減や学習速度の向上手段として混合精度学習(Mixed Precision Training) は欠かせません。pytorch では torch.cuda.amp モジュールを用いることでとてもお手軽に使うことが可能です。 以下は official docs に Typical Mixed Precision Training と題して載っている例ですが 、 model の forward と loss の計算を amp.autocast の with 文中で行い、loss の backward と optimizer の step に amp.GradScaler を介在させています*1。 # Creates model and opt

    小ネタ:Pytorch で Automatic Mixed Precision (AMP) の ON/OFF をするときの話 - 俵言
    sh19910711
    sh19910711 2024/05/05
    "混合精度学習: ちょっとの変更でGPU消費量が半分くらいになり計算速度も2倍ぐらいになる / 何も考えずおまじない的に autocast と GradScaler を書いていたのですがもっと早く docs を読むべきでした" 2021