fastLLaMa ist ein experimentelles Hochleistungsrahmen, das die Herausforderungen im Zusammenhang mit der Bereitstellung von großsprachigen Modellen (LLMs) in Produktionsumgebungen in Angriff nehmen soll.
Es bietet eine benutzerfreundliche Python-Schnittstelle zu einer C ++ -Bibliothek, llama.cpp, mit der Entwickler benutzerdefinierte Workflows erstellen, anpassungsfähige Protokollierung implementieren und die Kontexte zwischen den Sitzungen nahtlos wechseln können. Dieser Rahmen ist auf die Verbesserung der Effizienz des Betriebs von LLMs im Maßstab ausgerichtet, wobei sich die fortlaufende Entwicklung auf die Einführung von Funktionen wie optimierte Kaltstockzeiten, die Unterstützung der INT4 -Unterstützung für NVIDIA -GPUs, das Model -Artefaktmanagement und die Unterstützung mehrerer Programmiersprachen konzentriert.
___ __ _ _ __ __
| | '___ ___ _| |_ | | | | ___ | ___
| |-<_> |<_-< | | | |_ | |_ <_> || |<_> |
|_| <___|/__/ |_| |___||___|<___||_|_|_|<___|
.+*+-.
-%#--
:=***%*++=.
:+=+**####%+
++=+*%#
.*+++==-
::--:. .**++=::
#%##*++=...... =*+==-::
.@@@*@%*==-==-==---:::::------::==*+==--::
%@@@@+--====+===---=---==+=======+++----:
.%@@*++*##***+===-=====++++++*++*+====++.
:@@%*##%@@%#*%#+==++++++=++***==-=+==+=-
%@%%%%%@%#+=*%*##%%%@###**++++==--==++
#@%%@%@@##**%@@@%#%%%%**++*++=====-=*-
-@@@@@@@%*#%@@@@@@@%%%%#+*%#++++++=*+.
+@@@@@%%*-#@@@@@@@@@@@%%@%**#*#+=-.
#%%###%: ..+#%@@@@%%@@@@%#+-
:***#*- ... *@@@%*+:
=***= -@%##**.
:#*++ -@#-:*=.
=##- .%*..##
+*- *: +-
:+- :+ =.
=-. *+ =-
:-:- =-- :::
aio_read für POSIX. io_uring . Cmake
Für Linux:
sudo apt-get -y install cmake
Für OS X:
brew install cmake
Für Fenster
Laden Sie CMake-*. Exe Installer von der Download-Seite herunter und führen Sie es aus.
GCC 11 oder mehr
Minimum C ++ 17
Python 3.x
fastLLaMa durch PIP -Verwendung zu installieren
pip install git+https://github.com/PotatoSpudowski/fastLLaMa.git@mainFastllama einfach laufen zu importieren
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
) Um die Sitzung zu speichern, können Sie die Methode save_state verwenden.
res = model . save_state ( "./models/fast_llama.bin" ) Verwenden Sie zum Laden der Sitzung die Methode load_state .
res = model . load_state ( "./models/fast_llama.bin" ) Um die Sitzung zurückzusetzen, verwenden Sie die reset -Methode.
model . reset () Um den Lora -Adapter während der Laufzeit anzubringen, verwenden Sie die Methode attach_lora .
LORA_ADAPTER_PATH = "./models/ALPACA-7B-ADAPTER/ggml-adapter-model.bin"
model . attach_lora ( LORA_ADAPTER_PATH )Hinweis: Es ist eine gute Idee, den Zustand des Modells nach dem Anbringen eines Lora -Adapters zurückzusetzen.
Um den Lora -Adapter während der Laufzeit zu lösen, verwenden Sie die Methode detach_lora .
model . detach_lora () Verwenden Sie die Verwirrungsmethode, um die perplexity zu kakulieren.
with open ( "test.txt" , "r" ) as f :
data = f . read ( 8000 )
total_perplexity = model . perplexity ( data )
print ( f"Total Perplexity: { total_perplexity :.4f } " ) Verwenden Sie die Einbettung des Modells mit der Methode get_embeddings .
embeddings = model . get_embeddings () Um die Protokolls des Modells zu erhalten, verwenden Sie die Methode 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 ) Weitere Klarheit finden Sie in den examples/python/ Ordner.
# 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 stateBefolgen Sie die Anweisungen in den jeweiligen Filialen, um den WebSocket -Server und die Webui auszuführen.
Da die Modelle derzeit voll in den Speicher geladen sind, benötigen Sie einen ausreichenden Speicherplatz, um sie zu speichern, und ausreichend RAM, um sie zu laden. Im Moment sind Speicher- und Festplattenanforderungen gleich.
| Modellgröße | Originalgröße | quantisierte Größe (4-Bit) |
|---|---|---|
| 7b | 13 GB | 3,9 GB |
| 13b | 24 GB | 7,8 GB |
| 30b | 60 GB | 19,5 GB |
| 65b | 120 GB | 38,5 GB |
Info: Die Laufzeit erfordert möglicherweise zusätzlichen Speicher während der Inferenz!
(Hängt von Hyperparmetern ab, die während der Modellinitialisierung verwendet werden)