gunicorn

Gunicorn max_requests / max_requests_jitter Gunicornでメモリリークを避けるために子プロセスを定期的に再起動するには、max_requestsとmax_requests_jitterの設定を利用するのが効果的です。これにより、一定のリクエスト数を処理した後にワーカープロセスが自動的に再起動されます。 以下はその設定方法です: max_requests: 各ワーカープロセスが再起動される前に処理するリクエストの最大数を指定します。 max_requests_jitter: 再起動のタイミングをランダム化するためのオプションです。これにより、全てのワーカープロセスが同時に再起動されるのを防ぎます。 Gunicornの設定ファイル(例:gunicorn.conf.py)に以下のように追加します: 1 2 3 4 # gunicorn.conf.py max_requests = 1000 # 1000リクエストごとに再起動 max_requests_jitter = 50 # 再起動タイミングをランダム化 または、コマンドラインで起動する際にオプションとして指定することもできます: 1 gunicorn --max-requests 1000 --max-requests-jitter 50 myapp:app これにより、各ワーカープロセスは1000回のリクエストを処理した後、ランダムに最大50回のリクエストを追加で処理してから再起動されます¹(https://qiita.com/ryu22e/items/2668a2243a5191bcdc78)²(https://zenn.dev/xknzw/articles/d2d337ae2f8966)³(https://qiita.com/_konishi_/items/1dc2bbfc386f57d06934)。 この設定により、メモリリークの影響を最小限に抑えつつ、サービスの安定性を保つことができます。 ¹(https://qiita.com/ryu22e/items/2668a2243a5191bcdc78): gunicorn(>=19.2)ではmax_requestsと一緒にmax_requests_jitterも使おう - Qiita ²(https://zenn.dev/xknzw/articles/d2d337ae2f8966): gunicorn syncワーカーの全体像メモ - Zenn ³(https://qiita.com/_konishi_/items/1dc2bbfc386f57d06934): gunicornでディスク使用量が増え続ける現象への対処 - Qiita (1) gunicorn(>=19.2)ではmax_requestsと一緒にmax_requests_jitterも使おう. https://qiita.com/ryu22e/items/2668a2243a5191bcdc78. (2) gunicorn syncワーカーの全体像メモ - Zenn. https://zenn.dev/xknzw/articles/d2d337ae2f8966. (3) gunicornでディスク使用量が増え続ける現象への対処 - Qiita. https://qiita.com/_konishi_/items/1dc2bbfc386f57d06934.

2024年10月11日 · 1 分

ltsv

ltsv ltsv から csvに変換 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 #!/usr/bin/env python import click import pandas as pd import csv import re @click.group() @click.option("--tf_output", "-to", default=None) @click.pass_context def group(ctx, tf_output): pass @group.command() @click.argument("src") @click.pass_context def ltsv2csv(ctx, src): """LTSV to CSV""" output = f"{src}.csv" def get_line_dict(line): return dict(re.search(r"^([^\:]+)\:(.*)$", i).groups() for i in line) with open(src) as f: data = pd.DataFrame(map(get_line_dict, csv.reader(f, delimiter="\t"))) data.to_csv(output, index=False) if __name__ == "__main__": group()

2024年10月11日 · 1 分

DSpy

