我們部署了多莉(https://huggingface.co/databricks/dolly-v2-3b在我們的基礎設施)作為REST API端點。我們使用的筆記本是包含在文本下麵我的問題。
使用的磚下文有如下配置(13.2毫升,GPU,引發3.4.0 g5.2xlarge)。
多莉執行完全在筆記本,沒有任何問題。我們創建了兩個鏈子Langchain測試執行。第一個是香草鏈,可用於直接回答問題,而且沒有提供上下文。第二個是一個上下文連鎖問答。兩個完美的工作。
模型的創建、注冊和部署本身進展順利,盡管它沒有任何問題需要很長時間(~ 20 +分鍾有時…)
出現問題當我們試圖訪問模型間接通過REST接口或通過加載登錄和注冊模型使用它的URI。我上傳了錯誤的附加圖像。
從這裏,我們嚐試了各種嚐試和調試錯誤,看看我們可以自己修複它,但無濟於事。我們已經嚐試改變輸入格式,通過列表而不是字符串,Dataframes而不是字符串,運行時版本變化,改變我們的日誌方式(使用mlflow.pyfunc模型。log_model代替mlflow.langchain.log_model),嚐試各種JSON格式符合MLflow JSON文檔輸入model-served REST api。
在所有情況下,我們得到了這個錯誤。從我們調試的嚐試,似乎提示,是形成以某種方式返回,但明確包括提示作為參數一次模型已被記錄為Langchain模型是不允許的(換句話說,輸入模式中的編譯和輸入模式時需要某些關鍵詞的提示)。
我們花了很多時間和GPU周期試圖讓這個相當簡單的用例的工作。有人在這個社區有任何了解我們可能做錯了嗎?
任何幫助將不勝感激!
提前謝謝!
- - - - - - - - - - - - - - - - -開始筆記本代碼- - - - - - - - - - - - - - - - - - - - - - - -
#磚筆記本的來源
#魔法% pip安裝- u mlflow langchain numpy = = = = 0.0.164變壓器1.24.4 sqlalchemy = = 2.0.17
- - - - - - - - - - - #命令
dbutils.library.restartPython ()
- - - - - - - - - - - #命令
進口
火炬
從
變形金剛
進口
管道
generate_text
=
管道(
模型
=
“磚/ dolly-v2-3b”
,
torch_dtype
=
火炬
.bfloat16,
trust_remote_code
=
真正的
,
device_map
=
“汽車”
,
return_full_text
=
真正的
)
- - - - - - - - - - - #命令
從
langchain
進口
PromptTemplate, LLMChain
從
langchain.llms
進口
HuggingFacePipeline
#一個輔導沒有輸入的模板
提示
=
PromptTemplate (
input_variables
=
(
“指令”
),
模板
=
”
{說明}
”
)
#模板與輸入指令
prompt_with_context
=
PromptTemplate (
input_variables
=
(
“指令”
,
“背景”
),
模板
=
”
{說明}
\ n \ n
輸入:
\ n
{上下文}
”
)
hf_pipeline
=
HuggingFacePipeline (
管道
=
generate_text
)
llm_chain
=
LLMChain (
llm
=
hf_pipeline
,
提示
=
提示
)
llm_context_chain
=
LLMChain (
llm
=
hf_pipeline
,
提示
=
prompt_with_context
)
- - - - - - - - - - - #命令
打印
(
llm_chain
.predict (
指令
=
“我解釋核裂變和核聚變的區別。”
).lstrip ())
- - - - - - - - - - - #命令
上下文
=
”““喬治·華盛頓(1732年2月22日[b]——12月14日,1799年)是一個美國軍官,政治家,
和開國元勳曾擔任美國第一任總統從1789年到1797年。”“”
打印
(
llm_context_chain
.predict (
指令
=
“喬治·華盛頓總統是什麼時候?”
,
上下文
=
上下文
).lstrip ())
- - - - - - - - - - - #命令
- - - - - - - - - - - #命令
進口
mlflow
進口
熊貓
作為
pd
從
json
進口
轉儲
def
publish_model_to_mlflow
(
llm_chain
,
chain_name
與
mlflow
.start_run ()
作為
運行
:
# MLFlow保存模型
#注意這隻保存langchain管道(我們也可以添加聊天機器人的自定義模型包裝類)
#矢量數據庫模型以外的生活
mlflow
.langchain.log_model (
llm_chain
,
artifact_path
=
“ketos-gpt——”
+
chain_name
)
model_registered
=
mlflow
.register_model (
f
”:/
{
運行
.info.run_id
}
/ gpt -
{
chain_name
}
”
,
“gpt——”
+
chain_name
)
#移動模型在生產
客戶端
=
mlflow
.tracking.MlflowClient ()
打印
(
“注冊模型版本”
+
model_registered
.version
+
“生產模式”
)
客戶端
.transition_model_version_stage (
“gpt——”
+
chain_name
,
model_registered
.version,
階段
=
“生產”
,
archive_existing_versions
=
真正的
)
def
load_model_and_answer
(
問題
,
model_uri
#注意:這將再次在內存中加載模型
#加載langchain管道和推論
鏈
=
mlflow
.pyfunc.load_model (
model_uri
)
打印
(
類型
(
鏈
))
#鏈= mlflow.langchain.load_model (model_uri)
鏈
.predict ([{
“指令”
:
問題
}))
- - - - - - - - - - - #命令
publish_model_to_mlflow
(
llm_chain
,
“dolly-3b-vanilla”
)
- - - - - - - - - - - #命令
問題
=
“哪個是印度位於大陸?”
chain_name
=
“dolly-3b-vanilla”
model_name
=
“gpt——”
+
chain_name
model_version
=
6
model_uri
=
f
“模型:/
{
model_name
}
/
{
model_version
}
”
load_model_and_answer
(
問題
=
問題
,
model_uri
=
model_uri
)