1.概要
松尾研LLMコンペ2025にPhase2としてRAMENチームで開発に取り組んできました。
RAMENチームとして事後学習の実験する際、メンバーからsingularityによる方法がありました。
メンバーで仮想環境を構築しました。singularity構築によって、事後学習の学習を円滑に進むことが出来、評価の良いモデルを提出することが出来ました。
構築する際にエラーとなったので、今後singularity構築する際に困らないようとエラー対応と対策について記載します。
2.singularityとは
Dockerと同じコンテナ技術です。Dockerではrootユーザとしてデーモンが使われる部分に対して、singularityは、ユーザコマンドで実行出来るため、セキュリティリスクについて軽減が可能です。
そのため、本コンペでは活用しています。詳細は、参考URLを参照して下さい。
3.singularity実行エラー
3.1モデル実行エラー
singularity構築後、モデル学習を実施した際、以下のエラーとなりました。
他のメンバーは、モデル実行も問題無く実行出来ていました。
wandb: ERROR Error uploading run: api: failed sending: POST https://api.wandb.ai/graphql giving up after 1 attempt(s): Post "https://api.wandb.ai/graphql": tls: failed to verify certificate: x509: certificate signed by unknown authority
Traceback (most recent call last):
File "/usr/local/lib/python3.12/dist-packages/swift/cli/_megatron/sft.py", line 5, in <module>
megatron_sft_main()
File "/usr/local/lib/python3.12/dist-packages/swift/megatron/train/sft.py", line 79, in megatron_sft_main
return MegatronSft(args).main()
^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/dist-packages/swift/llm/base.py", line 49, in main
result = self.run()
^^^^^^^^^^
File "/usr/local/lib/python3.12/dist-packages/swift/megatron/train/sft.py", line 69, in run
self.trainer.train(train_dataset, val_dataset, data_collator)
File "/usr/local/lib/python3.12/dist-packages/swift/megatron/trainers/base.py", line 747, in train
pretrain(
File "/workspace/Megatron-LM/megatron/training/training.py", line 725, in pretrain
initialize_megatron(
File "/usr/local/lib/python3.12/dist-packages/swift/megatron/trainers/base.py", line 62, in initialize_megatron
res = origin_initialize_megatron(*_args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/workspace/Megatron-LM/megatron/training/initialize.py", line 92, in initialize_megatron
set_global_variables(args)
File "/workspace/Megatron-LM/megatron/training/global_vars.py", line 102, in set_global_variables
_set_wandb_writer(args)
File "/workspace/Megatron-LM/megatron/training/global_vars.py", line 211, in _set_wandb_writer
wandb.init(**wandb_kwargs)
File "/usr/local/lib/python3.12/dist-packages/wandb/sdk/wandb_init.py", line 1573, in init
wandb._sentry.reraise(e)
File "/usr/local/lib/python3.12/dist-packages/wandb/analytics/sentry.py", line 162, in reraise
raise exc.with_traceback(sys.exc_info()[2])
File "/usr/local/lib/python3.12/dist-packages/wandb/sdk/wandb_init.py", line 1554, in init
run = wi.init(run_settings, run_config, run_printer)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/dist-packages/wandb/sdk/wandb_init.py", line 1000, in init
raise error
wandb.errors.errors.CommError: Error uploading run: api: failed sending: POST https://api.wandb.ai/graphql giving up after 1 attempt(s): Post "https://api.wandb.ai/graphql": tls: failed to verify certificate: x509: certificate signed by unknown authority
[rank7]: Traceback (most recent call last):
[rank7]: File "/usr/local/lib/python3.12/dist-packages/swift/cli/_megatron/sft.py", line 5, in <module>
[rank7]: megatron_sft_main()
[rank7]: File "/usr/local/lib/python3.12/dist-packages/swift/megatron/train/sft.py", line 79, in megatron_sft_main
[rank7]: return MegatronSft(args).main()
[rank7]: ^^^^^^^^^^^^^^^^^^^^^^^^
[rank7]: File "/usr/local/lib/python3.12/dist-packages/swift/llm/base.py", line 49, in main
[rank7]: result = self.run()
[rank7]: ^^^^^^^^^^
[rank7]: File "/usr/local/lib/python3.12/dist-packages/swift/megatron/train/sft.py", line 69, in run
[rank7]: self.trainer.train(train_dataset, val_dataset, data_collator)
[rank7]: File "/usr/local/lib/python3.12/dist-packages/swift/megatron/trainers/base.py", line 747, in train
[rank7]: pretrain(
[rank7]: File "/workspace/Megatron-LM/megatron/training/training.py", line 725, in pretrain
[rank7]: initialize_megatron(
[rank7]: File "/usr/local/lib/python3.12/dist-packages/swift/megatron/trainers/base.py", line 62, in initialize_megatron
[rank7]: res = origin_initialize_megatron(*_args, **kwargs)
[rank7]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[rank7]: File "/workspace/Megatron-LM/megatron/training/initialize.py", line 92, in initialize_megatron
[rank7]: set_global_variables(args)
[rank7]: File "/workspace/Megatron-LM/megatron/training/global_vars.py", line 102, in set_global_variables
[rank7]: _set_wandb_writer(args)
[rank7]: File "/workspace/Megatron-LM/megatron/training/global_vars.py", line 211, in _set_wandb_writer
[rank7]: wandb.init(**wandb_kwargs)
[rank7]: File "/usr/local/lib/python3.12/dist-packages/wandb/sdk/wandb_init.py", line 1573, in init
[rank7]: wandb._sentry.reraise(e)
[rank7]: File "/usr/local/lib/python3.12/dist-packages/wandb/analytics/sentry.py", line 162, in reraise
[rank7]: raise exc.with_traceback(sys.exc_info()[2])
[rank7]: File "/usr/local/lib/python3.12/dist-packages/wandb/sdk/wandb_init.py", line 1554, in init
[rank7]: run = wi.init(run_settings, run_config, run_printer)
[rank7]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[rank7]: File "/usr/local/lib/python3.12/dist-packages/wandb/sdk/wandb_init.py", line 1000, in init
[rank7]: raise error
[rank7]: wandb.errors.errors.CommError: Error uploading run: api: failed sending: POST https://api.wandb.ai/graphql giving up after 1 attempt(s): Post "https://api.wandb.ai/graphql": tls: failed to verify certificate: x509: certificate signed by unknown authority
W0918 14:17:27.320000 887246 torch/distributed/elastic/multiprocessing/api.py:900] Sending process 887315 closing signal SIGTERM
W0918 14:17:27.322000 887246 torch/distributed/elastic/multiprocessing/api.py:900] Sending process 887316 closing signal SIGTERM
W0918 14:17:27.323000 887246 torch/distributed/elastic/multiprocessing/api.py:900] Sending process 887317 closing signal SIGTERM
W0918 14:17:27.324000 887246 torch/distributed/elastic/multiprocessing/api.py:900] Sending process 887318 closing signal SIGTERM
W0918 14:17:27.324000 887246 torch/distributed/elastic/multiprocessing/api.py:900] Sending process 887319 closing signal SIGTERM
W0918 14:17:27.325000 887246 torch/distributed/elastic/multiprocessing/api.py:900] Sending process 887320 closing signal SIGTERM
W0918 14:17:27.325000 887246 torch/distributed/elastic/multiprocessing/api.py:900] Sending process 887321 closing signal SIGTERM
E0918 14:17:28.042000 887246 torch/distributed/elastic/multiprocessing/api.py:874] failed (exitcode: 1) local_rank: 7 (pid: 887322) of binary: /usr/bin/python
Traceback (most recent call last):
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "/usr/local/lib/python3.12/dist-packages/torch/distributed/run.py", line 896, in <module>
main()
File "/usr/local/lib/python3.12/dist-packages/torch/distributed/elastic/multiprocessing/errors/__init__.py", line 355, in wrapper
return f(*args, **kwargs)
^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/dist-packages/torch/distributed/run.py", line 892, in main
run(args)
File "/usr/local/lib/python3.12/dist-packages/torch/distributed/run.py", line 883, in run
elastic_launch(
File "/usr/local/lib/python3.12/dist-packages/torch/distributed/launcher/api.py", line 139, in __call__
return launch_agent(self._config, self._entrypoint, list(args))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/dist-packages/torch/distributed/launcher/api.py", line 270, in launch_agent
raise ChildFailedError(
torch.distributed.elastic.multiprocessing.errors.ChildFailedError:
============================================================
/usr/local/lib/python3.12/dist-packages/swift/cli/_megatron/sft.py FAILED
------------------------------------------------------------
Failures:
<NO_OTHER_FAILURES>
------------------------------------------------------------
Root Cause (first observed failure):
[0]:
time : 2025-09-18_14:17:27
host : osk-gpu61
rank : 7 (local_rank: 7)
exitcode : 1 (pid: 887322)
error_file: <N/A>
traceback : To enable traceback see: https://pytorch.org/docs/stable/elastic/errors.html
============================================================
srun: error: osk-gpu61: task 0: Exited with exit code 1
[P03U011@osk-cpu01 logs]$ [INFO:swift] padding_to: None
/workspace/Megatron-LM/megatron/training/arguments.py:852: UserWarning: Disabling sequence parallelism because tensor model parallelism is disabled
warnings.warn("Disabling sequence parallelism because tensor model parallelism is disabled")
/workspace/Megatron-LM/megatron/training/arguments.py:852: UserWarning: Disabling sequence parallelism because tensor model parallelism is disabled
warnings.warn("Disabling sequence parallelism because tensor model parallelism is disabled")
/workspace/Megatron-LM/megatron/training/arguments.py:852: UserWarning: Disabling sequence parallelism because tensor model parallelism is disabled
warnings.warn("Disabling sequence parallelism because tensor model parallelism is disabled")
/workspace/Megatron-LM/megatron/training/arguments.py:852: UserWarning: Disabling sequence parallelism because tensor model parallelism is disabled
3.2エラー対象方法
3.2.1 サーバ証明書の定義
export SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt
環境変数がなぜかRedHatが定義されていました。
イメージ自体は、Debian系なのでそもそもこれだと通信できないため上記の通りに環境変数を変更しました。
ただし、実行させても別なエラーが発生しました。
3.2.2 コンソールからSSH接続で実行
基本実行をVScodeのTerminalで実行しました。コンソールのSSHから接続して、
実行した場合、正常に学習が出来き、wandbも正常に接続できていることを確認しました。
4.2.2の項目でサーバ照明書があるかどうか確認もしました。
4.singularity構築対策
今後、同じような事象で困る方もいらっしゃるのでこちらの項目では対策記載しています。
注意事項:singularity構築や実行する際は、VSCodeのTerminalを使用せず、コンソールからSSH接続する
4.1 Dockerイメージ作成とDockerHubへアップロード
公開されているイメージが無い場合、担当者のGPU端末で
dockerイメージビルドしてからDockerHubにアップロードします。
※公開されている場合は、この手順を飛ばしても良いです。
4.2 singularity構築
4.2.1 DockerHubのイメージをsingularityにビルドさせる
対応するコンテナsingularity用にビルドさせます。
ビルドすることによりsingularityを活用することが出来ます。
SINGULARITY_CACHEDIR=(ログやキャッシュのパス) singularity build -s {指定の環境名} docker://xxxxxxxx/xxxxx
4.2.2 singularityに入ってみてサーバ照明ができるかどうか実験
以下のコマンドを実行して本エラー事象が発生していないか確認します。
※基本は、エラーとなることはありません。
singularity shell -w --nv -B /home (singularityのパス)
Singularity> curl -I https://wandb.ai
HTTP/2 301
x-powered-by: Express
set-cookie: host_session_id=1bcaaa41-a6c9-4444-9b4d-bd8d94cb668b; Max-Age=31536000; Domain=wandb.ai; Path=/; Expires=Fri, 18 Sep 2026 06:58:52 GMT; Secure; SameSite=None
x-frame-options: SAMEORIGIN
content-security-policy: frame-ancestors 'self';
location: /site
vary: Accept
content-type: text/plain; charset=utf-8
x-cloud-trace-context: 97dc9fe1076b1820dd9115e59c26197f
content-length: 39
date: Thu, 18 Sep 2025 06:58:52 GMT
pragma: no-cache
expires: Fri, 01 Jan 1990 00:00:00 GMT
cache-control: no-cache, must-revalidate
server: Google Frontend
via: 1.1 google
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
5.まとめ
singularityは、condaに比べて構築しやすいですが、接続によってエラーとなることも分かりました。
接続方法を限定したら特に問題無く学習もしやすい環境であることが分かりました。
プロジェクトのクレジット
本プロジェクトは、国立研究開発法人新エネルギー・産業技術開発機構(NEDO)の
「日本語版医療特化型LLMの社会実装に向けた安全性検証・実証」における
基盤モデルの開発プロジェクトの一環として行われました。