ollama 自我延伸支持

wfveoks0  于 6个月前  发布在  其他
关注(0)|答案(7)|浏览(159)

我不确定所有的事情都会涉及到什么,但是有一些事情正在引起关注,那就是“自扩展”。在这种情况下,似乎有可能使模型在比它们最初设计更大的上下文尺寸中工作。
在一个假设的结果中,如果模型在请求的上下文大于训练的上下文时自动进行自我扩展,那将是非常惊人的。
一些相关的链接:
https://www.reddit.com/r/LocalLLaMA/comments/194mmki/selfextend_works_for_phi2_now_looks_good/
ggerganov/llama.cpp#4889

bn31dyow

bn31dyow2#

+1给我,我很想得到更多关于Phi-2的信息。

fzsnzjdm

fzsnzjdm3#

ggerganov/llama.cpp#4963似乎支持在llama.cpp的main和server中。

nfeuvbwi

nfeuvbwi4#

根据最新的发布说明,(标记此提交 72b12c3 )llama.cpp已升级到 b1999 ,这是上周的版本,其中在3周前添加了自扩展支持。因此,看来支持的基础已经存在。
那么问题是,它是否会通过我的模型文件中的参数集传递?还是每个参数都需要特定的编码?
在这里有更详细的描述:ggerganov/llama.cpp#4886 (评论)
首先,将-c设置为您想要实现的上下文,例如-c 8192。
接下来,考虑到模型的原始训练上下文为T(假设T = 2048),您希望将G >= 8192 / T,因此在此情况下:--grp-attn-n 4 或 --grp-attn-n 8。
--grp-attn-w对应于论文中的W。我认为作者通常使用512,但我认为您可以将其提高到T/2 - 因此在此情况下--grp-attn-w 1024。
此外,G必须是W的倍数。

  1. 根据 transformers docs on huggingface mistral 0.1 在8k上下文长度上进行了训练。
  2. 根据 the paper 0.2 也在校正上下文中进行了训练。
    请查看 selfextend for mistral 0.1 的实现,我们得到以下参数:
g_size=2,  # Group size for SelfExtend attention
        w_size=1024,  # Window size for SelfExtend attention

ChatGPT说:
根据提供的推理,您可以使用以下公式计算上下文大小:
上下文大小 = G x T

  • ( G )是组大小( g_size ),
  • ( T )是原始训练上下文大小。

在这种情况下,( G = 2 )和( T = 8192 ),因此计算出的上下文大小将是:
上下文大小 = 2 x 8192 = 16384
因此,使用 g_size=2 并在校正上下文窗口中训练了一个8192个令牌的模型,结果上下文大小将为16384个令牌。

xn1cxnb4

xn1cxnb45#

此外,根据之前显示的添加内容,相对容易地添加所需的参数:#276 Configurable Rope Frequency Parameters

gywdnpxw

gywdnpxw6#

任何人都有一个Go环境,想要为这个创建一个PR吗?感谢@cognitivetech提供的参考。

xpcnnkqh

xpcnnkqh7#

好的,我做了一些进一步的调查。首先,这些文件现在已经移动到这里:
https://github.com/ollama/ollama/blob/main/api/types.go
https://github.com/ollama/ollama/blob/main/llm/llama.go
其次,在 types.go 中有两处添加了选项。

// Options specfied in GenerateRequest, if you add a new option here add it to the API docs also
type Options struct {
	Runner

	// Predict options used at runtime
	NumKeep          int      `json:"num_keep,omitempty"`
	Seed             int      `json:"seed,omitempty"`
	NumPredict       int      `json:"num_predict,omitempty"`
	TopK             int      `json:"top_k,omitempty"`
	TopP             float32  `json:"top_p,omitempty"`
	TFSZ             float32  `json:"tfs_z,omitempty"`
	TypicalP         float32  `json:"typical_p,omitempty"`
	RepeatLastN      int      `json:"repeat_last_n,omitempty"`
	Temperature      float32  `json:"temperature,omitempty"`
	RepeatPenalty    float32  `json:"repeat_penalty,omitempty"`
	PresencePenalty  float32  `json:"presence_penalty,omitempty"`
	FrequencyPenalty float32  `json:"frequency_penalty,omitempty"`
	Mirostat         int      `json:"mirostat,omitempty"`
	MirostatTau      float32  `json:"mirostat_tau,omitempty"`
	MirostatEta      float32  `json:"mirostat_eta,omitempty"`
	PenalizeNewline  bool     `json:"penalize_newline,omitempty"`
	Stop             []string `json:"stop,omitempty"`
}

// Runner options which must be set when the model is loaded into memory
type Runner struct {
	UseNUMA            bool    `json:"numa,omitempty"`
	NumCtx             int     `json:"num_ctx,omitempty"`
	NumBatch           int     `json:"num_batch,omitempty"`
	NumGQA             int     `json:"num_gqa,omitempty"`
	NumGPU             int     `json:"num_gpu,omitempty"`
	MainGPU            int     `json:"main_gpu,omitempty"`
	LowVRAM            bool    `json:"low_vram,omitempty"`
	F16KV              bool    `json:"f16_kv,omitempty"`
	LogitsAll          bool    `json:"logits_all,omitempty"`
	VocabOnly          bool    `json:"vocab_only,omitempty"`
	UseMMap            bool    `json:"use_mmap,omitempty"`
	UseMLock           bool    `json:"use_mlock,omitempty"`
	EmbeddingOnly      bool    `json:"embedding_only,omitempty"`
	RopeFrequencyBase  float32 `json:"rope_frequency_base,omitempty"`
	RopeFrequencyScale float32 `json:"rope_frequency_scale,omitempty"`
	NumThread          int     `json:"num_thread,omitempty"`
}

https://github.com/sdan/selfextend/blob/master/configuration_mistral.py
这是用于存储 [ MistralModel ] 配置的配置类。根据指定的参数示例化一个Mistral模型,定义模型架构。使用默认值示例化一个配置将产生类似于Mistral-7B-v0.1或Mistral-7B-Instruct-v0.1的配置。

  • 强调我的注解

我认为这意味着在将模型加载到内存时设置了运行器选项

相关问题