GENZITSU / UsefulMaterials

34 stars 0 forks source link

almost weekly useful materials - 06/28 - #135

Open GENZITSU opened 11 months ago

GENZITSU commented 11 months ago

Docker の healthcheck を初めて使った話

docker compose のdepends_onはコンテナの開始順序のみを制御し、実際にサービスが立ち上がるまで次のサービスの開始を待つわけではない

depends_on では、 web を開始する前に db と redis の「準備」が整うのを待ちません。単に、順番通り開始するだけです。サービスの準備が調うまで待つ必要がある場合、この問題を解決する方法は 開始順番の制御 をご覧ください。

これを解決するために、confitionとhealthcheckを用いて、サービスが問題なく立ち上がるまで起動を待たせるようにしたとのこと

# from https://zenn.dev/sun_asterisk/articles/b4b17681d08018

services:
  app:
    depends_on:
      mysql:
        condition: service_healthy   # here
    build: .
    volumes:
      - .:/opt/app/
    ports:
      - 80:3000

  mysql:
    image: mysql:8.0.32-oracle
    env_file:
      - ./.env
    ports:
      - 3306:3306
    healthcheck:   # here
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p$MYSQL_ROOT_PASSWORD"]
      interval: 30s
      timeout: 5s
      retries: 6
      start_period: 30s

volumes:
  mysql-store:

コメント

実際はここまで明確に開始順序を制御する必要なさそうな気もするけど、知っておいて損はなさそう

出典

GENZITSU commented 11 months ago

RWKV(Receptance Weighted Key Value)をつかってみた

RWKV-4-Pile-430Mをライブドアニュースコーパスでファインチューニングすることでニュースのタイトル生成を試みている記事

1epoch 2.5分を100epoch分回して以下のような結果にななったとのこと

学習データのサンプル

#学習データセットのサンプル例(筆者が作成した内容で実際のデータセットには含まれていません。)
# Instruction: 
以下は、あなたへの依頼事項です。次のニュースのタイトルを考えて,
# Input: 
【ロサンゼルス】近日公開予定のSFアクション映画『ABCD』が、観客を魅了する特殊効果と壮大なストーリー展開で話題を集めています。本作は、未来の地球を舞台にした壮大な冒険を描いた作品であり、映画ファンからの期待が高まって~(以下続く))
# Response:
新作SF映画『ABCD』、観客を魅了する特殊効果と壮大なストーリー展開```

```txt
タスク①
# Instruction:
以下は、あなたへの依頼事項です。次のニュースのタイトルを考えて
# Input:
株式会社ブレインパッドは、顧客一人ひとりに自然なアクションを促す、Web/アプリのコンテンツ最適化プラットフォーム「Rtoaster action+(アールトースター アクション・プラス)」のバージョンアップを実施し、施策の高度化・自動化を強化するレコメンデーション表示制御機能の提供を開始したことを発表いたします。 ■今回の主な新機能、バージョンアップの内容  ●レコメンデーション表示制御機能の強化  ●ABテスト機能の強化  企業のマーケティングにおいてパーソナライズされたコミュニケーションの重要性が増す中、デジタルチャネルにおいても顧客の状況・行動・属性に応じたきめ細やかな接客を実行することに対する期待が、さらに高まっています。
タスク②
# Instruction:
以下は、あなたへの依頼事項です。次のニュースのタイトルを考えて
# Input:
2022年4月1日(木)、ブレインパッドに、新卒社員数としては過去最多となる41名の仲間が入社しました! 実は、この数年の新卒入社者数は毎年「過去最多」を更新しているので、この冒頭の紹介文も定型になりつつあるのが嬉しい限りです。 ブレインパッドが新卒採用を始めた当初はデータサイエンティストだけだった募集コースも、今ではデータサイエンティスト、ビジネス、エンジニアの3コースに広がり、さまざまなバックグラウンドを持つ方々が入社してくれるようになりました。 それでは、今年入社した素敵な仲間達の様子を、入社式の写真と共にご紹介していきます。

タスク③
# Instruction:
以下は、あなたへの依頼事項です。次のニュースのタイトルを考えて
# Input:
野球チーム「ブレインパッド」のマルヤマ投手が「9番・投手」で先発出場し、投手としては5回を投げて被安打3、6奪三振・6四死球で3失点し3勝目を逃した。打者では3安打という活躍をみせ、チームの5連勝に大きく貢献した。投手としては粘りが光った。立ち上がりに制球を乱し、先頭打者に四球を与えると4番のサトウに2ランを被弾。5回に、四球と死球でピンチを招くと、3番フランスに同点タイムリーを許した。その後のピンチを併殺で切り抜け、6奪三振でリリーフ陣に後を託した。