DSPy (Declarative Sequencing for Python) https://dspy-docs.vercel.app/ (Programming—not prompting—Language Models) DSPyについて DSPyは、LMプロンプトとウェイトをアルゴリズム的に最適化するためのフレームワークです、 特にLMがパイプライン内で1回以上使用される場合。 LMを使用して複雑なシステムを構築する なし DSPy、あなたは一般的に次のことを行う必要があります: (1)問題をステップに分解する、 (2)各ステップが個別にうまく機能するまでLMをうまく促す、 (3)ステップを微調整してうまく連携する、 (4)合成例を生成する各ステップを調整し、 (5)これらの例を使用して、より小さなLMを調整してコストを削減します。 現在、これは困難で厄介です。パイプライン、LM、またはデータを変更するたびに、すべてのプロンプト(または微調整手順)を変更する必要がある場合があります。 これをより体系的ではるかに強力にするために、 DSPy 2つのことを行います。 まず、プログラムの流れを分離します(modules)各ステップのパラメーター(LMプロンプトとウェイト)から。 第二に、 DSPy 新しい optimizers、これは、LMコールのプロンプトやウェイトを調整できるLM駆動アルゴリズムです。metric 最大化したい。 DSPy のような強力なモデルを日常的に教えることができます GPT-3.5 または GPT-4 と地元のモデル T5-base または Llama2-13b タスクではるかに信頼性が高くなること、つまり、より高い品質を持つこと、および/または特定の障害パターンを回避すること。 DSPy オプティマイザーは 同じ プログラム 異なる 各LMの指示、ショットの少ないプロンプト、および/またはウェイトの更新(finetunes)。 これは、LMとそのプロンプトが、データから学習できるより大きなシステムの最適化可能な部分としてバックグラウンドにフェードインする新しいパラダイムです。 tldr; LMでハードタスクを解決するためのプロンプトが少なく、スコアが高く、より体系的なアプローチ。 ニューラルネットワークへのアナロジー ニューラルネットワークを構築するときは、マニュアルを書きません for-loops 以上のリスト 手調整 フロート。代わりに、次のようなフレームワークを使用できます PyTorch レイヤーを作成する(例: Convolution または Dropout)0次に、オプティマイザー(SGDやAdamなど)を使用して、ネットワークのパラメーターを学習します。 同上!DSPy 適切な汎用モジュールを提供します (例: ChainOfThought、 ReAct等)、文字列ベースのプロンプトトリックを置き換えます。 迅速なハッキングと1回限りの合成データジェネレーターを置き換えるには、 DSPy 一般的なオプティマイザーも提供します(BootstrapFewShotWithRandomSearch または MIPRO)、 これはプログラムのパラメーターを更新するアルゴリズムです。 コード、データ、アサーション、またはメトリックを変更するときはいつでも、 コンパイル あなたのプログラムをもう一度 DSPy 変更に適合する新しい効果的なプロンプトを作成します。 ...

2024年10月4日 · 1 分

Python: DOM

Python: DOM lxml Recommended way to generate XHTML documents with lxml etree 1 2 3 4 5 6 7 8 9 10 11 12 13 14 from lxml import etree # ルート要素を作成 html = etree.Element("html") body = etree.SubElement(html, "body") h1 = etree.SubElement(body, "h1") h1.text = "タイトル" p = etree.SubElement(body, "p") p.text = "これは段落です。" # HTMLを文字列として取得 html_string = etree.tostring(html, pretty_print=True, encoding='unicode') print(html_string) cssutils cssutilsを使ってゼロからCSSを構成するのは比較的簡単です。以下の手順でCSSスタイルシートを作成し、ルールを追加することができます。 ...

2024年9月10日 · 1 分

Python: 文字烈ケース変換

Python 文字列ケース変換 Camel Elegant Python function to convert CamelCase to snake_case? 1 2 3 4 5 import re name = 'CamelCaseName' name = re.sub(r'(?<!^)(?=[A-Z])', '_', name).lower() print(name) # camel_case_name

2024年9月6日 · 1 分

メモ

メモ Rye 【Python】Rye で始める Python プロジェクト Python パッケージ管理ツール比較: Poetry vs Pipenv vs Rye https://rye.astral.sh/ Contentful : Organization は削除できない 管理者の最後のアカウントが削除されたら削除できる AWS Secret Manager: 再作成 このエラーは、Secrets Manager がシークレットを直ちに削除せず、復旧期間(通常 7 日間)を設けているために発生します。この期間中は同じ名前のシークレットを再作成することができません ¹。 ただし、AWS CLI を使用して、復旧期間を設けずにシークレットを完全に削除することが可能です。以下の手順を試してみてください: 削除予定のシークレット ID を取得: AWS Secrets Manager コンソールを開きます。 ナビゲーションペインで「Secrets」を選択します。 「設定」アイコンを選択し、「詳細設定」で「削除予定のシークレットを表示」を選択します。 「Secrets」ペインで、削除予定のシークレットの ID を確認します。 AWS CLI を使用してシークレットを完全に削除: 以下のコマンドを実行します(your-secret-nameをシークレット ID または ARN に、your-regionを AWS リージョンに置き換えてください): 1 aws secretsmanager delete-secret --secret-id your-secret-name --force-delete-without-recovery --region your-region 削除が完了したことを確認: 以下のコマンドを実行して、シークレットが完全に削除されたことを確認します: 1 aws secretsmanager describe-secret --secret-id your-secret-name --region your-region 「Secrets Manager can’t find the specified secret」というエラーが表示されれば、シークレットは正常に削除されています。 これで、同じ名前のシークレットを再作成できるようになります ¹。 ...

