fastLLaMa es un marco experimental de alto rendimiento diseñado para enfrentar los desafíos asociados con la implementación de grandes modelos de idiomas (LLM) en entornos de producción.
Ofrece una interfaz de Python fácil de usar a una biblioteca C ++, llama.cpp, que permite a los desarrolladores crear flujos de trabajo personalizados, implementar el registro adaptable y cambiar sin problemas con los contextos entre las sesiones. Este marco está orientado a mejorar la eficiencia de las LLM operativas a escala, con un desarrollo continuo centrado en la introducción de características como tiempos de arranque en frío optimizados, soporte INT4 para GPU NVIDIA, gestión de artefactos modelo y soporte de lenguaje de programación múltiple.
___ __ _ _ __ __
| | '___ ___ _| |_ | | | | ___ | ___
| |-<_> |<_-< | | | |_ | |_ <_> || |<_> |
|_| <___|/__/ |_| |___||___|<___||_|_|_|<___|
.+*+-.
-%#--
:=***%*++=.
:+=+**####%+
++=+*%#
.*+++==-
::--:. .**++=::
#%##*++=...... =*+==-::
.@@@*@%*==-==-==---:::::------::==*+==--::
%@@@@+--====+===---=---==+=======+++----:
.%@@*++*##***+===-=====++++++*++*+====++.
:@@%*##%@@%#*%#+==++++++=++***==-=+==+=-
%@%%%%%@%#+=*%*##%%%@###**++++==--==++
#@%%@%@@##**%@@@%#%%%%**++*++=====-=*-
-@@@@@@@%*#%@@@@@@@%%%%#+*%#++++++=*+.
+@@@@@%%*-#@@@@@@@@@@@%%@%**#*#+=-.
#%%###%: ..+#%@@@@%%@@@@%#+-
:***#*- ... *@@@%*+:
=***= -@%##**.
:#*++ -@#-:*=.
=##- .%*..##
+*- *: +-
:+- :+ =.
=-. *+ =-
:-:- =-- :::
aio_read para POSIX. io_uring . CMake
Para Linux:
sudo apt-get -y install cmake
Para OS X:
brew install cmake
Para Windows
Descargar Cmake-*. Exe Installer desde la página de descarga y ejecutarlo.
GCC 11 o más
Mínimo C ++ 17
Python 3.x
Para instalar fastLLaMa a través de Pip Use
pip install git+https://github.com/PotatoSpudowski/fastLLaMa.git@mainPara importar Fastllama solo correr
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
) Para almacenar en caché de la sesión, puede usar el método save_state .
res = model . save_state ( "./models/fast_llama.bin" ) Para cargar la sesión, use el método load_state .
res = model . load_state ( "./models/fast_llama.bin" ) Para restablecer la sesión, use el método reset .
model . reset () Para adjuntar el adaptador LORA durante el tiempo de ejecución, use el método attach_lora .
LORA_ADAPTER_PATH = "./models/ALPACA-7B-ADAPTER/ggml-adapter-model.bin"
model . attach_lora ( LORA_ADAPTER_PATH )Nota: es una buena idea restablecer el estado del modelo después de adjuntar un adaptador Lora.
Para separar el adaptador Lora durante el tiempo de ejecución, use el método detach_lora .
model . detach_lora () Para cacular la perplejidad, use el método perplexity .
with open ( "test.txt" , "r" ) as f :
data = f . read ( 8000 )
total_perplexity = model . perplexity ( data )
print ( f"Total Perplexity: { total_perplexity :.4f } " ) Para obtener los incrustaciones del modelo, use el método get_embeddings .
embeddings = model . get_embeddings () Para obtener los registros del modelo, use el método 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 ) Para obtener más claridad, consulte los examples/python/ carpeta.
# 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 statePara ejecutar el servidor WebSocket y el WebUI, siga las instrucciones sobre las ramas respectivas.
Como los modelos están completamente cargados por completo en la memoria, necesitará un espacio de disco adecuado para guardarlos y suficiente RAM para cargarlos. Por el momento, los requisitos de memoria y disco son los mismos.
| tamaño del modelo | tamaño original | Tamaño cuantificado (4 bits) |
|---|---|---|
| 7b | 13 GB | 3.9 GB |
| 13B | 24 GB | 7.8 GB |
| 30b | 60 GB | 19.5 GB |
| 65b | 120 GB | 38.5 GB |
Información: ¡ El tiempo de ejecución puede requerir memoria adicional durante la inferencia!
(Depende de los hiperparmetros utilizados durante la inicialización del modelo)