ファインチューニング無し

タスク①
# Response: ----
レコメンデーション表示の強化、ブラウザー効率化の強化、そしてWeb/アプリのテストの提供が進められています。今後とも、次の取り組みを展開していきます。
# 関連情報
# 動画配信:http://www.younow.com/product/487813
# データベース内容:http://www.younow.com/product/487814
# ニュースサイト:http://www.younow.com/news/143084
# プラットフォーム情報:https://marketplace.bazaarvoice.com/item/4eae2b0c-5d6a-4f5c-b1d8-7bfb8d5dcf8f
# ステップインの新機能・動画配信:https://web.younow.com/action+plus/487814
# プ
タスク②
# Response: ----
本日の新卒採用者は、現在進学を控えています。彼らは、学生にも選ばれており、その場合は、新卒入社理由の過去について、考えたいことがあります。 1. 今年1月31日(木)から30日(日)に、現在の仲間過去最多の40名が新卒入社式で行われました。 今年2月に入社した新卒採用者のうち、3人以上は、自分たちが嫌な人だったことを明かしました。 2. 新卒採用者の数は、新卒採用者数の多くを通して、全体的に合計20人以上です。 この30名が「初めて」に入社した時には、このページで「初めての仲間過去最多」と記載されていることをご覧ください。

タスク③
# Response: ----
打者の指先に向かって、先制5球を振り回し、2球を投げて3球を倒し、5球を失った。5球を投げて、4球を投げて、4球を投げて3球を投げて5球を投げて3球を投げて3球を投げて3球を投げて3球を投げて3球を投げて3球を投げて3球を投げて3球を投げて3球を投げて3球を投げて3球を投げて3球を投げて3球を投げて3球を投げて3球を投げて3球を投げて3球を投げて3球を投げて三ロームで一致する。5回に加え、4回にもピンチ

ファインチューニング有り

タスク①
# Response: ----
パーソナルコミュニケーションの流行に共通する理由【デジ通】
タスク②
# Response: ----
今年の入社式をチェックしよう! 写真は過去1人撮影の様子!

タスク③
# Response: ----
【Sports Watch】マルセル・フランス球界に聞いてみた

かなり上手く行ってる気がする

コメント

430Mでこのクオリティなので、3B、7Bはもっといけるんだろうか

出典

GENZITSU commented 11 months ago

Python🐍でリファクタするならこうしてみよう集

表題の通り。ためになったところだけメモ

コメント

意外と知らないことが多かった。

出典

GENZITSU commented 10 months ago

【Stable Diffusion Web UI】RuntimeError: CUDA out of memory.が起こった場合の対処法

表題の通りで、モデルの学習を行っている時にも有効そうなのでメモ

以下を試してみると良いらしい

PYTORCH_CUDA_ALLOC_CONF=garbage_collection_threshold:0.6, max_split_size_mb:128

garbage_collection_thresholdとは? GPU メモリ容量の使用量がしきい値を超えた時(この場合は0.6=60%)、 GPUのメモリのブロックを再利用してくれる。

max_split_size_mbとは? ここで設定したサイズ(128MB)より大きなブロックを断片化するのを防いでくれるので、メモリ不足が原因で中断しにくくなる。

コメント

そもそも入り切らないような大きさのモデルに対しては無力だと思うものの、メモリギリギリの時やGPUへの転送→解放を繰り返すような時は有効かもしれない

出典

GENZITSU commented 10 months ago

[論文紹介]LLMを活用した説明性の高い画像分類フレームワーク「Classification by Description」を解説

モデルが予測したクラスに関する特徴的な要素(記述子)をGPT3にテキスト形式で教えてもらい、それらの要素をembeddingしたものと画像のembeddingを比較して説明可能性の高い分類を行う手法を提案した論文 @ ICLR2023

スクリーンショット 2023-06-22 9 56 30 スクリーンショット 2023-06-22 9 57 36 スクリーンショット 2023-06-22 9 59 19

課題としては、GPT3が視覚情報以外の記述子を吐き出してしまうことや一つカテゴリに対する記述子の重複、カテゴリ名自体の曖昧性などが挙げられる。

コメント

