wjohn1483.github.io
  • Posts
  • Archive
  • Audio to Scene
  • Give Feedback
  • About

如何在本機上跑Vicuna模型

 
  • Tool
  • Natural-Language-Processing
  • Apr 30, 2023

隨著LLaMA的推出,有越來越多人基於該模型做了各式各樣的調校,而Vicuna是其中的一種,這篇文章記錄一下如何在自己的機器上面將Vicuna跑起來。

Vicuna

Vicuna是一個基於LLaMA的大型語言模型(LLM),開發團隊使用GPT-4來當作評審去評論Vicuna和ChatGPT的回答哪個比較好,而Vicuna在測試裡面達到了90%的水準,是個表現相當不錯的模型,個人覺得回答的效果比起Alpaca和單純的LLaMA還要好上不少。

底下會講一下如何在本機上面執行Vicuna,在ChatGPT跑不出你想要的結果時,不妨嘗試將問題問看看Vicuna。

下載LLaMA

由於Vicuna是基於LLaMA的模型,首先我們會需要先拿到LLaMA的參數,正規的方式是去這份google表單上面填寫資料,跟Meta申請使用許可,不過網路社群上也提供了很多其他的方式來讓大家下載,像是pyllama。

pip3 install pyllama -U
python -m llama.download --model_size 13B --folder /tmp/pyllama_data

只要下上面的指令就能簡單下載到LLaMA 13B的參數了,詳細的說明可以參考pyllama的文件。

在執行的過程中有可能連線會卡住,可以使用Ctrl+C將連線斷開以後執行第二行的指令,它會從斷掉的地方繼續下載,不用怕會需要從頭下載,下載下來的參數僅限於研究的用途,不應該再被拿去做其他使用。

轉成huggingface的格式

在下載好LLaMA的參數以後,我們需要將下載下來的參數轉成hugging face的格式,為此我們需要安裝transformers在機器上,而Vicuna要求transformers的版本要在4.28.0以上,如果直接用pip安裝的版本不夠高的話,可以直接下下面的指令來安裝最新版。

pip3 install https://github.com/huggingface/transformers/archive/refs/heads/main.zip

接著就能將LLaMA轉成hugging face的格式了

python3 ./convert_llama_weights_to_hf.py \
    --input_dir ./pyllama_data \
    --model_size 13B \
    --output_dir ./llama_hf

上面指令裡面的convert_llama_weights_to_hf.py是使用LLaMA在hugging face頁面上所提供的這份,而./pyllama_data是上面使用pyllama下載下來的資料夾、./llama_hf是輸出的資料夾。

下載Vicuna delta

Vicuna的參數放在他們的hugging face帳戶上,但因為裡面有包含了非常大檔案的參數檔,所以在使用git clone下來之前會需要先安裝Git Large File Storage(LFS)才能將大檔案下載下來,底下是在Cent OS上安裝並下載的指令。

curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.rpm.sh | sudo bash
sudo yum install -y git-lfs
git lfs install
git clone https://huggingface.co/lmsys/vicuna-13b-delta-v1.1

Apply Vicuna delta

有了LLaMA的參數和Vicuna的delta後,我們需要將delta套用在LLaMA的參數上來獲得實際的Vicuna,套用的方法是使用pip fschat的套件。

pip3 install fschat
python3 -m fastchat.model.apply_delta \
    --base ./llama_hf \
    --target ./vicuna-13b \
    --delta ./vicuna-13b-delta-v1.1

使用套件裡面的apply_delta搭配先前準備好的hugging face格式的LLaMA和Vicuna delta就能獲得實際的Vicuna了,值得一提的是套用7B的模型需要30GB的RAM,而13B的模型需要60GB,如果RAM沒有那麼足夠的話,可以參考文件當中的方式來降低記憶體的使用。

使用Vicuna

準備好Vicuna得參數後,便能使用fastchat提供的function來在terminal上面跟Vicuna對話了,詳細的參數可以參考文件。

python3 -m fastchat.serve.cli --model-path ./vicuna-13b-delta-v1.1

如果想用網頁版的方式來互動,fastchat也有使用Gradio來包成網頁,詳細的說明請參考文件。

Vicuna有另外推出了FastChat-T5供大家在商業上使用,指令跟上面文章的相同,只需要將模型的路徑指到FastChat-T5就行了。

PREVIOUS將PySpark Executor的Log蒐集到Driver
NEXT在本機使用Stable Diffusion產生圖片
Search