fastLLaMa est un cadre expérimental haute performance conçu pour relever les défis associés au déploiement de modèles de grands langues (LLM) dans les environnements de production.
Il propose une interface Python conviviale à une bibliothèque C ++, llama.cpp, permettant aux développeurs de créer des workflows personnalisés, d'implémenter une journalisation adaptable et de changer de manière transparente entre les séances. Ce cadre vise à améliorer l'efficacité des LLM de fonctionnement à grande échelle, avec un développement continu axé sur l'introduction de fonctionnalités telles que les temps de démarrage froids optimisés, la prise en charge INT4 pour les GPU NVIDIA, la gestion des artefacts du modèle et le support de langage multiple de programmation.
___ __ _ _ __ __
| | '___ ___ _| |_ | | | | ___ | ___
| |-<_> |<_-< | | | |_ | |_ <_> || |<_> |
|_| <___|/__/ |_| |___||___|<___||_|_|_|<___|
.+*+-.
-%#--
:=***%*++=.
:+=+**####%+
++=+*%#
.*+++==-
::--:. .**++=::
#%##*++=...... =*+==-::
.@@@*@%*==-==-==---:::::------::==*+==--::
%@@@@+--====+===---=---==+=======+++----:
.%@@*++*##***+===-=====++++++*++*+====++.
:@@%*##%@@%#*%#+==++++++=++***==-=+==+=-
%@%%%%%@%#+=*%*##%%%@###**++++==--==++
#@%%@%@@##**%@@@%#%%%%**++*++=====-=*-
-@@@@@@@%*#%@@@@@@@%%%%#+*%#++++++=*+.
+@@@@@%%*-#@@@@@@@@@@@%%@%**#*#+=-.
#%%###%: ..+#%@@@@%%@@@@%#+-
:***#*- ... *@@@%*+:
=***= -@%##**.
:#*++ -@#-:*=.
=##- .%*..##
+*- *: +-
:+- :+ =.
=-. *+ =-
:-:- =-- :::
aio_read pour POSIX. io_uring . Cmake
Pour Linux:
sudo apt-get -y install cmake
Pour OS X:
brew install cmake
Pour les fenêtres
Téléchargez CMake - *. EXE INSTALLATEUR À partir de la page de téléchargement et exécutez-la.
GCC 11 ou plus
Minimum C ++ 17
Python 3.x
Pour installer fastLLaMa via une utilisation PIP
pip install git+https://github.com/PotatoSpudowski/fastLLaMa.git@mainPour importer Fastllama, il suffit de courir
from fastllama import Model MODEL_PATH = "./models/7B/ggml-model-q4_0.bin"
model = Model (
path = MODEL_PATH , #path to model
num_threads = 8 , #number of threads to use
n_ctx = 512 , #context size of model
last_n_size = 64 , #size of last n tokens (used for repetition penalty) (Optional)
seed = 0 , #seed for random number generator (Optional)
n_batch = 128 , #batch size (Optional)
use_mmap = False , #use mmap to load model (Optional)
) prompt = """Transcript of a dialog, where the User interacts with an Assistant named Bob. Bob is helpful, kind, honest, good at writing, and never fails to answer the User's requests immediately and with precision.
User: Hello, Bob.
Bob: Hello. How may I help you today?
User: Please tell me the largest city in Europe.
Bob: Sure. The largest city in Europe is Moscow, the capital of Russia.
User: """
res = model . ingest ( prompt , is_system_prompt = True ) #ingest model with prompt def stream_token ( x : str ) -> None :
"""
This function is called by the library to stream tokens
"""
print ( x , end = '' , flush = True )
res = model . generate (
num_tokens = 100 ,
top_p = 0.95 , #top p sampling (Optional)
temp = 0.8 , #temperature (Optional)
repeat_penalty = 1.0 , #repetition penalty (Optional)
streaming_fn = stream_token , #streaming function
stop_words = [ "User:" , " n " ] #stop generation when this word is encountered (Optional)
) model = Model (
path = MODEL_PATH , #path to model
num_threads = 8 , #number of threads to use
n_ctx = 512 , #context size of model
last_n_size = 64 , #size of last n tokens (used for repetition penalty) (Optional)
seed = 0 , #seed for random number generator (Optional)
n_batch = 128 , #batch size (Optional)
load_parallel = True
) Pour mettre en cache la session, vous pouvez utiliser la méthode save_state .
res = model . save_state ( "./models/fast_llama.bin" ) Pour charger la session, utilisez la méthode load_state .
res = model . load_state ( "./models/fast_llama.bin" ) Pour réinitialiser la session, utilisez la méthode reset .
model . reset () Pour attacher l'adaptateur LORA pendant l'exécution, utilisez la méthode attach_lora .
LORA_ADAPTER_PATH = "./models/ALPACA-7B-ADAPTER/ggml-adapter-model.bin"
model . attach_lora ( LORA_ADAPTER_PATH )Remarque: c'est une bonne idée de réinitialiser l'état du modèle après avoir attaché un adaptateur LORA.
Pour détacher l'adaptateur LORA pendant l'exécution, utilisez la méthode detach_lora .
model . detach_lora () Pour caculer la perplexité, utilisez la méthode perplexity .
with open ( "test.txt" , "r" ) as f :
data = f . read ( 8000 )
total_perplexity = model . perplexity ( data )
print ( f"Total Perplexity: { total_perplexity :.4f } " ) Pour obtenir les incorporations du modèle, utilisez la méthode get_embeddings .
embeddings = model . get_embeddings () Pour obtenir les logits du modèle, utilisez la méthode get_logits .
logits = model . get_logits () from fastLLaMa import Logger
class MyLogger ( Logger ):
def __init__ ( self ):
super (). __init__ ()
self . file = open ( "logs.log" , "w" )
def log_info ( self , func_name : str , message : str ) -> None :
#Modify this to do whatever you want when you see info logs
print ( f"[Info]: Func(' { func_name } ') { message } " , flush = True , end = '' , file = self . file )
pass
def log_err ( self , func_name : str , message : str ) -> None :
#Modify this to do whatever you want when you see error logs
print ( f"[Error]: Func(' { func_name } ') { message } " , flush = True , end = '' , file = self . file )
def log_warn ( self , func_name : str , message : str ) -> None :
#Modify this to do whatever you want when you see warning logs
print ( f"[Warn]: Func(' { func_name } ') { message } " , flush = True , end = '' , file = self . file ) Pour plus de clarté, consultez les examples/python/ dossier.
# obtain the original LLaMA model weights and place them in ./models
ls ./models
65B 30B 13B 7B tokenizer_checklist.chk tokenizer.model
# convert the 7B model to ggml FP16 format
# python [PythonFile] [ModelPath] [Floattype] [Vocab Only] [SplitType]
python3 scripts/convert-pth-to-ggml.py models/7B/ 1 0
# quantize the model to 4-bits
./build/src/quantize models/7B/ggml-model-f16.bin models/7B/ggml-model-q4_0.bin 2
# run the inference
# Run the scripts from the root dir of the project for now!
python ./examples/python/example.py # Before running this command
# You need to provide the HF model paths here
python ./scripts/export-from-huggingface.py
# Alternatively you can just download the ggml models from huggingface directly and run them!
python3 ./scripts/convert-pth-to-ggml.py models/ALPACA-LORA-7B 1 0
./build/src/quantize models/ALPACA-LORA-7B/ggml-model-f16.bin models/ALPACA-LORA-7B/alpaca-lora-q4_0.bin 2
python ./examples/python/example-alpaca.py # Download lora adapters and paste them inside models folder
# https://huggingface.co/tloen/alpaca-lora-7b
python scripts/convert-lora-to-ggml.py models/ALPACA-7B-ADAPTER/ -t fp32
# Change -t to fp16 to use fp16 weights
# Inorder to use LoRA adapters without caching, pass the --no-cache flag
# - Only supported for fp32 adapter weights
python examples/python/example-lora-adapter.py
# Make sure to set paths correctly for the base model and adapter inside the example
# Commands:
# load_lora: Attaches the adapter to the base model
# unload_lora: Deattaches the adapter (Deattach for fp16 is yet to be added!)
# reset: Resets the model statePour exécuter le serveur WebSocket et le WebUI, suivez les instructions sur les branches respectives.
Comme les modèles sont actuellement entièrement chargés en mémoire, vous aurez besoin d'espace disque adéquat pour les sauver et suffisamment de RAM pour les charger. Pour le moment, les exigences de mémoire et de disque sont les mêmes.
| taille du modèle | taille d'origine | Taille quantifiée (4 bits) |
|---|---|---|
| 7b | 13 Go | 3,9 Go |
| 13B | 24 Go | 7,8 Go |
| 30b | 60 Go | 19,5 Go |
| 65b | 120 Go | 38,5 Go |
Info: le temps d'exécution peut nécessiter une mémoire supplémentaire pendant l'inférence!
(Dépend des hyperparmers utilisés lors de l'initialisation du modèle)