
在Jetson AI Lab項目中的Nano_LLM項目,就爲我們提供很完整的開發環境,項目作者爲我們提供非常豐富的Python API,這樣讓我們就能很有彈性地去建構實用的AI應用,例如結合語音、對話、圖像、視頻等多模態的應用,甚至是結合多智能體(agents)形成完整工作流的智能應用等等。
這些Python API開發接口主要有如下所列的七大類:
Models(模型相關):提供模型加载、量化、嵌入和推理相關的接口。
-支持的API類型:MLC(Machine Learning Compilation)、HF(HuggingFace)與AWQ(Activation-aware Weight QuantizationMLC)三種。

-支持的架構:Llama、Llava、StableLM、Phi-2、Gemma、Mistral、GPT-Neox
模型相關操作的API:目前已經提供14種以“NanoLLM.”帶頭的API接口,例如NanoLLM.from_pretrained()、NanoLLM.generate()等等。
Streaming與KV Cache
-Chat(對話相關):关管理多回合聊天会话、模板和维护嵌入历史记录的信息,包括chatHistory、chatMessage等等。
-Multimodal(多模態):提供优化的多模式管道,包括视觉/语言模型(VLM)、矢量数据库(NanoDB)和可以集成到交互式代理中的语音服务。
-Plugins(擴充插件):插件是模型(如LLM、ASR、TTS)、后处理器和I/O(如视频和音频流)的包装器,它们可以连接在一起,与其他插件节点串联形成管道,其目的是要减少样板代码并快速构建更复杂的代理。
插件将输入接收到处理队列中,对其进行处理,然后通过其输出通道输出结果。每个输出通道表示模型具有的一种输出类型(例如,ChatQuery插件在令牌、单词和句子级别公开输出),每个输出通道可以连接到任意数量的其他插件节点。
默认情况下,插件是线程化的,并在自己的队列中运行,但可以通过将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開發環境,並且演示一些比較實用的交互式範例,讓大家更容易上手。