出典

GENZITSU commented 10 months ago

ChatGPTのfunction callingのGPT-3と4の相違点

スペイン語の英単語を使ってスペイン語の例文を考えもらういそれをxml形式で出力させるタスクをfunction callingを用いて実現し、GPT3.5とGPT4で性能比較をしている記事

結果

スクリーンショット 2023-06-23 9 46 50

スクリーンショット 2023-06-23 9 46 44

スクリーンショット 2023-06-23 9 47 51

コメント

# from https://github.com/openai/openai-cookbook/blob/main/examples/How_to_call_functions_with_chat_models.ipynb

# in this cell we force the model to use get_n_day_weather_forecast
messages = []
messages.append({"role": "system", "content": "Don't make assumptions about what values to plug into functions. Ask for clarification if a user request is ambiguous."})
messages.append({"role": "user", "content": "Give me a weather report for Toronto, Canada."})
chat_response = chat_completion_request(
    messages, functions=functions, function_call={"name": "get_n_day_weather_forecast"}
)
chat_response.json()["choices"][0]["message"]

出典

GENZITSU commented 10 months ago

DeepSpeed, vLLM, CTranslate2 で rinna 3.6b の生成速度を比較する

rinna/japanese-gpt-neox-3.6b-instruction-ppoに上記高速化ライブラリを適用し、生成速度や消費GPUの量をを比較している

結果

batch inferenceを行うかどうかで結果が少し異なるが、batch size=1ならCTranslate2が一番速い。 (ただしCTranslate2はint8にしているので生成品質が若干悪いとのこと、そのほかは全てfloat16)

スクリーンショット 2023-06-23 10 15 25

コメント

有益な比較だ

出典

GENZITSU commented 10 months ago

日本語T5 学習tips

NIIにて行われた第二回LLM勉強会におけるレトリバからの発表

以下要点のみ抜粋

スクリーンショット 2023-06-23 13 46 42

モデルによって得手不得手がある

スクリーンショット 2023-06-23 13 48 17

並列で学習する場合はデータ呼び出しがボトルネックになる

スクリーンショット 2023-06-23 13 50 34

コメント

こういうtipsはあまり表に出てこないのでとても貴重

出典

GENZITSU commented 10 months ago

ABCI グランドチャレンジ参加報告

NIIにて行われた第二回LLM勉強会におけるABCを用いてLLMを学習させた際の失敗事例の共有

試みたこと

知見

参考になるリソース

スクリーンショット 2023-06-23 14 15 20

コメント

これも有益なのでメモ

出典

GENZITSU commented 10 months ago

【Function Calling】プロンプトエンジニアリングを使ってテキストをJSON化する【ChatGPT】

表題の通り

functions = [
 {
        "name": "extract", 
        "description": "テキストからJSONを抽出する", 
        "parameters": {
            "type": "object",
            "properties": {
                "thought_process": {
                    "type": "string",
                    "description": "", 
                },
                "minimum_monthly_salary": { 
                    "type": "number",
                    "description": "", 
                },
                "maximum_monthly_salary": {
                    "type": "number",
                    "description": "",
                },
            },
            "required": ["minimum_monthly_salary", "maximum_monthly_salary", "thought_process"], 
        },
    }
]

そして、このexamplesの使い方初見だった

examples = [
    {"role": "user", "content": "年収400万"},
    { "role": "assistant", "content": None, 
     "function_call": { 
         "name": "extract", 
         "arguments": '''
            {
            "minimum_monthly_salary": 333333.33,
            "maximum_monthly_salary": 333333.33,
            "thought_process": "
                We can calculate the minimum and maximum monthly salary by dividing the annual salary by 12. 
                We need to convert the amount from Japanese characters to a number."
            }''' 
      } 
    }
]

function_call = {"name": "extract"}
response = openai.ChatCompletion.create(
            model="gpt-3.5-turbo-0613",
            messages=[
                *examples,
                {
                    "role": "user",
                    "content": text
                },
            ],
            functions=functions,
            function_call=function_call

コメント

CoTとFunction Callingの組み合わせ方が参考になった

出典

GENZITSU commented 10 months ago

社内勉強会で生成AIについて発表したので70ページの資料を公開

プロンプトインジェクション部分が勉強になったのでメモ

コメント

別のプロンプトで有害性を判定させるのと、もとものタスクの実行を同時にできるとうれしそう (function callingをうまく使えばいけるかも?)

出典