在Jetson上玩转大模型Day5:Ollama指令模式的智能助手
在Jetson上玩转大模型Day6:Ollama的Webui智能助手
在Jetson上玩转大模型Day7:執行RAG功能的Jetson Copilot
在Jetson上玩转大模型Day8:多模態搜圖的NanoDB
我們在前面所介紹的各項應用,包括SAM、OWL-Vit、Text-Generation-Webui、stable-diffusion-webui等等,都是基於個別項目環境去搭建,目的是讓讀者比較輕鬆地掌握不同技能的知識。但是這種方式對於要開發一個實用的應用系統來說,就顯得過於零碎,並且難以整合,這又不符合我們一開始所設定的目標,因此提供一套更有系統的開發環境,就變得非常重要。
在Jetson AI Lab項目中的Nano_LLM項目,就爲我們提供很完整的開發環境,項目作者爲我們提供非常豐富的Python API,這樣讓我們就能很有彈性地去建構實用的AI應用,例如結合語音、對話、圖像、視頻等多模態的應用,甚至是結合多智能體(agents)形成完整工作流的智能應用等等。
這些Python API開發接口主要有如下所列的七大類:
Models(模型相關):提供模型加载、量化、嵌入和推理相關的接口。
-支持的API類型:MLC(Machine Learning Compilation)、HF(HuggingFace)與AWQ(Activation-aware Weight QuantizationMLC)三種。
默认情况下,插件是线程化的,并在自己的队列中运行,但可以通过将threaded=False传递给插件的初始化器来配置为内联(无线程)运行。它们也可以用interrupt()函数中断,以放弃当前请求和输入队列中的任何剩余数据,例如,當你想提前停止LLM生成,或静音TTS输出。
创建新插件类型时,实现process()函数来处理传入数据,然后返回传出数据。您还可以使用简单的回调函数来接收数据,而不需要定义自己的插件类(如chat_Plugin.add(my_function)来接收聊天输出)
-Agents(智能體):只是创建或连接其他嵌套插件管道的插件,用于通过更高级的控制流实现更高级的行为。它们被设计为相互叠加,这样你就可以将不同代理的功能组合在一起。目前已經提供的智能體有ChatAgent、VoiceChat、WebChat、VideoStream與VideoQuery等五大類。
-Webserver(網頁控制):这是一个使用Flask和websockets实现的可扩展Web服务器,允许代理提供前端HTML页面,以及使用websockets的双向消息传递,包括特定于每个应用程序的自定义消息类型
-Utilities(工具):系統目前提供了Tensor Conversion(張量格式轉換)、Audio(音頻處理)、Images(圖像處理)、ArgumentParsing(參數解析)等四大類实用的工具。
除了上述的Python API之外,項目還提供一些基本指令,讓我們不需要寫代碼就能直接調用指令來實現某些基本功能,例如下面指令:
$ python3 -m nano_llm.completion --api=mlc \
--model meta-llama/Llama-3-8b-chat-hf \
--quantization q4f16_ft \
--prompt 'Once upon a time,'
與下面的 Python 代碼是等效的:
from nano_llm import NanoLLM
model = NanoLLM.from_pretrained(
"meta-llama/Llama-3-8b-hf",
api='mlc',
api_token=($HUGGINGFACE_TOKEN) # 自己的HUGGINGFACE_TOKEN
quantization='q4f16_ft'
)
response = model.generate("Once upon a time,", max_new_tokens=128)
for token in response:
print(token, end='', flush=True)
後面我們就會帶着大家開始安裝Nano_LLM開發環境,並且演示一些比較實用的交互式範例,讓大家更容易上手。