0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Proxy下でDefault Embeddingsによるchroma run実行

Posted at

問題概要

Proxy内でus-api.i.posthog.comにアクセスできない環境である。chromadbをclient/serverモードで使用したくserverを

$ chroma run --path ./tmp/chroma

などして起動したところ、  

Backing off send_request(...) for 0.2s (requests.exceptions.ProxyError:
HTTPSConnectionPool(host='us-api.i.posthog.com', port=443): Max retries exceeded
with url: /batch/ (Caused by ProxyError('Unable to connect to proxy',
OSError('Tunnel connection failed: 403 Forbidden'))))

のようにエラーが出て、起動に失敗する。
これは、Chromadbがユーザー使用状況を測定するために、telemetryによる情報収集を実施しておりus-api.i.posthog.comにアクセスしに行くため。

背景情報

ネットワーク環境

  • proxy環境下でコンテンツフィルターがあり、us-api.i.posthog.comにアクセス禁止されている。

実行環境

  • Ubuntu
  • Python 3.12.3
  • chromadb.version 0.5.3
  • systemdで起動

解決策の概要

chromaをサーバーモードで実行する場合、telemetryをdisableにするオプションを指定できない。一部のサイトに記載されていた

import os
os.environ["POSTHOG_DISABLED"] = "1"

を参考に、

$ export POSTHOG_DISABLED=1

などとしてみたが、効果がなかった。
Chroma Docsに環境変数で

ANONYMIZED_TELEMETRY=False

とするように記載を発見。こっちは効果があることが分かった。
https://docs.trychroma.com/telemetry

そこで、systemdで起動するためのserviceファイルに環境変数を設定した。

手順

  • chromadb.serviceを修正
[Unit]
Description=Chromadb
After=syslog.target network.target

[Service]
User=root
WorkingDirectory=/opt/chromadb
Environment="PATH=/opt/chromadb/venv/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
Environment="ANONYMIZED_TELEMETRY=False"
ExecStart=/opt/chromadb/venv/bin/chroma run --host xxx.xxx.xxx.xxx --port xxx --path /opt/chromadb/models
Restart=always

[Install]
WantedBy=multi-user.target
  • chromadbサービスを停止
$ sudo systemctl stop chromadb
  • chromadb.serviceを更新し、chromadbをリスタート
$ sudo cp chromadb.service /etc/systemd/system/chromadb.service
$ sudo systemctl daemon-reload
$ sudo systemctl enable chromadb
$ sudo systemctl start chromadb

結果

telemetryが無効となり、us-api.i.posthog.comへのアクセスがなくなり、chromaが正常に起動した。

注意事項

  • chromadbのクライアントもProxy下ではうまく動作しないため、手当てが必要。こっちも解決済みなので別途説明予定。
  • サーバー側でEmbeddingsを計算すると思っていたら、クライアント側で実施し、サーバーはSQLite3でEmbeddingsとその他属性を蓄積するのが役割のようです。
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?