たれぱんのびぼーろく

わたしの備忘録、生物学とプログラミングが多いかも

ONNXの量子化: 手探りの進化なう

ONNXのquantization/量子化は手探りで進歩中.

負債の部

既に進化の歴史っぽい負債がある.
しばらくは残り続ける負債なのでメモ.

表現: QOp vs QDQ

ONNXのOperatorはint8を受け付けないのが大半 (しかしint64は受け付ける謎仕様).
int8のみを受け付けるQOperatorsがConvとMatMulにだけ用意されている.

じゃあ他の演算はどうするんだよという話に当然なったと思われ、現在はQDQ (fake quant) による表現が主流.
「QLinearとDQLinearはopsとして定義されてるからそれ使ってweightとactivationの量子化をしよう、DQ-op-Qがあればそれはランタイム側で (最適化likeに) 一括int8演算しちゃえばいいよね」というやり口.
ORT的にはQDQフォーマットに寄せる意向の模様 (QDQ限定の最適化があり、QOp形式にwarning出す場面があったりする).

とはいえ、Quant時の振る舞いが複数パターンあり得る演算子もある (例: LSTMはどこをどう量子化するのか).
QDQで挟んでもそれは一意に決まらず、QDQにフラグを持たせるのはお門違いなので、結局QOpが必要になってくる.

ORTのquantize関数はQOpとQDQの内部パスが分かれていて辛そう.

ソフトウェアのビジネス特性

コピー容易性とコアコンピテンシー

  • コピーが容易
    • コードがあれば0コストでコピペ可
    • 原材料が不要なので振る舞いが理解できればトレース可能
    • 加工機も不要なので振る舞いが理解できればトレース可能

なのでパテントで守らない限り、製品そのものをコアコンピテンシーとするのが著しく難しい.

良いソフトウェアを産む環境

原材料も加工プロセスも重要度が低い.
なのに「しょっちゅう良いサービスを出す会社」が実在してる.
何が差を生んでいるのか -> 人
人の何が差を生んでいるのか -> 発想力と実行力

ネガティブなリスク検証結果をBと呼ぶ

最終目標に直結するリスクの検証は、検証結果が出ることに価値がある.
仮説が受け入れられても棄却されても同じだけの価値がある (成功).
だけど仮説棄却を「失敗」と呼ぶせいで、リスクを小さくしたがるバイアスがかかってしまう.
研究やってきた人間ですら「棄却率50%が理想的」になかなか辿り着けない.

なのでポジティブな結果を「A」、ネガティブな結果を「B」と呼ぶ.
「AかBかはっきりする」ことがリスク検証の成功定義.
「なんか試したけどAかBかはっきりしない」がリスク検証の失敗.

解説: OpenVINO Model Zoo WaveRNN(composite)

OpenVINO Model Zooにある wavernn (composite) というモデルの解説.

概要

mel2waveのWaveRNN Vocoder1.
fatchordタイプ、すなわちResNetベースのPreNetをもちMoLパラメータを出力する.
fatchordのLJSpeech学習済みモデル(ljspeech.wavernn.mol.800k.zip)をONNX形式で配布2,3.
wavernn_upsampler.onnxwavernn_rnn.onnx に分割されているのでcomposite4.

コード

ONNXの再現手順が書かれており、以下がソースとなるコード群.


  1. “WaveRNN performs waveform regression from mel-spectrogram.” from the model zoo

  2. “The model was trained on LJSpeech dataset” from the model zoo

  3. “We provide pre-trained models in ONNX format for user convenience.” from the model zoo

  4. “the model is divided into two parts: wavernn_upsampler.onnx, wavernn_rnn.onnx.” from the model zoo

私企業の経営目的: それぞれ

私企業の経営目的はそれぞれ違う。自然人の目的はそれぞれ違う、だから私法人の目的もそれぞれ違っていい。

社会革新を望む企業もあれば、株主の金銭利益を最大化したい企業もあれば、顧客をひたすら喜ばせたい企業もある。

「目的が曲がってるからうまくいかないんだ」は論理が破綻している。目的を達成するために、必死で上手くいく方法論を探って実施する。
「利益を目的にするからうまくいかないんだ、顧客満足こそが目的であるべき」は論理が破綻してる。ゴールポストを動かそうとしてる。「利益を目的にする。そのために顧客満足の最大化を手段として選ぶと上手くいきやすい」が正しい。
私企業の「正しい目的」を押し付けるのはあまりに傲慢 (パターナリズムにも見える)。

道具としての定義、内在特性による定義

両方大事.

戦争は政策の一種である (クラウゼヴィッツ)。ゆえに、道具としての戦争は、政治目標の達成を目的とした暴力の行使、と定義される。
それと同時に、戦争は拡大された決闘でもある。すなわち誇りをかけ敵を打破せんとする試みである。

戦争が理想的に運用されれば、政治目的を達成するために双方最小限の流血で済む。しかし、現実には憎しみに駆られ目標が歪み、殲滅戦がしばしば起こる。これは戦争行為が決闘という性質を内在しているからである。どんな目標のために始めようとも、戦争を始めてしまったらその特性に目的がひっぱられてしまう。

なので外的目的と内的特性の両面から物事を定義するのは大事.