見出し画像

Dify v0.8.0のパラレル実行の検証---複数の画像生成ツールを並列で描画させてみました、、簡単だった、、

はじめに

Discordの情報によると、昨日、9月10日18:31に、Dify v0.8.0をリリース、とのアナウンスがでていました。ただ、この時点では、同ベータ1の扱いだったようです。Discord内で、インストール時のバグがあるので少し待ったほうが良い、というコメントがよせられていました。で、9月11日の朝には、同リリースということになっていました。

今回は、並列実行の導入と、RAG関連のNから1への検索を廃止、というのが特に大きな変更内容のようです。

経緯はこちらで見ることができます。

以下は、上記のコメントの日本語訳の引用です。

🔥 主な特徴

ワークフロー内のノードの並列実行

ノードはワークフロー内で並列に実行できるようになり、実行速度が大幅に向上しました。この機能は、複数のステップやプロセスを含む複雑なワークフローに特に役立ち、完了時間が短縮され、パフォーマンスが向上します。

詳細を詳しく調べて、これらの新機能の可能性を最大限に引き出しましょう。

注:次のブログ記事に使い方などが紹介されています。

注:ヘルプにも追記されています。

🚀 新機能

  • Azure OpenAIサービスのgpt-4o-2024-08-06サポート:json_schema Azure OpenAIの最新のGPT-4oモデルとJSONスキーマのサポート

  • Oracle Cloud Infrastructure Generative AI Serviceのサポート:オラクル・クラウド・インフラストラクチャは、現在サポートされているモデル・プロバイダーです。

  • Fish Audio TTSのサポート: Fish Audioのテキスト読み上げモデルのサポートを追加しました。

⚠️廃止予定の機能

  • Nから1への検索を廃止
    N 対 1 取得戦略はこのバージョンで正式に廃止され、その入り口は閉じられますが、この機能を選択したアプリケーションは引き続き保持されます。アプリケーションの取得効率を高めるために、より柔軟なマルチパス取得戦略に切り替えることをお勧めします。

⚙️ 機能強化

  • 公開ボタンをクリックした後、アプリの公開時間を更新: 公開ボタンをクリックした後、アプリの公開時間が正しく更新されるようになりました。

🛠️ バグ修正

  • Notionテーブル抽出の修正: Notionテーブルからデータを抽出する際の問題を修正

  • Nvidia Rerank Top Nの修正: Nvidia Rerank Top N機能の問題を修正しました。

  • Claudeの資格情報の検証を修正: Claudeの資格情報の検証の問題を解決しました。

今回のリリースはこれで終わりです。いつものように、皆様のフィードバックと貢献に感謝いたします。皆さんのために頑張ります!🚀


パラレル実行のトライアル

ということで、今回は、並列実行(Parallel Execution of Nodes in Workflows)について検証してみることにします。

前回、複数の画像生成ツールを検証するにあたって、質問分類器を使った疑似Case文機能で、振り分け画像を得るチャットフローを使いました。

これで、いちいちnodeをつなぎ治す手間などが省けたとはいえ、プロンプトを何度もコピペして実行させるのは、ちと面倒です。
そこで、プロンプトを開始ノードにいれて、それを各画像生成ツールにそれぞれ入力して、個別に出力させる。というフローを作ってみました。

シンプルです。

チャットフロー

ここで、気になったのは、
1.開始フローがちゃんと複数受け入れるか?(本当に使えるの??)
2.複数の回答ノードがあった場合、処理されるのか?(例示のワークフローでは、1つの回答ノードに集約していたので、、)
3.また、複数の回答結果の表示はどうなるのか?(最初のしか表示されないのでは??)

ということでした。まず、それらについて、実際に使ってみて検証してみたいと思います。

開始ノードの内容

開始ノードについては、ヘルプの説明のようにカーソルをあてると接続線がちゃんと複数でてきます。ただし、どうやら、画像生成ツールのあとに回答ノードが事前に接続されていると、開始ノードと画像生成ツールとが接続できないようでした。

