Transformersでのモデル学習状況をSlackに通知する
Spiral.AI の記事は、Hugging Face の transformers ライブラリを使用して大規模モデルを学習する際、Slack を活用してエポック終了やトレーニング完了の通知を受け取るためのカスタムコールバック実装方法を解説している。
キーポイント
Slack 通知の実用性
Wandb のダッシュボードを常時確認する手間を省き、学習進捗や完了をプッシュ通知で即座に把握できる仕組みの必要性と利点を説明している。
TrainerCallback の活用
transformers の Trainer にカスタムコールバック(SlackCallback)を組み込むことで、学習開始、エポック終了、トレーニング完了の各タイミングで Slack API を呼び出す手法を示している。
実装コードの提供
Python の WebClient を使用し、環境変数からトークンを取得してチャットメッセージを送信する具体的なクラス定義と、SFTTrainer への登録方法を提示している。
学習進捗のリアルタイム把握と安心感
ダッシュボードを直接確認しなくても通知が届くため、学習状況をリアルタイムで把握でき、安心して進められる。
チーム共有による透明性向上
Slack 経由での通知はメンバー間での共有が容易であり、プロジェクト全体の透明性を高める効果が期待できる。
影響分析・編集コメントを表示
影響分析
この記事は、大規模モデル学習における運用面(MLOps)の簡素化を提案しており、開発者がツール間の移動コストを減らし、集中力を維持するための具体的な実装例を提供しています。特に、Slack をインフラの一部として組み込むことで、チーム全体の可視性を高める効果的なアプローチを示唆しています。
編集コメント
大規模モデルの学習は時間がかかるため、進捗をSlackで受け取るこの手法は、開発者のストレス軽減に直結する実用的な知見です。
Python
Slack
transformers techどうも、SpiralAIの@ksterxです。
みなさんは、モデルの学習を行う時、なんのライブラリを使用して学習していますでしょうか?自分自身は、なんだかんだpytorch lightningを使っている時期が長かったのかなと思いますが、最近は言語系を触っていることもあり、🤗transformersを使用する機会が多いです。(megatronやllama-factoryに浮気したい気もしていますが、、、)
🤗Hugging Face Hubにある多くのモデルが、🤗transformersを使用してロード、推論が簡単に行えます。また、🤗transformersは比較的新しい論文のアルゴリズムであってもTrainerとして提供されることが多いため、簡単に多様なアルゴリズムを試せることが多いです。
実際に🤗transformersを使用してモデルの学習をする場合、学習状況を確認することがあると思います。この辺は、TrainingArguments
Source: Hugging Face Documentation
from trl import SFTConfig, SFTTrainer train_args = SFTConfig( report_to="wandb", # ... ) ... trainer = SFTTrainer( args=train_args, # ... )
ただ、我々のような心配性and面倒くさがりな人間は、学習が進んでいるのかが心配になるわけです。わざわざ、wandbのダッシュボードを見る必要もない、それでも、どのぐらい進んでいるかプッシュ通知ぐらいで知れれば良い―――slackに通知すれば良くね。
前置きが長くなりました。今回実現するのは、エポックが終了するタイミングとトレーニング自体が終了するタイミングに通知を飛ばすシステムです。
↑↑↑↑こんな感じ
SlackのToken (参考ページ) 環境変数SLACK_BOT_TOKEN
Pythonライブラリ transformers
🤗transformersのモデルトレーニング時の挙動を変える方法の一つが、TrainerCallback
TrainingArguments
from transformers import TrainerCallback, TrainingArguments, TrainerState, TrainerControl class SlackCallback(TrainerCallback): default_text = "\n\nProject: {proj}\nRepo: {repo}\nLog: {log_dir}\n\n" def __init__(self, channel, client=None): super().__init__() self.client = ( WebClient(token=os.environ["SLACK_BOT_TOKEN"]) if client is None else client ) self.channel = channel def on_epoch_end( self, args: TrainingArguments, state: TrainerState, control: TrainerControl, kwargs, ): if state.is_world_process_zero: self.client.chat_postMessage( channel=self.channel, text=f"✅Epoch {state.epoch:.1f} (global step {state.global_step}) finished!!✅" + self.default_text.format( proj=args.run_name, repo=args.hub_model_id, log_dir=args.output_dir, ), ) def on_train_begin( self, args: TrainingArguments, state: TrainerState, control: TrainerControl, kwargs, ): if state.is_world_process_zero: self.client.chat_postMessage( channel=self.channel, text="🚀Training started🚀" + self.default_text.format( proj=args.run_name, repo=args.hub_model_id, log_dir=args.output_dir, ), ) def on_train_end( self, args: TrainingArguments, state: TrainerState, control: TrainerControl, **kwargs, ): if state.is_world_process_zero: self.client.chat_postMessage( channel=self.channel, text="🎉Training finished🎉" + self.default_text.format( proj=args.run_name, repo=args.hub_model_id, log_dir=args.output_dir, ), )
slack_callback = SlackCallback("write権限のあるチャンネル名") trainer = SFTTrainer( ..., callbacks=[slack_callback] ) trainer.train()
これでプログラムを動かすと…
🎉無事Slackの任意のチャンネルに通知することができる様になりました🎉
今回は、🤗transformersを使用してモデルの学習進捗をSlackに通知する方法をご紹介しました。これで、学習の進捗状況をリアルタイムで把握するのが楽になりますね。わざわざダッシュボードを確認しに行かなくても、通知が来るので安心して学習を進められます。
Slack通知はチームメンバーとも共有しやすく、プロジェクト全体の透明性を高める効果も期待できます。もちろん、今回のコードをさらにカスタマイズして、特定のイベントやログメッセージを追加することも可能です。皆さんのプロジェクトに合わせて、最適な通知システムを構築してみてください。
LLMエンジニアを募集しています!!
SpiralAIでは、生成AI×エンタメをテーマに様々なプロジェクトが立ち上がっています!もし、ご興味があれば@ksterxや採用ページまでご連絡ください〜
GitHubで編集を提案
SpiralAIテックブログPublication実在する芸能人との会話ができる日本初のAIサービス「NaomiAI」やカスタムChatGPTを作れる「Spiralbot」を提供するSpiralAI株式会社のテックブログです。

原文を表示
Python
Slack
transformers techどうも、SpiralAIの@ksterxです。
みなさんは、モデルの学習を行う時、なんのライブラリを使用して学習していますでしょうか?自分自身は、なんだかんだpytorch lightningを使っている時期が長かったのかなと思いますが、最近は言語系を触っていることもあり、🤗transformersを使用する機会が多いです。(megatronやllama-factoryに浮気したい気もしていますが、、、)
🤗Hugging Face Hubにある多くのモデルが、🤗transformersを使用してロード、推論が簡単に行えます。また、🤗transformersは比較的新しい論文のアルゴリズムであってもTrainerとして提供されることが多いため、簡単に多様なアルゴリズムを試せることが多いです。
実際に🤗transformersを使用してモデルの学習をする場合、学習状況を確認することがあると思います。この辺は、TrainingArguments
Source: Hugging Face Documentation
from trl import SFTConfig, SFTTrainer train_args = SFTConfig( report_to="wandb", # ... ) ... trainer = SFTTrainer( args=train_args, # ... )
ただ、我々のような心配性and面倒くさがりな人間は、学習が進んでいるのかが心配になるわけです。わざわざ、wandbのダッシュボードを見る必要もない、それでも、どのぐらい進んでいるかプッシュ通知ぐらいで知れれば良い―――slackに通知すれば良くね。
前置きが長くなりました。今回実現するのは、エポックが終了するタイミングとトレーニング自体が終了するタイミングに通知を飛ばすシステムです。
↑↑↑↑こんな感じ
SlackのToken (参考ページ) 環境変数SLACK_BOT_TOKEN
Pythonライブラリ transformers
🤗transformersのモデルトレーニング時の挙動を変える方法の一つが、TrainerCallback
TrainingArguments
from transformers import TrainerCallback, TrainingArguments, TrainerState, TrainerControl class SlackCallback(TrainerCallback): default_text = "\n\nProject: {proj}\nRepo: {repo}\nLog: {log_dir}\n\n" def __init__(self, channel, client=None): super().__init__() self.client = ( WebClient(token=os.environ["SLACK_BOT_TOKEN"]) if client is None else client ) self.channel = channel def on_epoch_end( self, args: TrainingArguments, state: TrainerState, control: TrainerControl, kwargs, ): if state.is_world_process_zero: self.client.chat_postMessage( channel=self.channel, text=f"✅Epoch {state.epoch:.1f} (global step {state.global_step}) finished!!✅" + self.default_text.format( proj=args.run_name, repo=args.hub_model_id, log_dir=args.output_dir, ), ) def on_train_begin( self, args: TrainingArguments, state: TrainerState, control: TrainerControl, kwargs, ): if state.is_world_process_zero: self.client.chat_postMessage( channel=self.channel, text="🚀Training started🚀" + self.default_text.format( proj=args.run_name, repo=args.hub_model_id, log_dir=args.output_dir, ), ) def on_train_end( self, args: TrainingArguments, state: TrainerState, control: TrainerControl, **kwargs, ): if state.is_world_process_zero: self.client.chat_postMessage( channel=self.channel, text="🎉Training finished🎉" + self.default_text.format( proj=args.run_name, repo=args.hub_model_id, log_dir=args.output_dir, ), )
slack_callback = SlackCallback("write権限のあるチャンネル名") trainer = SFTTrainer( ..., callbacks=[slack_callback] ) trainer.train()
これでプログラムを動かすと…
🎉無事Slackの任意のチャンネルに通知することができる様になりました🎉
今回は、🤗transformersを使用してモデルの学習進捗をSlackに通知する方法をご紹介しました。これで、学習の進捗状況をリアルタイムで把握するのが楽になりますね。わざわざダッシュボードを確認しに行かなくても、通知が来るので安心して学習を進められます。
Slack通知はチームメンバーとも共有しやすく、プロジェクト全体の透明性を高める効果も期待できます。もちろん、今回のコードをさらにカスタマイズして、特定のイベントやログメッセージを追加することも可能です。皆さんのプロジェクトに合わせて、最適な通知システムを構築してみてください。
LLMエンジニアを募集しています!!
SpiralAIでは、生成AI×エンタメをテーマに様々なプロジェクトが立ち上がっています!もし、ご興味があれば@ksterxや採用ページまでご連絡ください〜
GitHubで編集を提案
SpiralAIテックブログPublication実在する芸能人との会話ができる日本初のAIサービス「NaomiAI」やカスタムChatGPTを作れる「Spiralbot」を提供するSpiralAI株式会社のテックブログです。

関連記事
今日のまとめ
AI日報で今日の重要ニュースをまとめ読み