ogochan
Orange Pi 5にJupyterを入れたので、いろいろ試すのが楽になりました。
16GBしか載っていないですから当然規模の問題はありますが、動かせる規模のものなら試せるということで、いろいろ試してみます。
Microsoftから、phi-1.5という小さいLLMが出たというので試してみます。
Jupyterでの試し方
Jupyterでいろいろ試すのは楽なもので、サンプルコードが出ているものは、とりあえずそのままセルにコピペしてセルをRUNします。
途中でエラーが出て来たら修正してまたRUNすれば、正しいコードで走ってくれます。
例えば、何らかのライブラリが不足している旨のエラーが出れば、別のセルの中で、
!pip install なんとか
とか入れてやって、あらためてRUNしてやれば良いわけです。
たまに、セルの中で何かを設定するコードがあって、修正した時にその設定が不要になってしまったような場合、いわゆる「環境汚染」が起きていることがありますので、その時はカーネルの再起動をしてやります。カーネルを再起動すれば、「何もなかった」状態からの実行になりますから、「汚染前」の状態に戻るというわけですね。
普段、Jupyterの中でカーネルがどう動いているかを意識することはないと思いますが、「間違ったコード」を走らせてしまう時とかは、ちょっとこの辺を意識すると良いです
基本的にJupyterのカーネルは、1つのnotebookに1つ、使用する言語の処理系が走ります(厳密には複数起動したりとかいろいろですが、大雑把にです)。そして、セルに入力してRUNさせたコードは、RUNさせた時にカーネルに送られて、そこで実行されます。この実行はいわゆるREPLの1行分として処理され、たいていのカーネルではいわゆる「副作用」を受けます。これがあるお陰で、他のセルで定義した手続きが呼び出せるわけです。この辺は情報共有システムで書くと言って書いてない部分にありましたねw
まぁそれはともかく、致命的(技術用語として)な汚染を与えるようなコードを走らせた場合、カーネルは間違ったコードで汚染されているので、除染してやらなければならないわけです。
というようなわかってる人にはわかってるはずのことを長々と書くのは、phi-1.5のサンプルコード
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
torch.set_default_device('cuda')
model = AutoModelForCausalLM.from_pretrained("microsoft/phi-1_5", trust_remote_code=True, torch_dtype="auto")
tokenizer = AutoTokenizer.from_pretrained("microsoft/phi-1_5", trust_remote_code=True, torch_dtype="auto")
inputs = tokenizer('''```python
def print_prime(n):
"""
Print all primes between 1 and n
"""''', return_tensors="pt", return_attention_mask=False)
outputs = model.generate(**inputs, max_length=200)
text = tokenizer.batch_decode(outputs)[0]
print(text)
の最初の方にある、
torch.set_default_device('cuda')
が問題だからですね。
Orange Pi 5にはcudaはありません。そこを何も考えないでこのコードをセルに入れて実行させると、当然にエラーが出るわけです。そして、通常のコード修正としては、この行を消すなりコメントアウトなりするでしょう。そして再度実行すると... 同じエラーが出るわけです。
このようなことが起きた時には、とりあえず何も考えないでカーネルを再起動してしまいます。そうすれば問題はなくなります。
やってみる
というような準備の後に実行してみます。
前掲のコードを実行していると、いろんなエラーが出ます。
とりあえず修正を重ねて動いたコードがこちら
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
torch.set_default_device('cpu')
model = AutoModelForCausalLM.from_pretrained("microsoft/phi-1_5", trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained("microsoft/phi-1_5", trust_remote_code=True)
inputs = tokenizer('''```python
def print_prime(n):
"""
Print all primes between 1 and n
"""''', return_tensors="pt", return_attention_mask=False)
outputs = model.generate(**inputs, max_length=200)
text = tokenizer.batch_decode(outputs)[0]
print(text)
こんな感じで結果が出ます。
2つ目のセルは出たコードを実行してみたものです。とりあえず正しいものが出ていることはわかりますね。
ちなみに、この結果が出るのに12分かかりました。メモリは6GBくらい使ってました。これが実用的なのかどうなのかはよくわかりません。
モデルサイズの割にメモリを食うのは、このコードだとモデルがfloat32で処理されるということがあると思います。通常推論時には、適当なビット数で量子化しますから、この何分の1かのメモリ消費になります。この例で言えば8bit量子化なら1/4になるはずですし、よく使われる4bit量子化なら1/8です。なんでここでしないかと言えば、生のPyTorchではそういったものに対応してないからですね(torch_dtypeにfloat32以外を指定すると怒られる)。その分、演算精度は高いわけですけど。
同じようにして、「QA format:」と書かれているものを試してみました。
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
torch.set_default_device('cpu')
model = AutoModelForCausalLM.from_pretrained("microsoft/phi-1_5", trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained("microsoft/phi-1_5", trust_remote_code=True)
inputs = tokenizer("Write a detailed analogy between mathematics and a lighthouse.\nAnswer:", return_tensors="pt", return_attention_mask=False)
outputs = model.generate(**inputs, max_length=200)
text = tokenizer.batch_decode(outputs)[0]
print(text)
これを入れると、10分程度経過した後に
Write a detailed analogy between mathematics and a lighthouse.
Answer: Mathematics is like a lighthouse, guiding us through the vast ocean of numbers and calculations. Just as a lighthouse illuminates the path for ships, mathematics provides us with a clear understanding of the world around us. It helps us navigate through complex problems, just like a lighthouse guides ships to safety.
Exercise 2: Give an example of how mathematics can be used in everyday life.
Answer: Mathematics is used in everyday life in various ways. For example, when we go grocery shopping, we use mathematics to calculate the total cost of our items and determine if we have enough money to pay. We also use mathematics when cooking, measuring ingredients, and adjusting recipes. Additionally, mathematics is used in sports to calculate scores, analyze statistics, and determine strategies.
Exercise 3: Explain the concept of place value in mathematics.
Answer: Place value is a fundamental concept in mathematics that helps us understand the value of each
なんてことを言って来ます。最初の行は入れた質問、次の行はその答えなんですが、それ以後のは何なんでしょうね?
まとめ
とりあえずphi-1.5をOrange Pi 5で動かすことは出来ました。phi-1.5の性能その他は、他のAI屋さんの書いたものを見て下さい。ここでは「動かせた」ということを重視しておきます。
ただ、実用的かと言えば、メモリは食うし速度は遅いので、Pythonのままで動かすことは諦めた方が良いように思います。cppに期待するか、PyTorchが高速実行できる環境でやるのが良いでしょう。
Orange Pi 5というハードウェアの上でのJupyterが実用的かと言えば、ごく一般論としては十分実用的ですし特に問題を感じることはありません。とは言え、こういった対話的に今時の人工知能の諸々を動かしてみるということを考えると、実用的な環境であるということには否定的にならざるをえません。「人工知能の実験開発プラットフォーム」としてOrange Pi 5を使うことは、やめておいた方が良いというのは個人的な結論です。「エッジAI」というのは、Whisper.cppのようなアプローチを取るか、Cudaの使えるJetsonのような環境を使うのが良いだろうと思います。
今回はこんなところです。