一旦、回答ノード側の接続線を消去して、画像生成ツールをフリーにすると、開始ノードと接続できました。

開始ノードの内容はこのようになります。

赤枠で示したように、複数の画像生成ツールが接続されているのがわかります。

この後の、それぞれの画像生成ツール用のプロンプトは、オレンジの枠で囲んだ(x)sys.query に入力して使います。これは通常通りです。

プレビューの結果

これをプレビュー機能でデバッグすると、あっさりと4つの画像が表示されました。
こんな感じです。なお、下の画像は、画面サイズの都合で上下の一部が切れています。4つでた、ということだけは、わかるかと思います。

まずは、ほっとしました。複数の回答の結果は、集約されて出てきます。
この場合、回答ノードが4つなので4つでています。

各画像にツール名を表示させる

で、次にふと、どれがどのツールの画像だろう?と思いました。
前回の検証の結果で、ほぼ察しはつくのですが、確証はありません。

そこで、名前のフラグを立てることにしました。回答ノードに画像生成ツール名を追記しました。例を示します。

赤枠で囲んだように、ツール名を記載しました。

するとこのような出力となりました。

上の4行のツール名は、先程のフローの上から順番に並んでいます。
で、画像は、というと、、、各々ツール名と対応していません。
正しくは、おそらく、上からFlux, SD3(bySD)、Dall-E3です。

これは、タスクが投入されて出力された順番にでているのだろう、と推定しました。
つまり、まず、各ノード(ツール)が、表示された上から順次タスクとして投入されます。
さらにノード内では、1.各ツールの文字の出力、2.画像の表示
の順番に、タスクとして投入されます。
4つのノード(ツール)内の計8つのタスクが投入され、出力結果が順次表示されます。
文字の出力は速いので、まず、4つの文字列が順次出力されます。次に、画像ができた順番に出力されます。
従って、文字列のツール名の順番と、画像の順番とは対応していません。

各画像とツール名表示の改良

そこで、回答ノードを次のようにしました。

ツール名を画像出力の後にしました。
次の様な結果を得ました。

各ツール名(左下に記載)と各画像とがマッチングしています。

検証2として、フィオナのケースも示します。

こちらも、名称と画像が合致しているようです。

画像生成ツールにおいては、同一ツールによる複数画像の生成や、同一プロンプトによる多種のツールによる画像生成などが、極めて容易に実現できそうです。

また、ブログには、今回のシンプルな方法を含め、次のような記載があります。
単純な並列処理
ネスト化された並列処理
反復並列処理
条件付き並列処理

このように、本機能の応用は奥行きが深く、今後、アプリ化において様々な展開がありそうです。

フローの見直し

上で、終わろうと思って、改めて引用ブログのフローをみてみたら、、、
あれれ?
もしかして、一つの回答ノードに各出力をまとめればいいんじゃない?
と思いつき、、、やってみました。

できました。

チャットフロー その2

変数をまとめるには、変数アグリゲーターが必須だと思い込んでいました。アグリゲータだと、配列は受け付けないので、個別出力しないとダメだとも思い込んでいました。

こっちのスタイルの方が、今回の用途では、簡単だし、スッキリしてますね。

生成画像の例

Fluxは、同一シード値のため、鉄板の同じ画像です。

SDXL(SF)、右手が2本、、、

このフローの場合、デバッグ過程をみると、順次投入されたタスクは、それぞれ処理を開始します。そして、他のタスクは一番最初に投入されたタスクつまり、Dall-E3の画像の出力結果を待つようです。

このツール群の場合、大体において、Dall−E3またはSDXL(SF) が一番遅いようです。しかし、先に述べた理由から、表示は、先に投入されたDall-E3の画像が一番となります。その他は、もうできているので、その後パタパタと表示されました。

ちょっと、このあたりの出力ルールは、整理しておいたほうが後々いいかもしれません。

とりあえず、以上となります。
ちょいと、疲れました。



この記事が気に入ったらサポートをしてみませんか?