axinc-ai / ailia-models

The collection of pre-trained, state-of-the-art AI models for ailia SDK
2.04k stars 325 forks source link

add fugumt-ja-en: #1192

Closed takumi2786 closed 1 year ago

takumi2786 commented 1 year ago

Issue

https://github.com/axinc-ai/ailia-models/issues/1159

作業内容

fugumt-ja-enのモデルを追加しています。

TODO

若干推論処理が冗長になっています:bow:

以下の箇所を修正するとより効率化できると思います。

takumi2786 commented 1 year ago

@kyakuno 遅くなってしまい申し訳ありません:bow:

fugumt-en-jaを参考に進めていたのですが、出力されるonnxの形式が異なる点などに苦戦してしまっていました。 日本語の翻訳が正常に動作することを確認できるところまで進みました。

(取り急ぎ、fugumt-en-jaで利用されていたbeam searchではなくgreedy searchを実装しています。)

takumi2786 commented 1 year ago
python fugumt-ja-en.py -i 近年、注目を集めている基盤モデルとは何かを解説します。基盤モデルを 使用することで、今までできなかったような高精度な認識が可能になってきています。

# translation_text: In recent years, we have explained what the base model has attracted attention, and by using the base model, it has become possible to realize high-precision recognition as previously impossible.
kyakuno commented 1 year ago

モデルファイルをアップロードしました。 https://storage.googleapis.com/ailia-models/fugumt/encoder_model.onnx https://storage.googleapis.com/ailia-models/fugumt/decoder_model_merged.onnx

kyakuno commented 1 year ago

実装、ありがとうございました!レビューコメントを記載させていただきました。

kyakuno commented 1 year ago

合わせて、下記へのモデル追加をお願いします。README.mdのailiaのバージョンは不記載で問題ありません。 https://github.com/axinc-ai/ailia-models/blob/master/README.md https://github.com/axinc-ai/ailia-models/blob/master/scripts/download_all_models.sh

kyakuno commented 1 year ago

ライセンスファイルは下記をコピーして追加してください。 https://github.com/axinc-ai/ailia-models/blob/master/natural_language_processing/fugumt-en-ja/LICENSE

takumi2786 commented 1 year ago

@kyakuno

再度遅れてしまい申し訳ありません:bow: 指摘していただいた項目に対応しました。

一点、onnxオプションをつけずに実行した場合に以下のエラーが発生するようで、おそらくdecoderのonnxが少し特殊な構造をしているためではないかと思っています。 ご確認お願いできますでしょうか。

 code: -7 (The internal state of the ailia is invalid.)
kyakuno commented 1 year ago

onnxruntimeでもWarningが出力されているため、onnxか入力Tensorに問題がありそうな気がしますね。

onnxruntimeのwarning

2023-08-29 13:18:47.285609 [E:onnxruntime:, sequential_executor.cc:514 ExecuteKernel] Non-zero status code returned while running If node. Name:'optimum::if' Status Message: Non-zero status code returned while running Reshape node. Name:'/model/decoder/layers.0/encoder_attn/Reshape_4' Status Message: /Users/runner/work/1/s/onnxruntime/core/providers/cpu/tensor/reshape_helper.h:26 onnxruntime::ReshapeHelper::ReshapeHelper(const onnxruntime::TensorShape &, onnxruntime::TensorShapeVector &, bool) i < input_shape.NumDimensions() was false. The dimension with value zero exceeds the dimension size of the input tensor.

ailiaのerror

ailia.core.AiliaInvalidStateException: code: -7 (The internal state of the ailia is invalid.)
+ error detail : Layer:/model/decoder/layers.0/encoder_attn/MatMul_output_0(MatMul) Error:This layer is not support inference with empty blobs.

ailia.core.AiliaInvalidLayerException: code: -10 (Incorrect node parameter. [broken or unsupported AI model file])
+ error detail : Layer:/model/decoder/layers.0/self_attn/Reshape_2_output_0(Reshape) Error:The input size doesn't match the output size (input_shape=(3,1,512) (stride:(512,512,1)), output_shape=(1,1,8,64) (stride:(512,512,64,1))).
kyakuno commented 1 year ago

netronで見ると、複雑なグラフになってしまっている気がしていまして、どのような手順でonnxに変換しましたでしょうか?

スクリーンショット 2023-08-29 13 21 59

kyakuno commented 1 year ago

下記と同じようなTransformersのソースコード修正をした上で、ONNX変換が必要そうです。 https://github.com/axinc-ai/ailia-models/issues/1039

takumi2786 commented 1 year ago

@kyakuno 確認ありがとうございます! 変換処理は以下に記載していました。 https://github.com/axinc-ai/ailia-models/issues/1159

はじめ https://github.com/axinc-ai/ailia-models/issues/1039 記載の方法を使っていたのですが、若干出力が変わっておりうまくいかず、一旦、hugging faceが推奨しているoptimum-cliを試していました。

再度https://github.com/axinc-ai/ailia-models/issues/1039の方法を試してみようかと思います:bow:

kyakuno commented 1 year ago

@ooe1123 こちらのissueの引き継ぎをお願いすることは可能でしょうか?サンプルは既存コードで問題なさそうですので、onnxへのエクスポートをお願いできないかと考えています。

kyakuno commented 1 year ago

モデルファイル更新済み。 https://storage.googleapis.com/ailia-models/fugumt/decoder_model.onnx https://storage.googleapis.com/ailia-models/fugumt/encoder_model.onnx

kyakuno commented 1 year ago
kyakuno@mbakk fugumt-ja-en % python3 fugumt-ja-en.py -i "これは高速なAI推論エン ジンです。" -e 0
 INFO arg_utils.py (13) : Start!
 INFO arg_utils.py (163) : env_id: 0
 INFO arg_utils.py (166) : CPU
 INFO model_utils.py (84) : ONNX file and Prototxt file are prepared!
 INFO model_utils.py (84) : ONNX file and Prototxt file are prepared!
/usr/local/lib/python3.11/site-packages/transformers/models/marian/tokenization_marian.py:194: UserWarning: Recommended: pip install sacremoses.
  warnings.warn("Recommended: pip install sacremoses.")
 INFO fugumt-ja-en.py (254) : input_text: これは高速なAI推論エンジンです。
 INFO fugumt-ja-en.py (258) : Start inference...
2023-10-29 10:48:22.119041: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.
To enable the following instructions: SSE4.1 SSE4.2, in other operations, rebuild TensorFlow with the appropriate compiler flags.
 INFO utils.py (160) : NumExpr defaulting to 8 threads.
 INFO fugumt-ja-en.py (276) : translation_text: This is a fast AI inference engine.
 INFO fugumt-ja-en.py (277) : Script finished successfully.
takumi2786 commented 1 year ago

すみません、ありがとうございます:bow: