🕌

[Tips] LFTPによるデータ転送

に公開

はじめに

Turingの基盤AIチームに業務委託として所属している東京科学大学(Institute of Science Tokyo)の藤井です。

本記事では、LLM(Large Language Models)やVLM(Vision Language Models)などの学習で利用するデータセットを複数のデータセンター間で並列転送する際に利用しているLFTPの使用方法について紹介します。AWS S3, GCSなどのCloud Service企業のストレージサービスを利用される場合は、aws s3コマンドやgcloudコマンドなどにより並列転送を容易に実現可能ですが、そうでない場合に、数TBスケールのデータを並列転送する際に私が利用しているLFTPについて使用事例を紹介できればと思い、本記事を執筆しています。

想定状況

AWS S3やGoogle CloudのGCSなどを利用されている場合は、各サービスに対応しているデータ転送用コマンドがありますので、そちらを利用することを推奨します。
また、1つ1つのファイルのデータサイズが50GB未満でありhuggingfaceにdatasetとしてデータをupload可能な場合は取り回しの容易さなどから、huggingface-cli upload-large-folderを利用したデータアップロードを推奨します。
(詳細はこちらをご覧ください)

sftpコマンドで転送するにはデータサイズが大きすぎて、データ転送に1日以上要してしまい、並列転送を簡単に実現できるCLIツールを探している方に本記事はピッタリの内容になっています。

インストール

sudoが利用できる場合は、apt getなどでinstall可能です。
大学や研究機関のスパコンでsudo権限がない場合は以下の方法でインストール可能です。

ソースコードをdownloadします。

cd ~/local
wget http://lftp.yar.ru/ftp/lftp-4.9.2.tar.gz
tar -xzf lftp-4.9.2.tar.gz
cd lftp-4.9.2

build & installを行います。

./configure --prefix=$HOME/local --with-libssh2=$HOME/local --with-openssl=$HOME/local
make
make install

環境変数の設定 (以下を ~/.bashrcを設定します)

PATH="$HOME/local/bin:$PATH"

.bashrcを読み込み直せば以下のように利用できるか確認できます。

> lftp --version
LFTP | Version 4.9.2 | Copyright (c) 1996-2020 Alexander V. Lukyanov

使用方法

以下のように ~/.ssh/configに登録してあるHost名をsftp://の後に続けて記述します。
すると、転送するための準備が整いました。

> lftp sftp://abci
lftp abci:~>

ローカルのデータをリモートに転送する場合は以下のようにしてください。

lftp abci:~> mirror --reverse --parallel=16 /local/path/to /remote/path/to
`<dataset-name>' at 14417952768 (6%) 5.76M/s eta:9h4m [Sending data]

リモートのデータをローカルに移動するときは--reverseを外してください。
また--parallelは並列数を規定しています。CPU core数等を考慮して決めてください。

転送にかかる予想時間が表示されますので、現在の並列数で十分なのか確認することができます。

おわりに

本記事では、LFTPを利用したデータ転送について紹介しました。
データ転送を行う際のTipsとして参考になれば幸いです。

普段は低精度学習やLLMの開発に関する記事、論文を執筆していますので、よろしければそちらも確認いただけますと幸いです。

https://arxiv.org/abs/2505.02881

また私が所属しているTuringではVLMの開発からデプロイまで、幅広い研究開発を行っていますので、そちらもぜひご確認ください。

Tech Blog - Turing

Discussion