タグ

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

  • 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
  • 時系列データ/BRINインデックス対応 - KaiGaiの俺メモ

    PG-StromにBRINインデックス対応機能を実装してみた。 まずは、以下のEXPLAIN ANALYZEの実行結果をご覧いただきたい。 条件句で参照しているymd列は日付型(date)で、テーブルにデータを挿入する際には意図的に日付順にINSERTを行っている。 postgres=# EXPLAIN (analyze, buffers) SELECT * FROM dt WHERE ymd BETWEEN '2018-01-01' AND '2018-12-31' AND cat LIKE '%bbb%'; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------

    時系列データ/BRINインデックス対応 - KaiGaiの俺メモ
    sh19910711
    sh19910711 2024/04/29
    "B-treeインデックスは、インデックス対象列の値とレコード位置を各レコード毎に持っており + 大規模データの脇に大規模インデックスが控えている / 一方で、BRINインデックスのdt_ymd_idxのサイズは僅か128kBに留まって" 2018
  • Sparkで少サイズ大量データの課題にどう立ち向かう?|Puuuii

    日々ビッグデータと格闘しておられる私たちデータエンジニアにはなじみ深いSparkのの話です。 小サイズ&大量ファイルのデータを扱うことがなぜ苦手なのか、どう対処すればよいかを見てみましょう。 なぜ小サイズ&大量ファイルが苦手?Sparkは細切れのデータを扱うのがメモリ効率やパフォーマンスの面で苦手です。 具体的なサイズをいうと数KB~数MBだと悪影響が出てきますね。 なぜ細切れのファイルを扱いのが苦手なのかというと、ファイルを開いて・読んで・閉じる必要があるためです。 極端な話、ファイルがひとつだけであれば一度だけの開け閉めと読み取りでいいですから。 またタスクを平行で走らせるときのオーバーヘッドもファイル数に応じて大きくなっていきます。 さらにSparkのメモリ管理は大規模で連続したメモリ領域に特化していて、細切れのファイルだとメモリが枯渇してしまうんですよね。 どう対処する?第一に細切

    Sparkで少サイズ大量データの課題にどう立ち向かう?|Puuuii
    sh19910711
    sh19910711 2024/04/28
    "ファイル: 開いて・読んで・閉じる必要がある + オーバーヘッドもファイル数に応じて大きくなっていきます / 細切れになってしまったファイルは`hdfs dfs -getmerge`などを用いてより大きいファイルに融合するとよい"
  • Snowflakeにて大規模なテーブルのクエリ実行時間を高速化するためのマイクロパーティションという選択肢について

    テーブルに対して設定する場合は、複数の日付列を指定するのが良いと記載があります。この場合は日付列はTIMESTAMP型の場合はTO_DATEでキャストすることを推奨されています。 例えば、ファクトテーブルに、多くの離散値(テーブル内のマイクロパーティションの数よりも多く)を含む TIMESTAMP 列 c_timestamp がある場合、タイムスタンプではなく日付に値をキャストすることで、列にクラスタリングキーを定義できます(例: to_date(c_timestamp))。これにより、カーディナリティが合計日数に削減され、より優れたプルーニング結果が通常生成されます。 引用元:クラスタリングキーを選択するための戦略 費用 今回の例では、DATE列に指定した場合は約5クレジット、DATE列を含む4列に指定した場合は22クレジットの消費でした。 自動クラスタリング クラスタリングキーを設定し

    Snowflakeにて大規模なテーブルのクエリ実行時間を高速化するためのマイクロパーティションという選択肢について
    sh19910711
    sh19910711 2024/04/27
    "クラスタ化されたテーブルはSnowflakeが継続的に管理 / レコード数が多く、頻繁に参照され、あまりデータが更新されないようなテーブルに設定 / VARCHAR列に設定する場合は最初の5バイトのみ" 2023
  • AWS Glue での Spark のパフォーマンス (実行時間) を改善したい - クラウドエンジニアのノート

    はじめに 準備 データ 計測関数 CSV vs Parquet Parquet 参考 読み取り速度比較 データ作成 読み取り 読み取って Filter 処理した際の速度比較 データサイズ比較 csv gzip はどれくらい? まとめ Glue DynamicFrame vs Spark DataFrame データ読み取り速度比較 まとめ パーティション数の違いによる速度比較 準備 シャッフルが発生しない処理 シャッフルが発生する処理 まとめ Spark Join BroadCast Join まとめ キャッシュを使う キャッシュありなし比較 遅延評価? まとめ はじめに 最近 O'Reilly のLearning Spark 2nd Edition を読み始めました。 https://learning.oreilly.com/library/view/learning-spark-2nd/

    AWS Glue での Spark のパフォーマンス (実行時間) を改善したい - クラウドエンジニアのノート
    sh19910711
    sh19910711 2024/04/25
    "データ全体の読み取り速度は csv も parquet も変わらない / Filter 等を実行する場合 (Predicate Pushdown を使う場合) Parquet の方が読み取り早い / cache() や persist() は action ではなく transformation なので遅延評価" 2023
  • 何故Elasticsearchに32GB以上メモリ割り振るのはNGなのか - 動かざることバグの如し

    その理由を探るべく、我々はアマゾンの奥地へと向かった。 環境 少なくともElasticsearch 2以上はこの記事該当 概要 古事記にも書かれていたんじゃないかってレベルで、「Elasticsearchには32GB以上のメモリを割り当てるべきではない」とよく言われる。ESのオプション設定記事とか見てるとよく書かれている。 が、なぜ32GBなのか、Elasticsearchのヒープサイズに32GB以上を設定するとどうなってしまうのか。 そもそも当なのか 2020年11月15日現在の最新は7系だが、公式ドキュメントを確認してみる。 Important Elasticsearch configuration | Elasticsearch Reference [7.x] | Elastic Set Xmx and Xms to no more than the threshold that

    何故Elasticsearchに32GB以上メモリ割り振るのはNGなのか - 動かざることバグの如し
    sh19910711
    sh19910711 2024/04/25
    "「Elasticsearchには32GB以上のメモリを割り当てるべきではない」とよく言われる / その理由を探るべく、我々はアマゾンの奥地へと向かった / Javaには 圧縮オブジェクトポインター機能 + ヒープサイズが32GB未満が条件" 2020
  • Rustのゼロコスト抽象化の効果をアセンブラで確認

    これは Rust その3 Advent Calendar 2019 の24日目のエントリです。 Rustのゼロコスト抽象化が期待どおりに働いていることを、コンパイラが出力した機械語(アセンブリコード)で確認します。 ゼロコスト抽象化とは ゼロコスト抽象化(zero-cost abstraction)とは、Rustが持つ抽象化のしくみが実行時の追加コストなしに動作することです。 ここでいう追加コストとは、メモリ使用量の増加や実行速度の低下などの、いわゆるオーバーヘッドを指します。 では抽象化とはなんでしょうか? プログラミングにおける抽象化とは、共通な部分を抽出し、その詳細をブラックボックス化することです。 これにより仕様変更に強く、再利用性の高いソフトウェアを開発できます。 Rustが提供する抽象化のしくみには、たとえば以下のようなものがあります。 ポリモーフィズム:いくつかの型に共通する

    sh19910711
    sh19910711 2024/04/24
    "抽象化のしくみを使うと実行時のオーバーヘッドがかかる / Rustではこれらをできる限りコンパイル時に解決 / cargo rustcコマンド: --emit asmフラグでアセンブリコードの入ったファイルを生成" 2019
  • うわっ… 私のPytorch、メモリ食いすぎ…? 1行毎に使用GPUメモリを監視できるツールを紹介 - Qiita

    はじめに 深層学習のコードを書いている時、GPUメモリ不足エラーが起きたことはありませんか? でも実際どこでメモリを大量に消費しているか分からない... しょうがないからバッチサイズ減らそう...となってしまうことも多いと思います。 そこで今回はPytorchで どの演算でどれくらいのGPUメモリを使用しているか どのテンソル・パラメーターがどれくらいGPUメモリを使用しているか をお手軽にプロファイリングできるpytorch_memlabというモジュールを見つけたので、実際に使ってみようと思います。 なお、この記事はDLHacks LT にてお話しする内容になっています。 使い方 まずはお手軽pipでインストール from pytorch_memlab import profile class Net(nn.Module): def __init__(self): # 省略 @profi

    うわっ… 私のPytorch、メモリ食いすぎ…? 1行毎に使用GPUメモリを監視できるツールを紹介 - Qiita
    sh19910711
    sh19910711 2024/04/21
    "pytorch_memlab: どのテンソル・パラメーターがどれくらいGPUメモリを使用しているかをお手軽にプロファイリングできる / デコレータをつけると、~.pyの実行終了時にプロファイル結果を表示" 2019
  • DatabricksSQL パフォーマンス・チューニング Tips - Qiita

    はじめに この記事はこれまで実案件において実施したDatabricksSQLパフォーマンスチューニングの作業内容をベースに、実行クエリのボトルネック特定からパフォーマンス改善の手法について共通すると思われるTipsをベストプラクティスとしてまとめたものです。 DatabricksSQLの操作経験がある方を対象に記載しておりますため、DatabrickSQLの機能説明や用語解説及び設定コマンドの詳細等は割愛しておりますが、今回初めてDatabricksSQLをご検討される方でも理解いただけるよう、該当するDatabricksドキュメントリンクも併せて記載しておりますので適宜ご参照ください。 ※ドキュメントへのリンクはAzure Databricksのリンクを使用していますがAWS/CGP上のDatabricksでも同様の機能を提供しています。 DatabricksSQLとは Databric

    DatabricksSQL パフォーマンス・チューニング Tips - Qiita
    sh19910711
    sh19910711 2024/04/12
    "spark.sql.join.preferSortMergeJoin: データ量が大きい場合などでは常にソートマージプランが選択されやすい / spark.sql.shuffle.partitions: 値をautoに設定すると、自動最適化シャッフルが有効 + Sparkタスクが細分化される"
  • Rは本当に遅いのか?Juliaとの比較例 - Qiita

    このコードについて、twitter上で「Juliaなら数十秒で終わるのにRだとめっちゃ時間かかったんだろうな…」的な発言が流れてきたのを見かけて、当にそうなのか気になったので少し調べました。 そもそもRのループは遅いのか? たしかに、Rのforループが非常に遅いとされていた時代はありました。繰返し処理はなるべくベクトル化して書くべきものであって、forを書くというのは可能であれば避けるべき作法でした。 しかし、R 3.4.0からJITコンパイラが同梱されており、これがデフォルトでONになっている恩恵で、現代のRのforループの速度は相当に改善されています。場合によってはforを書いたほうが速度的に有利なことすらあります。 やってみる まあともかくやってみましょう。 実測とプロファイリング まず「そもそも元のコードがどれだけ時間がかかるのか」を確認しておくと、私の手元のちょっと古くなってき

    Rは本当に遅いのか?Juliaとの比較例 - Qiita
    sh19910711
    sh19910711 2024/04/12
    "R 3.4.0からJITコンパイラが同梱されており、これがデフォルトでONになっている恩恵で、現代のRのforループの速度は相当に改善されています / 詳しい方々の意見を参考に書き直したらJuliaのが3倍くらい早くなりました" 2019
  • DuckDBのクエリプロファイルなどを確認する - Qiita

    記事では、DuckDB を使ってオブジェクトストレージ上の Parquet ファイルに対してクエリを実行し、クエリプロファイルや I/O トレース情報などを確認します。 結果から先に述べておくと、 1テーブルスキャンの単純なクエリではプルーニング(絞り込み時に不要なデータの読み込みを回避)が効いている。 スタースキーマで良く行われる Join Filtering や Aggregation Pushdown などの最適化処理が効いていることを確認することはできなかった。 1. はじめに 1-1. DuckDB とは DuckDB は組み込み型の SQL OLAP データベースです。 SQL OLAP データベースは Snowflake や Amazon Redshift のように大量データを SQL 文により分析するための DB を指します。DuckDB もその点は Snowflake

    DuckDBのクエリプロファイルなどを確認する - Qiita
    sh19910711
    sh19910711 2024/04/03
    "DB を理解するにはアーキテクチャを押さえた上で実際にどう処理が行われるか確認するのが手っ取り早い / オブジェクトストレージへの I/O リクエストの情報を取得したかったため、今回は MinIO を利用" 2023
  • BigQuery の Execution Plan を体感&可視化で理解してパフォーマンスチューニングする - Qiita

    この記事では、BigQuery に搭載されている Query execution graphs を用いて、なんとなくクエリのパフォーマンスを最適化する方法を説明します。 ほとんどの項目が経験と憶測で書かれているので、あくまで参考程度にお願いします。 Query execution graphs とは Query execution graphs とは、BigQuery が SQL クエリを解釈して実行計画を作成する際に生成される内部表現です。Execution graphs は、クエリの各ステップをノードとして表し、ノード間のデータフローをエッジとして表します。また、グラフを見ることで、クエリの実行順序や依存関係、並列度やリソース消費などを把握することができます。 主に以下のようなノード(ステージ)があります。 Input: データセットからデータを読み込むノード。テーブルデータの統計情報

    BigQuery の Execution Plan を体感&可視化で理解してパフォーマンスチューニングする - Qiita
    sh19910711
    sh19910711 2024/01/25
    "クエリ実行グラフ: 横に広くノードの終端に向かってJOINで収束していく逆ピラミッドの方が一般的には好ましい / ステージ間の転送量に着目 / 複雑なクエリで処理が遅い場合、多くのJOINでレコード数が爆発している" / 2023
  • k6で負荷試験してpandasで集計した話 - Qiita

    はじめに この記事はHRBrain Advent Calendar 2022 カレンダー3の19日目の記事です。 こんにちは!株式会社HRBrainでエンジニアをしているZamaです。 みなさんは負荷試験してますか? 画面をポチポチする機能テストはちゃんとやっていても、負荷試験は忘れられていたり先送りにされてしまいがちですよね…… そんな負荷試験ですが、k6を用いて実施したら結果表示がイマイチだったので詳細なログファイルをpandasで集計した話です! k6とは k6は負荷試験のツールで、JavaScriptAPIの呼び出しなどを記述します。 import http from 'k6/http'; export default function () { const res = http.get('https://example.com'); check(res, { 'response

    k6で負荷試験してpandasで集計した話 - Qiita
    sh19910711
    sh19910711 2023/06/16
    "k6 Cloud: 複数台のEC2インスタンスから負荷をかけられたり、詳細でリッチに可視化された結果を確認できたり / --out csv=<ファイル名>とオプションを付けて実行すれば、詳細なログがCSVファイルに吐き出されます" / 2022
  • しつこくじわじわパフォーマンスチューニング

    TechFeed Experts Night 2022-06-07 登壇資料 Toshiaki Baba Twitter: @netmarkjp 株式会社X-Tech 5 取締役CTO https://x-tech5.co.jp/ 株式会社iCARE技術顧問(インフラ) https://dev.icare.jpn.com/tech_adv/

    しつこくじわじわパフォーマンスチューニング
    sh19910711
    sh19910711 2023/06/12
    "パフォーマンス問題は致命傷にならないと気づかない / よくわからないなら、まずはAPM / 目星をつける: ユーザー、カスタマーサクセス担当、プロダクトオーナーに聞くと「ここか!」というのが出てくることが多い"
  • Cloud Profilerを導入してパフォーマンス改善をした話

    こんにちは! Magic Momentでテックリードをしている Miyake です。 弊社が開発するセールスエンゲージメントプラットフォームである Magic Moment Playbook では営業活動にかかせないツールとの連携を多数を行っており、私が所属するData IntegrationチームではSalesforceなどのCRMツールを中心とした外部連携機能の開発をしています。 ただいまエンタープライズ企業のお客様が続々と増えており、取り扱うデータ規模が増大中です。それに応じて負荷対策や取り込み速度の性能改善などといったパフォーマンス改善に注力しておりまして、その過程で Cloud Profiler を利用したパフォーマンス改善の取り組みを行ったので、その内容をシェアしたいと思います。 Cloud Profiler とは Google Cloudマネージドなプロファイリングツールです

    Cloud Profilerを導入してパフォーマンス改善をした話
    sh19910711
    sh19910711 2023/02/27
    "Cloud Profiler: さくっとプロファイリングをして性能分析をしたい場合に便利 / 公式ドキュメントにプロファイルの見方が説明されており、フレームグラフの見方やパフォーマンスデータの評価の仕方などが記載"
  • 負荷試験ツールのk6が良さそう - rochefort's blog

    またもやisuconから。 前回はこちら(アクセスログの集計ツールのalpが良い )。 達人が教えるWebパフォーマンスチューニング 〜ISUCONから学ぶ高速化の実践 作者:藤原 俊一郎,馬場 俊彰,中西 建登,長野 雅広,金子 達哉,草野 翔技術評論社Amazon 負荷テストツールとしては、Apache JMeter、Apache Bench(ab)辺りをよく使っていましたが、 isuconで紹介されているk6の感触が良かったので、ご紹介です。 installationはmacだとbrewでサクッと入るので省略。 使い方 シナリオをjsで書いて、コマンドで実行するだけです。 書で紹介されていたab的な使い方だと、以下のような感じです。 import http from "k6/http"; const BASE_URL = "http://localhost"; expor

    負荷試験ツールのk6が良さそう - rochefort's blog
    sh19910711
    sh19910711 2023/01/21
    "負荷テストツールとしては、Apache JMeter、Apache Bench(ab)辺りをよく使っていましたが、 isucon本で紹介されているk6の感触が良かった / シナリオをjsで書いて、コマンドで実行するだけ"
  • SparkのWeb UIでJobのStageとExecutorによるTask分散、SQLのplanを確認する - sambaiz-net

    SparkのWeb UIでJobのStageとExecutorによるTask分散、SQLのplanを確認する Spark の Web UI は Job や Executor をモニタリングするためのツール。 aws-glue-samplesから maven:3.6-amazoncorretto-8 ベースでSparkを動かすDockerfileを持ってきて、 History Serverを起動する。Glue で出力された EventLog のパスと認証情報を渡している。 $ git clone https://github.com/aws-samples/aws-glue-samples.git $ cd aws-glue-samples/utilities/Spark_UI/glue-3_0/ $ docker build -t glue/sparkui:latest . $ docke

    SparkのWeb UIでJobのStageとExecutorによるTask分散、SQLのplanを確認する - sambaiz-net
    sh19910711
    sh19910711 2022/12/30
    2021 / "WholeStageCodeGenは高速化のため処理ごとではなくStage単位でCode Generationする処理。 ただ生成されるコードが大きいとJVMがJITコンパイルしなくなるのでかえって遅くなることもあるそうだ"
  • トラブルを解決できる人になろう - そーだいなるらくがき帳

    そんな想いを込めてこの特集記事を書きました。 自分が担当したところ バックエンドとデータベースの2つの章を担当しました。 バックエンドもデータベースもトラブルはISUCON9を題材にWebアプリケーションのトラブル、特にパフォーマンスチューニングについて話を書いています。 このに書いてあることは明日から使える実践的な内容になったと感じています。 これはISUCONの問題がとても実践的で現場に即した内容だからこそ。 だからISUCONを題材にすることを快諾していただいた @941 さん @catatsuy さんは感謝しています。 当にありがとうございます!!! このを読めば予選抜け出来るとは言わないけど何も出来なかった!ってことは無いんじゃないかなといえるくらいのHowは書いたつもりです。 これをきっかけに是非、ISUCON9の予選問題もチャレンジしてみてください。 isucon.ne

    トラブルを解決できる人になろう - そーだいなるらくがき帳
    sh19910711
    sh19910711 2022/11/26
    2020 / "WEB+DB PRESS Vol.116: ISUCON9を題材にWebアプリケーションのトラブル、特にパフォーマンスチューニングについて / 明日から使える実践的な内容になった / ISUCONの問題がとても実践的で現場に即した内容だからこそ"
  • MySQL Shellで診断データを収集する

    はじめに MySQL Shell 8.0.29からutil.debug.collectDiagnostics() を使用して、MySQL Serverから診断データを収集できるようになりました。 記事ではこちらの機能紹介を行います。なお、記事で使用しているMySQL Server及び、MySQL Shellのバージョンは8.0.30となります。 機能紹介 要件 util.debug.collectDiagnostics() を使用する際の要件と制限は以下となります。 MySQL5.7以降であること rootで実行すること 使用方法 オプションを使用せずに実行する場合は、以下のようにzipファイル名のみを指定します。 例: util.debug.collectDiagnostics("test") なお、ファイル名ではなくディレクトリを指定した場合は、指定したディレクトリにmysql-d

    MySQL Shellで診断データを収集する
    sh19910711
    sh19910711 2022/09/24
    "MySQL Shell 8.0.29からutil.debug.collectDiagnostics() を使用して、MySQL Serverから診断データを収集できる / 何かトラブルが発生した際に最初に確認したいようなデータが取得 / 収集用のクエリを個別に実行するよりも簡単"