Don
12월 4, 2024, 11:40오전
1
안녕하세요
ai embeddings model에 text-embedding-3-large를 사용하고 있는데 뭔가 문제가 있는 것 같습니다. (11월 30일) 이후로 OpenAI 계정에 두 번이나 충전을 해야 했거든요. 몇 달은 버텨야 할 것 같은데 말이죠… 이건 관련해서 뭔가 변경된 건가요? 이미 처리된 토픽을 계속 다시 백필하는 건지, 아니면 다른 이유인지는 모르겠습니다.
하루에 약 2,400만 개의 입력 토큰이 생성되고 있습니다.
(11월 30일) 이전에는 약 6만~22만 개였습니다.
2개의 좋아요
Falco
(Falco)
12월 4, 2024, 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
12월 4, 2024, 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)
12월 4, 2024, 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 Flemming)
12월 4, 2024, 4:22오후
6
제 계정을 확인해 봤습니다. 11월 27일에 비용이 급증하기 시작했는데, 그 전까지는 하루 10만 토큰 미만이었지만, 이후 700만 토큰으로 늘었고 매일 계속 증가하여 어제에는 2,000만 토큰에 근접했습니다.
수정: 10월에는 임베딩 비용이 46센트였습니다. 그런데 이제 12월, 며칠 안 됐는데 거의 6달러에 육박합니다.
네. 임베딩 기능을 비활성화했습니다.
2개의 좋아요
Falco
(Falco)
12월 4, 2024, 6:57오후
7
하루 2400만 건은 포럼 전체의 수치인데, 버그처럼 보입니다. 매일 모든 주제에서 업데이트가 들어오는 게 아니라면, 거의 확실하게 버그입니다.
1개의 좋아요
Falco
(Falco)
12월 4, 2024, 7:44오후
8
관련이 있을 수 있는 한 가지 사항은, 주제 다이제스트가 변경되지 않았을 때 임베딩 API 호출을 건너뛰던 로직을 gen_bulk_reprensentations에서 되돌려 놓았다는 점입니다. @Roman
@Don , 하루에 임베딩 요청을 얼마나 많이 보내고 계신지 알고 계신가요?
2개의 좋아요
Jagster
(Jakke Flemming)
12월 4, 2024, 8:05오후
10
저는 돈(Don)은 아니지만, 제 API 요청 수가 80~100개에서 3,825개로 증가했습니다.
2개의 좋아요
Don
12월 4, 2024, 8:15오후
11
일반적으로 하루에 약 150~200건의 요청이 들어옵니다.
하지만 11월 말부터 요청 수가 증가했습니다.
1개의 좋아요
Roman
(Roman Rizzi)
12월 4, 2024, 8:51오후
12
정말 죄송합니다. 임베딩을 더 빠르게 백필하기 위해 추가한 새 코드에 버그가 있었습니다. 다음을 통해 수정되어야 합니다:
main ← bulk_embeddings_digest_check
merged 08:47PM - 04 Dec 24 UTC
정상적으로 돌아오지 않는다면 알려주세요.
6개의 좋아요
Falco
(Falco)
12월 4, 2024, 8:59오후
13
Don:
시간당 250회라는 제한에 따라, 일일 최대 한도는 6,000회입니다. 이 수치는 여전히 한도 범위 내에 있습니다.
그러나 이 요청들이 우리의 “무작위 샘플 업데이트” 기능에 의해 트리거되는 것이라면, 해당 한도의 10%로 제한되어야 하며, 최악의 경우에도 600회 요청이 되어야 합니다.
@Roman 이 한도가 여기서 어떤 이유로 적용되지 않고 있는 건가요? 아니면 문제가 다른 곳에 있는 건가요?
https://github.com/discourse/discourse-ai/blob/main/app/jobs/scheduled/embeddings_backfill.rb#L52-L58
1개의 좋아요
Roman
(Roman Rizzi)
12월 4, 2024, 9:09오후
14
네, 제가 수정한 버그가 다이제스트 체크가 가려두었던 다른 버그를 드러낸 것 같습니다.
버그는 여기 있는 것 같습니다:
https://github.com/discourse/discourse-ai/blob/main/app/jobs/scheduled/embeddings_backfill.rb#L79
지난주에 find_each를 find_in_batches로 변경했습니다(전자는 내부적으로 배치 처리를 사용하며). 두 메서드 모두 limit을 사용해 배치 크기를 지정하기 때문에, 원래의 limit - rebaked limit이 무시됩니다. 대신 pluck + each_slice를 사용해야 합니다.
4개의 좋아요
Don
12월 4, 2024, 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)
12월 4, 2024, 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
12월 5, 2024, 12:02오전
17
콘솔에 truet?가 반환되었고, /logs에는 아무것도 없었습니다.
1시간 전에 계정에 다시 충전을 했으니, 아마도 OpanAI 측의 지연 때문인 것 같습니다. 이 과정이 즉각적으로 처리되지 않을 수도 있겠네요…
Roman
(Roman Rizzi)
12월 5, 2024, 1:00오전
18
즉, 임베딩을 생성할 수 있다는 뜻입니다. 이러한 오류가 계속 발생합니까? 그렇다면 5분마다 이러한 오류가 표시되어야 합니다.
자체 호스팅된 임베딩 서비스에 대해 로컬 인스턴스에서 몇 가지 테스트를 수행했으며, 다음 조건에서 백필링이 정상적으로 작동하는 것을 확인했습니다:
임베딩이 없는 경우.
다이제스트가 오래되었고 임베딩의 updated_at이 6시간보다 이전인 경우.
다이제스트가 최신 상태이고 임베딩의 updated_at이 6시간보다 이전인 경우 (이 경우 업데이트되지 않음).
1개의 좋아요
Don
12월 5, 2024, 6:21오전
19
Roman Rizzi:
이 에러들이 여전히 발생하나요?
아니요, /logs에서 더 이상 그 에러들을 볼 수 없고, 지금은 모든 것이 정상적으로 작동합니다. 감사합니다
1개의 좋아요
Falco
(Falco)
12월 5, 2024, 7:12오후
21
Don:
사이트를 업데이트했습니다
5시간 전에 다른 수정 사항이 병합되었으니, 다시 업데이트해 주세요.
main ← embedding_backfill_limit
merged 01:31PM - 05 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 Flemming)
12월 5, 2024, 7:16오후
22
한도 관련해서는 잘 모르겠지만, 앞서 적용한 수정 이후 API 요청 횟수 등이 정상 수준으로 돌아왔습니다. 빠른 대응해 주셔서 감사합니다.
2개의 좋아요