Don
2024 年 12 月 4 日午前 11:40
1
こんにちは
ai embeddings model に text-embedding-3-large を使用していますが、何か問題があるようです。 (11月30日) からすでに2回もOpenAIアカウントにチャージしなければならず、これは数ヶ月分のはずなので信じられません… 関連トピックで何か変更がありましたか? 既に完了したトピックを常にバックフィルしているのでしょうか、それとも分かりません。
1日あたり約2400万トークンが生成されます。
以前 (11月30日) は約6万〜22万トークンでした。
「いいね!」 2
Falco
(Falco)
2024 年 12 月 4 日午後 3:40
2
すべての埋め込み設定の値をお知らせください。
ai_embeddings_enabled
ai_embeddings_discourse_service_api_endpoint
ai_embeddings_discourse_service_api_endpoint_srv
ai_embeddings_discourse_service_api_key
ai_embeddings_model
ai_embeddings_per_post_enabled
ai_embeddings_generate_for_pms
ai_embeddings_semantic_related_topics_enabled
ai_embeddings_semantic_related_topics
ai_embeddings_semantic_related_include_closed_topics
ai_embeddings_backfill_batch_size
ai_embeddings_semantic_search_enabled
ai_embeddings_semantic_search_hyde_model
ai_embeddings_semantic_search_hyde_model_allowed_seeded_models
ai_embeddings_semantic_quick_search_enabled
「いいね!」 1
Don
2024 年 12 月 4 日午後 3:51
3
ai_embeddings_enabled: true
ai_embeddings_discourse_service_api_endpoint: ""
ai_embeddings_discourse_service_api_endpoint_srv: ""
ai_embeddings_discourse_service_api_key: ""
ai_embeddings_model: text-embedding-3-large
ai_embeddings_per_post_enabled: false
ai_embeddings_generate_for_pms: false
ai_embeddings_semantic_related_topics_enabled: true
ai_embeddings_semantic_related_topics: 5
ai_embeddings_semantic_related_include_closed_topics: true
ai_embeddings_backfill_batch_size: 250
ai_embeddings_semantic_search_enabled: true
ai_embeddings_semantic_search_hyde_model: Gemini 1.5 Flash
ai_embeddings_semantic_search_hyde_model_allowed_seeded_models: ""
ai_embeddings_semantic_quick_search_enabled: false
「いいね!」 1
Falco
(Falco)
2024 年 12 月 4 日午後 3:55
4
埋め込みは何個ありますか?
SELECT COUNT(*) FROM ai_topic_embeddings WHERE model_id = 7;
トピックは何個ありますか?
SELECT COUNT(*) FROM topics WHERE deleted_at IS NULL AND archetype = 'regular';
「いいね!」 1
Jagster
(Jakke Lehtonen)
2024 年 12 月 4 日午後 4:22
6
私のを確認しました。27.11に爆発し、それ以前は1日あたり10万トークン未満でしたが、その後700万に増加し、毎日増加しており、昨日は2000万近くでした。
編集:10月、埋め込みのコストは46セントでした。現在、12月は4日近くで6ドル近くです。
はい。埋め込みを無効にしました。
「いいね!」 2
Falco
(Falco)
2024 年 12 月 4 日午後 6:57
7
1日あたり24Mというのは、あなたのフォーラム全体ですか?バグがあるように見えます。毎日すべてのトピックで更新が行われない限り、それは間違いなくバグです。
「いいね!」 1
Falco
(Falco)
2024 年 12 月 4 日午後 7:44
8
トピックダイジェストが変わらない場合は、embeddings APIの呼び出しをスキップしていましたが、gen_bulk_reprensentationsでこれを後退させてしまいました。@Roman 。
@Donは 、1日に何件のembeddingsリクエストを行っているかご存知ですか?
「いいね!」 2
Jagster
(Jakke Lehtonen)
2024 年 12 月 4 日午後 8:05
10
ドンではありませんが、APIリクエストが80〜100から3825に増加しました。
「いいね!」 2
Roman
(Roman Rizzi)
2024 年 12 月 4 日午後 8:51
12
申し訳ありません。これは、埋め込みをより高速にバックフィルするために追加した新しいコードのバグでした。これは以下で修正されるはずです。
main ← bulk_embeddings_digest_check
opened 08:38PM - 04 Dec 24 UTC
状況が正常に戻らない場合は、お知らせください。
「いいね!」 6
Falco
(Falco)
2024 年 12 月 4 日午後 8:59
13
Don:
1時間あたり250件なので、1日あたり6,000件のハードリミットがあります。これらの数値はまだ制限内です。
しかし、トピックの「ランダムサンプルの更新」によってのみトリガーされている場合、それはその10%に制限されるはずであり、最悪の場合でも600リクエストになります。
@Roman 、この制限は適用されていないのでしょうか?それとも問題は別の場所にあるのでしょうか?
# Then, we'll try to backfill embeddings for topics that have outdated
# embeddings, be it model or strategy version
relation = topics.where(<<~SQL).limit(limit - rebaked)
#{table_name}.model_version < #{vector_def.version}
OR
#{table_name}.strategy_version < #{vector_def.strategy_version}
「いいね!」 1
Roman
(Roman Rizzi)
2024 年 12 月 4 日午後 9:09
14
はい、修正したバグが、ダイジェストチェックが隠していた別のバグを明らかにしたと思います。
バグはここにあると思います。
.where("#{table_name}.updated_at < ?", 6.hours.ago)
.where("#{table_name}.updated_at < topics.updated_at")
.limit((limit - rebaked) / 10)
populate_topic_embeddings(vector, relation, force: true)
next unless SiteSetting.ai_embeddings_per_post_enabled
# Now for posts
table_name = DiscourseAi::Embeddings::Schema::POSTS_TABLE
posts_batch_size = 1000
posts =
Post
.joins(
"LEFT JOIN #{table_name} ON #{table_name}.post_id = posts.id AND #{table_name}.model_id = #{vector_def.id}",
)
.where(deleted_at: nil)
.where(post_type: Post.types[:regular])
# First, we'll try to backfill embeddings for posts that have none
先週、find_each を find_in_batches に変更しました(前者は内部でバッチを使用します)。どちらもバッチサイズを指定するために limit を使用しているため、元の limit - rebaked の limit は無視されます。代わりに pluck + each_slice を使用する必要があります。
「いいね!」 4
Don
2024 年 12 月 4 日午後 11:37
15
修正ありがとうございます
サイトを更新しましたが、/logs に問題があるようです。これに関連しているかどうかわかりません…
Message
Job exception: ERROR: invalid input syntax for type halfvec: "[NULL]"
LINE 2: ...1, 1, 'e358a54a79f71861a4ebd17ecebbad6932fc1f9a', '[NULL]', ...
^
Backtrace
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rack-mini-profiler-3.3.1/lib/patches/db/pg.rb:110:in `exec'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rack-mini-profiler-3.3.1/lib/patches/db/pg.rb:110:in `async_exec'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_sql-1.6.0/lib/mini_sql/postgres/connection.rb:217:in `run'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_sql-1.6.0/lib/mini_sql/active_record_postgres/connection.rb:38:in `block in run'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_sql-1.6.0/lib/mini_sql/active_record_postgres/connection.rb:34:in `block in with_lock'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2/lib/active_support/concurrency/null_lock.rb:9:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_sql-1.6.0/lib/mini_sql/active_record_postgres/connection.rb:34:in `with_lock'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_sql-1.6.0/lib/mini_sql/active_record_postgres/connection.rb:38:in `run'
/var/www/discourse/lib/mini_sql_multisite_connection.rb:109:in `run'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_sql-1.6.0/lib/mini_sql/postgres/connection.rb:196:in `exec'
/var/www/discourse/plugins/discourse-ai/lib/embeddings/vector_representations/base.rb:423:in `save_to_db'
/var/www/discourse/plugins/discourse-ai/lib/embeddings/vector_representations/base.rb:86:in `block in gen_bulk_reprensentations'
/var/www/discourse/plugins/discourse-ai/lib/embeddings/vector_representations/base.rb:86:in `each'
/var/www/discourse/plugins/discourse-ai/lib/embeddings/vector_representations/base.rb:86:in `gen_bulk_reprensentations'
/var/www/discourse/plugins/discourse-ai/app/jobs/scheduled/embeddings_backfill.rb:131:in `block in populate_topic_embeddings'
/var/www/discourse/plugins/discourse-ai/app/jobs/scheduled/embeddings_backfill.rb:130:in `each'
/var/www/discourse/plugins/discourse-ai/app/jobs/scheduled/embeddings_backfill.rb:130:in `each_slice'
/var/www/discourse/plugins/discourse-ai/app/jobs/scheduled/embeddings_backfill.rb:130:in `populate_topic_embeddings'
/var/www/discourse/plugins/discourse-ai/app/jobs/scheduled/embeddings_backfill.rb:36:in `execute'
/var/www/discourse/app/jobs/base.rb:308:in `block (2 levels) in perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management.rb:21:in `with_connection'
/var/www/discourse/app/jobs/base.rb:295:in `block in perform'
/var/www/discourse/app/jobs/base.rb:291:in `each'
/var/www/discourse/app/jobs/base.rb:291:in `perform'
/var/www/discourse/app/jobs/base.rb:362:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_scheduler-0.17.0/lib/mini_scheduler/manager.rb:137:in `process_queue'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_scheduler-0.17.0/lib/mini_scheduler/manager.rb:77:in `worker_loop'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_scheduler-0.17.0/lib/mini_scheduler/manager.rb:63:in `block (2 levels) in ensure_worker_threads'
「いいね!」 1
Roman
(Roman Rizzi)
2024 年 12 月 4 日午後 11:51
16
一見すると、関連がないように見えます。埋め込みの生成に失敗し、NULL を挿入しようとしているようです。OpenAI がエラーを返しているのでしょうか?割り当てに関連する何かでしょうか?
コンソールからこれを実行していただけますか?
DiscourseAi::Embeddings::VectorRepresentations::Base
.find_representation(SiteSetting.ai_embeddings_model)
.new(DiscourseAi::Embeddings::Strategies::Truncation.new)
.vector_from("this is a test")
.present?
エラーが発生した場合、Net::HTTPBadResponse が発生するとログに記録されるはずです。
「いいね!」 1
Don
2024 年 12 月 5 日午前 12:02
17
コンソールで truet? と入力しましたが、/logs には何も表示されませんでした。
おそらく、OpenAIからの遅延でしょう。1時間前にアカウントにチャージしたばかりで、この処理は即時ではないと思われます…
Roman
(Roman Rizzi)
2024 年 12 月 5 日午前 1:00
18
つまり、埋め込みを生成できるということですね。これらのエラーは継続していますか?もしそうなら、5分ごとにこれらのエラーが表示されるはずです。
ローカルインスタンスでセルフホストの埋め込みサービスに対してテストを実行し、バックフィリングが以下の条件下で機能することを確認しました。
埋め込みが存在しない。
ダイジェストが古い場合、および埋め込みの updated_at が6時間より古い場合。
ダイジェストが古くない場合、および埋め込みの updated_at が6時間より古い場合(この場合は更新されません)。
「いいね!」 1
Don
2024 年 12 月 5 日午前 6:21
19
Roman Rizzi:
これらのエラーはまだ発生していますか?
いいえ、/logs でこれらのエラーはもう表示されず、すべて正常に動作しています。ありがとうございます
「いいね!」 1
Falco
(Falco)
2024 年 12 月 5 日午後 7:12
21
Don:
サイトを更新しました
5時間前に別の修正をマージしました。再度更新してください。
main ← embedding_backfill_limit
opened 09:30PM - 04 Dec 24 UTC
I'm trying to solve two issues here:
1. Using `find_in_batches` or `find_each… ` will ignore the limit because it relies on it to specify a batch size.
2. We need to individually apply the limit on each step since `rebaked` gets bigger every time we process a batch.
その後、レートがどうなっているか教えてください。
cc @Jagster 。
「いいね!」 2
Jagster
(Jakke Lehtonen)
2024 年 12 月 5 日午後 7:16
22
APIリクエスト数などの制限については何も知りませんが、以前の修正後、通常に戻りました。迅速な対応をありがとうございました。
「いいね!」 2