2024年8月1日 · 6 分

PGVector

PGVector ニューラルネットワークの知識の蒸留 distilling the knowledge in a neural networkPGVector (Postgres) Rails/PostgreSQL/pgvector を組み合わせてベクトル検索をする。 https://github.com/yassun/sample-pgvector https://hub.docker.com/r/pgvector/pgvector https://github.com/pgvector/pgvector-python LangChain と pgvector(Postgres)を用いて関連性の高いドキュメントを手軽に検索する 生成 AI でテキスト分類やってみた SentenceTransformer Python の SentenceTransformer を用いた文章類似度比較 sentence transformers で日本語を扱えるモデルのまとめ transformers 多言語モデル中の日本語語彙調査 知識蒸留 ニューラルネットワークの知識の蒸留 distilling the knowledge in a neural network 知識蒸留で効果的な教師の条件とは? 教師データとは?学習データとの違いや作り方をわかりやすく紹介 ディープラーニングを軽量化する「モデル圧縮」3手法 MUSE Muse: Text-To-Image Generation via Masked Generative Transformers を読んだメモ

2024年7月31日 · 1 分

Python asyncio

asyncio async/await 構文を利用して並行処理を行う シングルスレッドで動作する並行処理のためのライブラリ コルーチン定義関数(Coroutine function definition) 8.9.1. コルーチン関数定義 コルーチン定義関数は コルーチンオブジェクトを返す。 (ジェネレータベースの)コルーチン(yield) 単純な関数呼び出しによるサブルーチンとは異なり、呼び出し元と呼び出し先を行ったり来たりするような関係性のルーチン ジェネレータを利用してコルーチンを実装する(yield) 『コルーチンは処理を中断した後、続きから処理を再開できる』= ジェネレータは処理を中断・再開できるので、コルーチンであると言える send 呼び出しもとからデータ可能 native coroutine(async) async の付いている関数定義は、generator と同じように、呼び出しをしても直ちに実行はされない関数 await で実行終了を待つ 非同期ジェネレータ(AsyncGenerator) async generator 通常のジェネレータと違って非同期ジェネレータはジェネレータ関数自体の戻り値を返すことはできません asend : 非同期ジェネレータでも呼び出し元から、ジェネレータ関数に値を通知することができます 資料 Python で学ぶ、コルーチンと非同期処理 図解「generator・native coroutine・with」 〜 関心やコードを分離する文法と、処理順序・構造

2024年7月31日 · 1 分

Server Sent Events

SSE MDN: サーバー送信イベントの使用 python で SSE (server side events) の例を作ってみて遊んでみた Server-Sent Events と WebSocket の簡単な実装例

2024年7月24日 · 1 分

FastAPI

FastAPI FastAPI入門 FastAPI を用いた API 開発テンプレート 【FastAPI】Uvicorn と Gunicorn、WSGI と ASGI、ワーカープロセスについて実施コマンドと共に解説 Hypercorn+FastAPI のコンテナイメージを作成してみる Hypercorn Django を Hypercorn とともに使う How to deploy any Python Web Application? FastAPI を始める時のメモ(ボツ) How to serve HTTP 1, 2, and 3 in Python 1 poetry add fastapi hypercorn quart filters fastapi-filters: https://pypi.org/project/fastapi-filters/ https://fastapi-filter.netlify.app/ https://github.com/arthurio/fastapi-filter/tree/main その他: https://pypi.org/project/fastapi-query-tools/ モデルマッパー SQLModel(https://sqlmodel.tiangolo.com/) Database Migrations with sqlmodel and alembic FastAPI + SQLModel を使った簡単API開発をやってみた Pythonライブラリ(SQL):SQLModel(応用編-FastAPI) Pythonライブラリ(SQL):SQLModel Alembicでマイグレーション(FastAPI+SQLModel) FastAPI SQLModel 入門 https://github.com/Joichiro433/Blog-fastapi-todo/tree/main

2024年6月24日 · 1 分