如何使用 Groq 在 4 秒内得到 rp2040 的答案
转发: How to get an answer to rp2040 in 4 seconds with Groq
项目介绍
项目概况
如果你已经做了一个Chatgpt和Gemini连接到rp2040的项目,我们将做一个开源模型的项目。我们将利用几天前发布的meta的llama3和groq的LPU芯片进行创新。
我相信它足以替代制造商网站上的示例,并使我们能够以更快的响应来升级我们的项目。对于需要快速响应的AIoT例子来说足够适用。
groq是什么?
Jonathan Ross 是前 Google TPU 架构师,现任 Groc 初创公司的首席执行官。为什么它在这里通过创建基于 LPU 的芯片,我们创建了一个可以比 nvidia 更有效地推断模型的环境。
比 nvidia 更高效的模型推理。我们与三星有代工合同,可能会进入全面生产,但 Groq 已声明我们不销售芯片。像Nvidia这样销售芯片的环境对于初创公司来说是很困难的,我们说我们会在云环境中做推断的过程。目前,您可以在Groq的官方网站上参考开放的LLM模型。
其中之一是上周发布的 Lamar 3。
正如您所看到的,它每秒生成数百个令牌。使用传统的 ChatGPT 创建包含这么多标记的句子需要 20 多秒。
LLaMA3是什么?
Lama 3 上周五刚刚发布,其当前的基准测试也与 GPT-4 相当。 8B 模型优于 GPT3.5,70B 与 gpt-4 相当。这是在 24T 对集群 GPU 上训练的模型。这是 BigTech,所以你可以看到使用天文数字般荒谬的 GPU 进行训练是可能的。我不知道详细信息,因为该论文未公开,但我阅读并审阅了 Lama3,所以如果您好奇,可以在 Wiznet Tech 博客上阅读。
项目教程
1.进入groq云主页,注册,获取API KEY,运行旁边的python代码。如果安装了groq库就好了,但是当然,我们不能在pico中安装该库,所以我们必须通过API通信来运行代码。
2. 获取和阅读curl代码并不难:您只需要定义端点、标头设置以及如何发送数据即可。在 Micro Python 中,代码如下所示。模型部分,可以在Docs中设置模型名称llama3。
def send_chat_request(api_key, user_message):
url = "https://api.groq.com/openai/v1/chat/completions"
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
payload = {
"messages": [{"role": "user", "content": user_message}],
"model": "llama3-70b-8192"
}
start_time = utime.ticks_ms() # start time
response = urequests.post(url, headers=headers, json=payload)
elapsed_time = utime.ticks_diff(utime.ticks_ms(), start_time)
if response.status_code == 200:
try:
content = response.json()['choices'][0]['message']['content']
return content, elapsed_time # 내용과 처리 시간 반환
except Exception as e:
raise Exception("Failed to decode JSON from response: " + str(e))
else:
raise Exception(f"API error ({response.status_code}): {response.reason}")
我是通过app.py实现的。 init_ethernet函数是初始化以太网,在main函数中输入api key,初始化以太网,通过While语句启动交互式响应聊天。这就是它的结束。
from machine import Pin, SPI
import network
import utime
import urequests
def init_ethernet(timeout=10):
spi = SPI(0, 2_000_000, mosi=Pin(19), miso=Pin(16), sck=Pin(18))
nic = network.WIZNET5K(spi, Pin(17), Pin(20))
nic.active(True)
start_time = utime.ticks_ms()
while not nic.isconnected():
if (utime.ticks_diff(utime.ticks_ms(), start_time) > timeout * 1000):
raise Exception("Ethernet connection timed out.")
utime.sleep(1)
print('Connecting ethernet...')
print(f'Ethernet connected. IP: {nic.ifconfig()}')
def send_chat_request(api_key, user_message):
url = "https://api.groq.com/openai/v1/chat/completions"
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
payload = {
"messages": [{"role": "user", "content": user_message}],
"model": "llama3-70b-8192"
}
start_time = utime.ticks_ms() # 시작 시간 기록
response = urequests.post(url, headers=headers, json=payload)
elapsed_time = utime.ticks_diff(utime.ticks_ms(), start_time) # 경과 시간 계산
if response.status_code == 200:
try:
content = response.json()['choices'][0]['message']['content']
return content, elapsed_time # 내용과 처리 시간 반환
except Exception as e:
raise Exception("Failed to decode JSON from response: " + str(e))
else:
raise Exception(f"API error ({response.status_code}): {response.reason}")
def main():
api_key = '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'
init_ethernet()
while True:
user_input = input("User: ").strip()
if user_input.lower() == "exit":
print("Exiting...")
break
elif not user_input:
continue
try:
response_content, time_taken = send_chat_request(api_key, user_input)
print(f"LLaMA Response: {response_content} (Processed in {time_taken} ms)") # 내용과 시간 출력
except Exception as e:
print("Error: ", e)
if __name__ == "__main__":
main()
我在函数中添加了 start_time = utime.ticks_ms() 来记录滴答数。 API调用前仅需4-5秒。这比 Gemini 或 gpt 调用 API 的时间节省了 2-3 倍。它还可以很好地响应英文信息提示。韩语仍然是一个问题,需要通过额外的微调来训练模型。