【Colossal-AI】LLMが自分のPCで安く簡単に、高速で利用できるツール
皆さん、Colossal-AIという機械学習フレームワークをご存知ですか?
Colossal-AIは、大規模なAIモデルをより手頃な価格で、より高速に利用できる革新的なツールです。弊社ではChatGPTやLLMを使っているのですが、その際に「Colossal-AIは学習の時に役に立つだろうな」と思っています。
Colossal-AIの存在をまだ知らなかった方は多いかと思いますが、実はこのツール、GitHubで3万以上のスターがつくほど大人気なんです!
なんでも、Colossal-AIを使えば大規模なAIモデルの学習を、めちゃくちゃ簡単に行えるんです。
というわけで今回は、そんなColossal-AIの概要や導入方法、実際に使ってみた感想についてご紹介します。
この記事を最後まで読むと、自宅のPCで簡単にLLMを使えるようになります。
ぜひ最後までご覧ください!
Colossal-AIの概要
Colossal-AIは、LLMを自分のPC上で手軽に利用するためのツールです。
これまでローカルで使うことが難しかったLLMもColossal-AIを使うと、簡単に動かせます。HPC-AI Technology Inc.によって開発されたこのOSSは、PyTorchを基盤としており、複数のGPUを使用した分散学習が特徴的です。
分散学習とは、AIの学習を高速化させる技術のことを指します。
元のPyTorchと比較しても、単一マシンでのChatGPTの学習が7.73倍高速、1GPUでの推論が1.42倍高速と、高速な学習と推論を実現しています。
公式サイトでは、Colossal-AIの使用方法や分散技術に関する情報が公開されています。そして、開発者や研究者が効果的に利用できるリソースが、とても充実しているのです。
なお、大規模言語モデルを自宅のPCで動かせるツールについて知りたい方はこちらをご覧ください。
→【Petals】パラメーター100B超えのLLMを自宅のPCで動かす方法
Colossal-AIの料金体系
Colossal-AIはOSSであるため、誰でも無料で利用できます。
また、AIの学習も高速に行えるので、電気代などのコストも、少なく済むと考えられます。
Colossal-AIの使い方
今回は、Colossal-AIを用いて、CIFAR10データセット上でのResNetの学習を、単一のGPUで行う方法をご紹介します。
ここでは、Google Colaboratoryを用いて、環境はT4GPUで行います。
まずは、colossalai等必要なライブラリのインストールです。
!pip install colossalai%cd ColossalAI!pip install -r requirements/requirements.txt!CUDA_EXT=1 pip install .%cd examples/images/resnet!pip install -r requirements.txt
この時に、以下の要件を満たす必要があります。
- PyTorch >= 1.11 (PyTorch 2.x は進行中)
- Python >= 3.7
- CUDA >= 11.0
- NVIDIA GPU Compute Capability >= 7.0 (V100/RTX20 以上)
- Linux OS
では、次に実際に使ってみた様子をご紹介します。
Colossal-AIを実際に使ってみた
次に、以下のソースコードを実行して、単一のGPUでFP32を使用して学習を行いましょう。
!colossalai run --nproc_per_node 1 train.py -c ./ckpt-fp32
上記の学習のコードでは、以下のオプションが可能です。
オプション | 意味 | 設定できる値 |
---|---|---|
-p, –plugin | 学習方法 | torch_ddp(デフォルト)torch_ddp_fp16low_level_zero |
-r, –resume | チェックポイントファイルパスから再開 | 数字で設定デフォルトは-1 |
-c, –checkpoint | チェックポイントを保存するフォルダ | フォルダをパスで設定デフォルトは./checkpoint |
-i, –interval | チェックポイントを保存する間隔 | 時間を数値で設定0に設定すると保存されない |
–target_acc | 目標のaccuracyで、未達成の場合は例外が発生 | 目標となるAcurracyの数字を入れるデフォルトはNone |
また、上記のコードの次の部分で、マシン上のGPUの数を設定できます。
--nproc_per_node
今回は単一のGPUで行うので、1を指定しています。
学習が終わったら、次のソースコードを実行して、評価をしてみましょう。
!python eval.py -c ./ckpt-fp32 -e 80
上記の学習のコードでは、以下のオプションが可能です。
オプション | 意味 | 設定できる値 |
---|---|---|
-e, –epoch | 評価のためのエポック数 | 数値で設定 |
-c, –checkpoint | チェックポイントのフォルダ | フォルダをパスで設定 |
上記を実行したら、ResNet-18モデルのAccuracyが出力されます。期待される精度は、Single-GPU Baseline FP32で85.85%です。
参考記事:https://github.com/hpcaitech/ColossalAI/tree/main/examples/images/resnet
今回は単一のGPUで学習と評価を行いましたが、他にもデータ並列やハイブリッド並列など、様々な方法で学習を行うことができます。
Colossal-AIの「学習プロセスの効率化ができる」という強みは本当なのか?
ここでは、Colossal-AIの学習効率を確かめるために、一般的に使われる機械学習ツールのPyTorchと比較しました。
公式によると、従来のPyTorchによる学習よりも効率が良く、高速に行えるそうです。
まずは以下のように、timeをインポートして、Colossal-AIの実行時間を測ってみたいと思います。
import time
start_time = time.time()
!colossalai run --nproc_per_node 1 train.py -c ./ckpt-fp32
end_time = time.time()
elapsed_time = end_time - start_time
print(f"ColossalAI Training took {elapsed_time:.2f} seconds.")
次に、同様の処理をPyTorchで行いたいと思います。
import torch
import torch.nn as nn
import torch.optim as optim
import torchvision
import torchvision.transforms as transforms
import torchvision.models as models
transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])
trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4, shuffle=True, num_workers=2)
testset = torchvision.datasets.CIFAR10(root='./data', train=False, download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=4, shuffle=False, num_workers=2)
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
net = models.resnet18(pretrained=False)
net = net.to(device)
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)
import time
start_time = time.time()
for epoch in range(80): # 80エポックで学習
running_loss = 0.0
for i, data in enumerate(trainloader, 0):
inputs, labels = data[0].to(device), data[1].to(device)
optimizer.zero_grad()
outputs = net(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
running_loss += loss.item()
if i % 2000 == 1999: # 2000ミニバッチごとに表示
print('[%d, %5d] loss: %.3f' % (epoch + 1, i + 1, running_loss / 2000))
running_loss = 0.0
end_time = time.time()
elapsed_time = end_time - start_time
print(f"PyTorch Training took {elapsed_time:.2f} seconds.")
correct = 0
total = 0
with torch.no_grad():
for data in testloader:
images, labels = data[0].to(device), data[1].to(device)
outputs = net(images)
_, predicted = outputs.max(1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
print('Accuracy of the network on the 10000 test images: %d %%' % (100 * correct / total))
すると、実行時間や精度は以下のようになりました。
Colossal-AI | PyTorch | |
---|---|---|
実行時間 | 1831.43秒 | 9187.92秒 |
精度 | 84.56 % | 74 % |
結果、学習効率も精度も、ColossaoAIの方が高いことが分かりました。
そのため、高性能なPCに限らず、自分のPC上でも、Colossal-AIを用いれば手軽に、高精度なAIを構築することができます。
まとめ
Colossal-AIは、大規模なAIモデルの訓練と実行を効率的に行えるツールです。HPC-AI Technology Inc.によって開発されたこのOSSは、PyTorchを基盤としており、複数のGPUを使用した分散学習が特徴的です。
学習効率と精度に関して、Colossal-AIとPyTorchで比較したところ、以下の結果になりました。
Colossal-AI | PyTorch | |
---|---|---|
実行時間 | 1831.43秒 | 9187.92秒 |
精度 | 84.56 % | 74 % |
以上の結果から、Colossal-AIを使うことで効率的にAIモデルを構築できます。
生成系AIの業務活用なら!
・生成系AIを活用したPoC開発
・生成系AIのコンサルティング
・システム間API連携
最後に
いかがだったでしょうか?
弊社では
・マーケティングやエンジニアリングなどの専門知識を学習させたAI社員の開発
・要件定義・業務フロー作成を80%自動化できる自律型AIエージェントの開発
・生成AIとRPAを組み合わせた業務自動化ツールの開発
・社内人事業務を99%自動化できるAIツールの開発
・ハルシネーション対策AIツールの開発
・自社専用のAIチャットボットの開発
などの開発実績がございます。
まずは、「無料相談」にてご相談を承っておりますので、ご興味がある方はぜひご連絡ください。
➡︎生成AIを使った業務効率化、生成AIツールの開発について相談をしてみる。
「生成AIを社内で活用したい」「生成AIの事業をやっていきたい」という方に向けて、生成AI社内セミナー・勉強会をさせていただいております。
セミナー内容や料金については、ご相談ください。
また、サービス紹介資料もご用意しておりますので、併せてご確認ください。