使用GGML库在C/C ++中实现的变压器模型的Python绑定。
另请参阅Chatdocs
型号 | 型号类型 | 库达 | 金属 |
---|---|---|---|
GPT-2 | gpt2 | ||
gpt-j,gpt4all-j | gptj | ||
gpt-neox,稳定 | gpt_neox | ||
鹘 | falcon | ✅ | |
美洲驼,骆驼2 | llama | ✅ | ✅ |
MPT | mpt | ✅ | |
Starcoder,Starchat | gpt_bigcode | ✅ | |
多莉V2 | dolly-v2 | ||
补充 | replit |
pip install ctransformers
它为所有模型提供了一个统一的接口:
from ctransformers import AutoModelForCausalLM
llm = AutoModelForCausalLM . from_pretrained ( "/path/to/ggml-model.bin" , model_type = "gpt2" )
print ( llm ( "AI is going to" ))
在Google Colab中运行
要流式传输输出,请设置stream=True
:
for text in llm ( "AI is going to" , stream = True ):
print ( text , end = "" , flush = True )
您可以直接通过拥抱面板来加载模型:
llm = AutoModelForCausalLM . from_pretrained ( "marella/gpt-2-ggml" )
如果模型存储库有多个模型文件( .bin
或.gguf
文件),请使用以下方式指定模型文件
llm = AutoModelForCausalLM . from_pretrained ( "marella/gpt-2-ggml" , model_file = "ggml-model.bin" )
注意:这是一个实验特征,将来可能会改变。
与它一起使用?变形金刚,使用:创建模型和令牌器:
from ctransformers import AutoModelForCausalLM , AutoTokenizer
model = AutoModelForCausalLM . from_pretrained ( "marella/gpt-2-ggml" , hf = True )
tokenizer = AutoTokenizer . from_pretrained ( model )
在Google Colab中运行
你可以使用吗?变形金刚文本生成管道:
from transformers import pipeline
pipe = pipeline ( "text-generation" , model = model , tokenizer = tokenizer )
print ( pipe ( "AI is going to" , max_new_tokens = 256 ))
你可以使用吗?变形金刚生成参数:
pipe ( "AI is going to" , max_new_tokens = 256 , do_sample = True , temperature = 0.8 , repetition_penalty = 1.1 )
你可以使用吗?变形金刚的象征器:
from ctransformers import AutoModelForCausalLM
from transformers import AutoTokenizer
model = AutoModelForCausalLM . from_pretrained ( "marella/gpt-2-ggml" , hf = True ) # Load model from GGML model repo.
tokenizer = AutoTokenizer . from_pretrained ( "gpt2" ) # Load tokenizer from original model repo.
它被整合到兰班。请参阅Langchain文档。
要在GPU上运行一些模型层,请设置gpu_layers
参数:
llm = AutoModelForCausalLM . from_pretrained ( "TheBloke/Llama-2-7B-GGML" , gpu_layers = 50 )
在Google Colab中运行
使用以下方式安装CUDA库
pip install ctransformers[cuda]
要启用ctransformers
支持,请使用:
CT_HIPBLAS=1 pip install ctransformers --no-binary ctransformers
要启用ctransformers
支持,请使用:
CT_METAL=1 pip install ctransformers --no-binary ctransformers
注意:这是一个实验特征,只有使用Exllama支持Llama模型。
使用以下方式安装其他依赖项
pip install ctransformers[gptq]
使用以下方式加载GPTQ模型:
llm = AutoModelForCausalLM . from_pretrained ( "TheBloke/Llama-2-7B-GPTQ" )
在Google Colab中运行
如果模型名称或路径不包含单词
gptq
则指定model_type="gptq"
。
它也可以与Langchain一起使用。低级API并未得到完全支持。
范围 | 类型 | 描述 | 默认 |
---|---|---|---|
top_k | int | 用于采样的顶级值。 | 40 |
top_p | float | 用于采样的最高P值。 | 0.95 |
temperature | float | 用于采样的温度。 | 0.8 |
repetition_penalty | float | 用于抽样的重复罚款。 | 1.1 |
last_n_tokens | int | 用于重复罚款的最后一个令牌数量。 | 64 |
seed | int | 用于采样令牌的种子价值。 | -1 |
max_new_tokens | int | 最大生成的新令牌数量。 | 256 |
stop | List[str] | 遇到时停止生成的序列列表。 | None |
stream | bool | 是否流式传输生成的文本。 | False |
reset | bool | 是否在生成文本之前要重置模型状态。 | True |
batch_size | int | 用于在一个提示中评估令牌的批次大小。 | 8 |
threads | int | 用于评估令牌的线程数。 | -1 |
context_length | int | 最大使用上下文长度。 | -1 |
gpu_layers | int | 在GPU上运行的层数。 | 0 |
注意:当前只有Llama,MPT和Falcon模型支持
context_length
参数。
AutoModelForCausalLM
AutoModelForCausalLM.from_pretrained
from_pretrained (
model_path_or_repo_id : str ,
model_type : Optional [ str ] = None ,
model_file : Optional [ str ] = None ,
config : Optional [ ctransformers . hub . AutoConfig ] = None ,
lib : Optional [ str ] = None ,
local_files_only : bool = False ,
revision : Optional [ str ] = None ,
hf : bool = False ,
** kwargs
) → LLM
从本地文件或远程存储库中加载语言模型。
args:
model_path_or_repo_id
:模型文件或目录的路径或拥抱脸部集线器模型存储库的名称。model_type
:模型类型。model_file
:repo或目录中模型文件的名称。config
: AutoConfig
对象。lib
:通往共享库或avx2
, avx
, basic
的路径。local_files_only
:是否仅查看本地文件(即,请勿尝试下载模型)。revision
:要使用的特定模型版本。它可以是分支名称,标签名称或提交ID。hf
:是否要创建一个拥抱的面部变压器模型。返回: LLM
对象。
LLM
类LLM.__init__
__init__ (
model_path : str ,
model_type : Optional [ str ] = None ,
config : Optional [ ctransformers . llm . Config ] = None ,
lib : Optional [ str ] = None
)
从本地文件加载语言模型。
args:
model_path
:模型文件的路径。model_type
:模型类型。config
: Config
对象。lib
:通往共享库或avx2
, avx
, basic
的路径。 开始令牌的开始。
配置对象。
模型的上下文长度。
输入嵌入。
末端令牌。
非均衡的对数概率。
模型文件的路径。
模型类型。
填充令牌。
词汇中的令牌数量。
LLM.detokenize
detokenize ( tokens : Sequence [ int ], decode : bool = True ) → Union [ str , bytes ]
将令牌列表转换为文本。
args:
tokens
:令牌列表。decode
:是否将文本解码为UTF-8字符串。返回:所有令牌的组合文本。
LLM.embed
embed (
input : Union [ str , Sequence [ int ]],
batch_size : Optional [ int ] = None ,
threads : Optional [ int ] = None
) → List [ float ]
计算文本或令牌列表的嵌入。
注意:目前只有骆驼和猎鹰模型支持嵌入。
args:
input
:输入文本或令牌列表以获取嵌入。batch_size
:用于评估令牌的批次大小。默认值: 8
threads
:用于评估令牌的线程数。默认值: -1
返回:输入嵌入。
LLM.eval
eval (
tokens : Sequence [ int ],
batch_size : Optional [ int ] = None ,
threads : Optional [ int ] = None
) → None
评估令牌列表。
args:
tokens
:要评估的令牌列表。batch_size
:用于评估令牌的批次大小。默认值: 8
threads
:用于评估令牌的线程数。默认值: -1
LLM.generate
generate (
tokens : Sequence [ int ],
top_k : Optional [ int ] = None ,
top_p : Optional [ float ] = None ,
temperature : Optional [ float ] = None ,
repetition_penalty : Optional [ float ] = None ,
last_n_tokens : Optional [ int ] = None ,
seed : Optional [ int ] = None ,
batch_size : Optional [ int ] = None ,
threads : Optional [ int ] = None ,
reset : Optional [ bool ] = None
) → Generator [ int , NoneType , NoneType ]
从代币列表中生成新的令牌。
args:
tokens
:从中生成令牌的令牌列表。top_k
:用于采样的顶级值。默认值: 40
top_p
:用于采样的顶部P值。默认值: 0.95
temperature
:用于采样的温度。默认值: 0.8
repetition_penalty
:用于抽样的重复惩罚。默认值: 1.1
last_n_tokens
:用于重复惩罚的最后一个令牌数量。默认值: 64
seed
:用于采样令牌的种子价值。默认值: -1
batch_size
:用于评估令牌的批次大小。默认值: 8
threads
:用于评估令牌的线程数。默认值: -1
reset
:是否在生成文本之前重置模型状态。默认值: True
返回:生成的令牌。
LLM.is_eos_token
is_eos_token ( token : int ) → bool
检查令牌是否是末端令牌。
args:
token
:检查的令牌。返回:如果令牌是一个序列的令牌, False
True
。
LLM.prepare_inputs_for_generation
prepare_inputs_for_generation (
tokens : Sequence [ int ],
reset : Optional [ bool ] = None
) → Sequence [ int ]
删除过去评估的输入令牌,并更新LLM上下文。
args:
tokens
:输入令牌列表。reset
:是否在生成文本之前重置模型状态。默认值: True
退货:要评估的令牌列表。
LLM.reset
reset () → None
自0.2.27以来弃用。
LLM.sample
sample (
top_k : Optional [ int ] = None ,
top_p : Optional [ float ] = None ,
temperature : Optional [ float ] = None ,
repetition_penalty : Optional [ float ] = None ,
last_n_tokens : Optional [ int ] = None ,
seed : Optional [ int ] = None
) → int
从模型中采样一个令牌。
args:
top_k
:用于采样的顶级值。默认值: 40
top_p
:用于采样的顶部P值。默认值: 0.95
temperature
:用于采样的温度。默认值: 0.8
repetition_penalty
:用于抽样的重复惩罚。默认值: 1.1
last_n_tokens
:用于重复惩罚的最后一个令牌数量。默认值: 64
seed
:用于采样令牌的种子价值。默认值: -1
回报:采样令牌。
LLM.tokenize
tokenize ( text : str , add_bos_token : Optional [ bool ] = None ) → List [ int ]
将文本转换为令牌列表。
args:
text
:象征性的文字。add_bos_token
:是否添加开始序列令牌。返回:令牌列表。
LLM.__call__
__call__ (
prompt : str ,
max_new_tokens : Optional [ int ] = None ,
top_k : Optional [ int ] = None ,
top_p : Optional [ float ] = None ,
temperature : Optional [ float ] = None ,
repetition_penalty : Optional [ float ] = None ,
last_n_tokens : Optional [ int ] = None ,
seed : Optional [ int ] = None ,
batch_size : Optional [ int ] = None ,
threads : Optional [ int ] = None ,
stop : Optional [ Sequence [ str ]] = None ,
stream : Optional [ bool ] = None ,
reset : Optional [ bool ] = None
) → Union [ str , Generator [ str , NoneType , NoneType ]]
从提示中生成文本。
args:
prompt
:提示从中生成文本。max_new_tokens
:要生成的新令牌的最大数量。默认值: 256
top_k
:用于采样的顶级值。默认值: 40
top_p
:用于采样的顶部P值。默认值: 0.95
temperature
:用于采样的温度。默认值: 0.8
repetition_penalty
:用于抽样的重复惩罚。默认值: 1.1
last_n_tokens
:用于重复惩罚的最后一个令牌数量。默认值: 64
seed
:用于采样令牌的种子价值。默认值: -1
batch_size
:用于评估令牌的批次大小。默认值: 8
threads
:用于评估令牌的线程数。默认值: -1
stop
:遇到时停止生成的序列列表。默认值: None
stream
:是否流式传输生成的文本。默认值: False
reset
:是否在生成文本之前重置模型状态。默认值: True
返回:生成的文本。
麻省理工学院