
AI00 RWKV Server是基於web-rwkv推理引擎的RWKV語言模型的推理API服務器。
它支持Vulkan平行和並發批處理推理,並且可以在支持Vulkan的所有GPU上運行。不需要NVIDIA卡!!! AMD卡甚至集成的圖形都可以加速!!!
無需笨重的pytorch , CUDA和其他運行時環境,它是緊湊的,可以開箱即用!
與OpenAI的Chatgpt API接口兼容。
根據麻省理工學院許可,100%開源和商業上可用。
如果您正在尋找快速,高效且易於使用的LLM API服務器,那麼AI00 RWKV Server是您的最佳選擇。它可用於各種任務,包括聊天機器人,文本生成,翻譯和問答。
立即加入AI00 RWKV Server社區,並體驗AI的魅力!
QQ Group for for Communication:30920262
RWKV模型,它具有高性能和準確性Vulkan推理加速度,您無需CUDA即可享受GPU加速度!支持AMD卡,集成圖形和支持Vulkan所有GPUpytorch , CUDA和其他運行時環境,它是緊湊的,可以開箱即用!直接從發行版中下載最新版本
下載模型後,將模型放在assets/models/路徑中,例如assets/models/RWKV-x060-World-3B-v2-20240228-ctx4096.st
可選地修改assets/configs/Config.toml用於模型配置,例如模型路徑,量化層等。
在命令行中運行
$ ./ai00_rwkv_server打開瀏覽器,然後訪問http:// localhost:65530(https:// localhost:65530),如果啟用了tls )
安裝生鏽
克隆這個存儲庫
$ git clone https://github.com/cgisky1980/ai00_rwkv_server.git
$ cd ai00_rwkv_server下載模型後,將模型放在assets/models/路徑中,例如assets/models/RWKV-x060-World-3B-v2-20240228-ctx4096.st
編譯
$ cargo build --release彙編後,運行
$ cargo run --release打開瀏覽器,然後訪問http:// localhost:65530(https:// localhost:65530),如果啟用了tls )
它僅支持現在使用.st擴展名的Safetensors模型。使用使用火炬保存的.pth擴展名保存的模型需要在使用前轉換。
下載.pth模型
(建議)運行Python腳本convert2ai00.py或convert_safetensors.py :
$ python ./convert2ai00.py --input /path/to/model.pth --output /path/to/model.st要求:Python,安裝了torch和safetensors 。
如果您不想安裝Python,則可以在版本中找到一個可執行的稱為converter的可執行文件。跑步
$ ./converter --input /path/to/model.pth --output /path/to/model.st$ cargo run --release --package converter -- --input /path/to/model.pth --output /path/to/model.st.st模型中的assets/models/路徑中,並修改assets/configs/Config.toml中的模型路徑--config :配置文件路徑(默認: assets/configs/Config.toml )--ip :IP地址服務器綁定到--port :運行端口 API服務從端口65530開始,數據輸入和輸出格式遵循OpenAI API規範。請注意,某些API(例如chat和completions具有用於高級功能的其他可選字段。請訪問http:// localhost:65530/API-DOCS用於API模式。
/api/oai/v1/models/api/oai/models/api/oai/v1/chat/completions/api/oai/chat/completions/api/oai/v1/completions/api/oai/completions/api/oai/v1/embeddings/api/oai/embeddings以下是python中AI00 API調用的一個離職示例:
import openai
class Ai00 :
def __init__ ( self , model = "model" , port = 65530 , api_key = "JUSTSECRET_KEY" ) :
openai . api_base = f"http://127.0.0.1: { port } /api/oai"
openai . api_key = api_key
self . ctx = []
self . params = {
"system_name" : "System" ,
"user_name" : "User" ,
"assistant_name" : "Assistant" ,
"model" : model ,
"max_tokens" : 4096 ,
"top_p" : 0.6 ,
"temperature" : 1 ,
"presence_penalty" : 0.3 ,
"frequency_penalty" : 0.3 ,
"half_life" : 400 ,
"stop" : [ ' x00 ' , ' n n ' ]
}
def set_params ( self , ** kwargs ):
self . params . update ( kwargs )
def clear_ctx ( self ):
self . ctx = []
def get_ctx ( self ):
return self . ctx
def continuation ( self , message ):
response = openai . Completion . create (
model = self . params [ 'model' ],
prompt = message ,
max_tokens = self . params [ 'max_tokens' ],
half_life = self . params [ 'half_life' ],
top_p = self . params [ 'top_p' ],
temperature = self . params [ 'temperature' ],
presence_penalty = self . params [ 'presence_penalty' ],
frequency_penalty = self . params [ 'frequency_penalty' ],
stop = self . params [ 'stop' ]
)
result = response . choices [ 0 ]. text
return result
def append_ctx ( self , role , content ):
self . ctx . append ({
"role" : role ,
"content" : content
})
def send_message ( self , message , role = "user" ):
self . ctx . append ({
"role" : role ,
"content" : message
})
result = openai . ChatCompletion . create (
model = self . params [ 'model' ],
messages = self . ctx ,
names = {
"system" : self . params [ 'system_name' ],
"user" : self . params [ 'user_name' ],
"assistant" : self . params [ 'assistant_name' ]
},
max_tokens = self . params [ 'max_tokens' ],
half_life = self . params [ 'half_life' ],
top_p = self . params [ 'top_p' ],
temperature = self . params [ 'temperature' ],
presence_penalty = self . params [ 'presence_penalty' ],
frequency_penalty = self . params [ 'frequency_penalty' ],
stop = self . params [ 'stop' ]
)
result = result . choices [ 0 ]. message [ 'content' ]
self . ctx . append ({
"role" : "assistant" ,
"content" : result
})
return result
ai00 = Ai00 ()
ai00 . set_params (
max_tokens = 4096 ,
top_p = 0.55 ,
temperature = 2 ,
presence_penalty = 0.3 ,
frequency_penalty = 0.8 ,
half_life = 400 ,
stop = [ ' x00 ' , ' n n ' ]
)
print ( ai00 . send_message ( "how are you?" ))
print ( ai00 . send_message ( "me too!" ))
print ( ai00 . get_ctx ())
ai00 . clear_ctx ()
print ( ai00 . continuation ( "i like" ))自V0.5以來,AI00具有稱為BNF採樣的獨特功能。 BNF通過限制模型可以選擇的近隔壁的標記來迫使模型以指定格式輸出(例如JSON或MARKDOWN)。
這是帶有字段“名稱”,“年齡”和“ Job”的JSON的示例BNF:
<start> ::= <json_object>
<json_object> ::= "{" <object_members> "}"
<object_members> ::= <json_member> | <json_member> ", " <object_members>
<json_member> ::= <json_key> ": " <json_value>
<json_key> ::= '"' "name" '"' | '"' "age" '"' | '"' "job" '"'
<json_value> ::= <json_string> | <json_number>
<json_string>::='"'<content>'"'
<content>::=<except!([escaped_literals])>|<except!([escaped_literals])><content>|'\"'<content>|'\"'
<escaped_literals>::='t'|'n'|'r'|'"'
<json_number> ::= <positive_digit><digits>|'0'
<digits>::=<digit>|<digit><digits>
<digit>::='0'|<positive_digit>
<positive_digit>::="1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"




text_completions和chat_completions batch serve平行推斷int8量化NF4量化LoRA模型LoRA模型的熱負載和切換我們一直在尋找有興趣幫助我們改善項目的人。如果您對以下任何一項感興趣,請加入我們!
無論您的技能水平如何,我們都歡迎您加入我們。您可以通過以下方式加入我們:
我們迫不及待地想與您合作,使這個項目變得更好!我們希望該項目對您有幫助!
感謝這些令人敬畏的人,他們對該項目的支持和無私的奉獻精神!
顧真牛 ? ? ?? | 研究社交 ? ? ? ? | JOSC146 ? ? ? | L15y ? ? | 卡希亞·維拉旺(Cahya Wirawan) ? | yuunnn_w | 朗祖 ?️ |
luoqiqi |