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の画像が一番となります。その他は、もうできているので、その後パタパタと表示されました。
ちょっと、このあたりの出力ルールは、整理しておいたほうが後々いいかもしれません。
とりあえず、以上となります。
ちょいと、疲れました。