ディープラーニングを軽量化する「モデル圧縮」には3つほどのやり方があるようです。
Pruing(枝刈り)
ノード間の重みが小さい箇所の接続を削除、または影響の小さいノードを削除することでパラメータ数を削減する
Quantize(量子化)
重みなどのパラーメータをより小さいビットで表現することで、モデルを軽量化する
Distillation(蒸留)
大きいモデルやアンサンブルモデルを教師モデルとして、その知識を小さいモデルの学習に利用する
……etc
今回は2番目の量子化をやってみます。また量子化手法もいくつかありますがCPUのみのPCでも十分なパフォーマンスがでるllama.cppを使ってみます。
型落ちPCのCPUのみで日本語対応のLLMを試してみるでは1Bのモデルを使っていました。量子化していなかったわけではなくモデルのロード時にbitsandbytesを通していたのですが、軽量化はさほどでもなかったようです。
今回はllama.cppで事前に量子化した2つのモデルを使ってみます。
一つは、前回使った日本語に対応したCyberAgentのcalm2の7B版(calm2-7b-chat.Q2_K.gguf)、もう一つはMetaのLlama2の7B版(llama-2-7b-chat.ggmlv3.q4_0.ggml)です。後者は日本語非対応で、量子化フォーマットもGGMLなのでGGUFに変換して使います。
どちらもTheBlokeさんがHuggingFaceにアップされていますので、そこからダウンロードして使います。
量子化自体は上記のプアなPCを使っても実行できますが、少々時間を要します。せっかくアップされているのだからそれを使わない手はないですが、他のモデルでまだgguf形式に量子化されていないものがあれば自前でquantizeしましょう。方法は別途ページを作ります。
環境は前回と同様にRAMを10GBに増設したThinkCentre M91 Eco Ultra Small 7516C6JにUbuntu 20.04.3 Srrver LTS をインストールしたものです。
llama.cppをクローンして環境を作成します。
1 2 3 4 |
sudo apt install git git clone https://github.com/ggerganov/llama.cpp cd llama.cpp make |
CyberAgent のCalm2モデル
llama.cpp では 2, 3, 4, 5, 6, 8bit 量子化をサポートしており、4bit量子化だと約14GBが約3GBまでダウンサイズされています。量子化済のq2_K型の量子化型GGUFフォーマットモデルをダウンロードします。
modelsフォルダーに移動してダウンロード後、親ディレクトリに戻っておきます。
1 2 3 4 5 |
cd models wget https://huggingface.co/TheBloke/calm2-7B-chat-GGUF/resolve/main/calm2-7b-chat.Q2_K.gguf cd .. |
「雨降りの準備はどうしたらいいですか?」をQ&A形式で投げてみます。
mainコマンドで実行。
./main -m "./models/calm2-7b-chat.Q2_K.gguf" --temp 0.1 -p "### Question:雨降りの準備はどうしたらいいですか? ### Answer:"
以下のような応答が10秒足らずで返ってきました。
MetaのLlama2の4bit量子化モデル
modelsフォルダーに移動してダウンロード後、親ディレクトリに戻ります。
1 2 3 4 5 |
cd models wget https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGML/resolve/main/llama-2-7b-chat.ggmlv3.q4_0.bin cd .. |
量子化フォーマットはGGMLの古いタイプのままですので、GGUFに変換します。
python3 convert-llama-ggml-to-gguf.py --input ./models/llama-2-7b-chat.ggmlv3.q4_0.bin --output ./models/llama-2-7b-chat.ggmlv3.q4_0.gguf
日本語対応していないので、英語でQ&Aします。
「 How should I prepare for rain(雨降りの準備はどうしたらいいですか)?」
mainコマンドで実行。
./main -m "./models/llama-2-7b-chat.ggmlv3.q4_0.gguf" --temp 0.1 -p "### Question: How should I prepare for rain? ### Answer:"
4~5秒で応答が返ってきました。
訳すとこんな感じ。
### Question: How should I prepare for rain? ### Answer: Preparing for rain can help ensure your safety and comfort during inclement weather. Unterscheidung between different types of rain, such as light rain, heavy rain, or thunderstorms, and plan accordingly. Here are some tips to help you prepare for rain: 1. Dress appropriately: Wear layers of breathable clothing, such as a waterproof jacket or poncho, and sturdy shoes with good traction to prevent slipping on wet surfaces. 2. Bring an umbrella: A compact umbrella can provide protection from rain while you’re out and about. Choose one with a sturdy handle and durable fabric that can withstand windy conditions. 3. Keep important items dry: Store your valuables, such as your phone, wallet, and keys, in a waterproof pouch or bag to keep them dry during rain showers. 4. Plan for power outages: In case of heavy rain, it’s essential to have a backup plan for lighting and charging your devices. Consider investing in a portable power bank or a battery-powered lantern. 5. Be aware of flood warnings: If there’s a risk of flooding in your area, stay informed about the situation through local news and emergency alerts. Evacuate if necessary, and avoid driving or walking through flooded areas. 6. Stay safe on the road: Reduce your speed and increase your following distance when driving in rain to ensure better control of your vehicle. Avoid driving through standing water, as it can be difficult to gauge the depth of the water and your vehicle may stall or be swept away. 7. Have a plan for pets: If you have pets, make sure they’re safe during rain showers. Provide them with a warm and dry place to wait out the storm, and keep an eye on their behavior in case of any distress. 8. Be prepared for power outages: In case of heavy rain, there’s a risk of power outages. Keep flashlights, batteries, and other essential items in an easily accessible location. 9. Stay informed: Keep yourself updated about the weather forecast and any emergency alerts in your area. Sign up for weather notifications on your phone or follow local news to stay informed. 10. Have a backup plan: In case of unexpected events during rain showers, have a backup plan for essential items like food, water, and first aid kits. This will help you cope with any unexpected situations that may arise. By following these tips, you can ensure your safety and well-being during rain showers. [end of text]
雨降りの準備はどうしたらいいですか?
雨に備えておけば、悪天候でも安全と快適さを確保できます。 小雨、大雨、雷雨など、さまざまな種類の雨に応じて計画を立ててください。 雨に備えるためのヒントをいくつかご紹介します。 1. 適切な服装: 防水ジャケットやポンチョなどの通気性のある服を重ね着し、濡れた表面で滑らないようにトラクションの優れた丈夫な靴を履いてください。 2. 傘を持っていきましょう:コンパクトな傘があると、外出中の雨を防ぐことができます。 丈夫なハンドルと強風の条件に耐えられる耐久性のある生地を備えたものを選択してください。 3. 重要なアイテムを濡れた状態に保つ: 携帯電話、財布、鍵などの貴重品は、雨が降っても濡れないように防水ポーチやバッグに入れて保管してください。 4. 停電の計画: 大雨に備えて、照明とデバイスの充電のためのバックアップ計画を立てることが重要です。 ポータブル電源バンクや電池式ランタンへの投資を検討してください。 5. 洪水警報に注意してください。お住まいの地域で洪水の危険がある場合は、地元のニュースや緊急警報を通じて状況を常に把握してください。 必要に応じて避難し、浸水した地域を運転したり歩いたりすることは避けてください。 6. 道路上での安全を確保する: 雨の中で運転する場合は、速度を落とし、車間距離を広げて、車両の制御を向上させます。 水の深さを測るのが難しく、車が失速したり流されたりする可能性があるため、停滞した水の中を運転することは避けてください。 7. ペットのための計画を立てる: ペットを飼っている場合は、雨が降ったときにペットが安全であることを確認してください。 嵐が過ぎるのを待つために暖かくて乾燥した場所を提供し、何か苦境に陥った場合に備えて彼らの行動に注意を払ってください。 8. 停電に備えてください: 大雨の場合、停電の危険があります。 懐中電灯、電池、その他の必需品をアクセスしやすい場所に保管してください。 9. 最新情報を入手: 天気予報や、お住まいの地域の緊急警報について常に最新の情報を入手してください。 携帯電話で天気予報の通知に登録するか、ローカル ニュースをフォローして最新情報を入手してください。 10. バックアップ計画を立ててください: 雨が降ったときに予期せぬ事態が発生した場合に備えて、食料、水、応急処置セットなどの必需品のバックアップ計画を立ててください。 これは、起こり得る予期せぬ状況に対処するのに役立ちます。 これらのヒントに従うことで、にわか雨の際の安全と健康を確保できます。
長文で応答が返ってきましたが、正解というか馬鹿丁寧というか、まったく問題なしです。
Appendix
HuggingFaceのその他
Leave a Reply