2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

singularity構築エラー対応と対策について

Last updated at Posted at 2025-10-06

1.概要

松尾研LLMコンペ2025にPhase2としてRAMENチームで開発に取り組んできました。

RAMENチームとして事後学習の実験する際、メンバーからsingularityによる方法がありました。

メンバーで仮想環境を構築しました。singularity構築によって、事後学習の学習を円滑に進むことが出来、評価の良いモデルを提出することが出来ました。

構築する際にエラーとなったので、今後singularity構築する際に困らないようとエラー対応と対策について記載します。

2.singularityとは

Dockerと同じコンテナ技術です。Dockerではrootユーザとしてデーモンが使われる部分に対して、singularityは、ユーザコマンドで実行出来るため、セキュリティリスクについて軽減が可能です。

そのため、本コンペでは活用しています。詳細は、参考URLを参照して下さい。

参考URL:https://www.hpc.cmc.osaka-u.ac.jp/wp-content/uploads/2023/01/%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E5%85%A5%E9%96%80%E8%AC%9B%E7%BF%92%E4%BC%9A.pdf

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

参考URL:https://www.hpc.cmc.osaka-u.ac.jp/wp-content/uploads/2023/01/%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E5%85%A5%E9%96%80%E8%AC%9B%E7%BF%92%E4%BC%9A.pdf

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の社会実装に向けた安全性検証・実証」における

基盤モデルの開発プロジェクトの一環として行われました。

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?