chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

來養(yǎng)一只羊駝寶寶吧?!快來Duo S上跑你的第一個生成式AI

算能開發(fā)者社區(qū) ? 2024-05-25 08:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

OpenAI的創(chuàng)始成員Andrej Karpathy近日在一個周末內(nèi)訓練了一個微型LLaMA 2模型,并成功將其移植到C語言中。這個項目被他命名為Baby LLaMA 2,令人驚嘆的是,推理代碼僅有500行。

RISC-V挑戰(zhàn)賽中,我們期望在一個輕量級的RISC-V開發(fā)板上把這個模型運行起來,所以就有了這個賽題:Baby LLaMA 2 on Duo 速度優(yōu)化

7cd0e390-1a2e-11ef-bebc-92fbcf53809c.png

先看看效果:


賽題回顧

讓 Baby LLaMA 2 運行在 Milk-V Duo 這樣的小板子上是很有挑戰(zhàn)的事情。本次競賽旨在提升 Baby LLaMA 2 在 Milk-V Duo 平臺上的性能,目標是實現(xiàn)更高的每秒 Token 處理速度。參賽者需要運用輕量級技術(shù)和編譯器優(yōu)化策略,結(jié)合麥克風語音輸入或命令行輸入提示詞等多種方式,開發(fā)一個能夠講故事的機器人 Demo。該 Demo 應通過揚聲器進行輸出,并可借鑒小米米兔講故事機器人的原型設計。

賽題地址:https://rvspoc.org/s2311/

實機教程與演示:讓DuoS成為孩子的“故事王”

通過外接SPI顯示屏、麥克風、音頻輸出設備,Duo團隊實現(xiàn)了一個簡易的場景Demo。(源碼附在最后)

主要分為以下四個部分:

1、通過麥克風采集語音

2、經(jīng)過語音轉(zhuǎn)文字ASR模型實現(xiàn)語音實時轉(zhuǎn)換

3、大模型實現(xiàn)“講故事”實時交互

4、通過文字轉(zhuǎn)語音TTS模型實現(xiàn)語音實時從揚聲器播放“故事”

硬件連接方法:

需要設置和使用到的硬件主要有:duo s、SPI顯示屏、麥克風、音頻輸出、按鍵、Wifi、UART串口、type-c(type-c這里只做供電使用,連接板子均通過串口實現(xiàn))

7cf06e90-1a2e-11ef-bebc-92fbcf53809c.png

1、SPI顯示屏連接

將SPI顯示屏背面的引腳對應的接口和duo s板卡的引腳對應

duo s整體引腳圖如下:

7d17f780-1a2e-11ef-bebc-92fbcf53809c.png

7d29e94a-1a2e-11ef-bebc-92fbcf53809c.png

SPI屏幕對應的引腳7d2e98f0-1a2e-11ef-bebc-92fbcf53809c.png

整體引腳對應連接圖如下:

7d2e98f0-1a2e-11ef-bebc-92fbcf53809c.png

# 清屏cat /dev/zero > /dev/fb0# 花屏cat /dev/random > /dev/fb0

2、麥克風連接

使用USB聲卡,注意麥克風和音頻輸出對應孔的正確連接

# 錄音命令(Ctrl+C結(jié)束錄音):arecord -f dat -c 1 -r 16000 XXXX.wav

3、音頻輸出連接

使用USB聲卡,注意麥克風和揚聲器輸入孔的正確對應

# 播放錄音:aplay XXXX.wav

4、按鍵連接

按鍵連接引腳如下:(只需要將引腳和duo s對應功能的引腳連接即可)7d7c129c-1a2e-11ef-bebc-92fbcf53809c.png

5、Wifi連接

這里通過一個一鍵運行腳本進行設置Wifi

vi wifi-duo-s.sh
# 執(zhí)行i進入編輯模式,將以下內(nèi)容寫入########################################!/bin/bash# 提示用戶輸入WiFi的SSID和密碼read -p "請輸入WiFi的SSID: " ssidread -p "請輸入WiFi的密碼: " password# 編輯 /etc/wpa_supplicant.conf 文件cat < /etc/wpa_supplicant.confctrl_interface=/var/run/wpa_supplicantap_scan=1update_config=1
network={ ssid="$ssid" psk="$password" key_mgmt=WPA-PSK}EOF# 重啟網(wǎng)絡wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.confecho "WiFi configuration completed."######################################## ESC退出編輯模式,:wq保存退出
# 執(zhí)行shsh wifi-duo-s.sh

6、UART串口連接

將USB-TTL的引腳對應duo s的引腳,對應關(guān)系如下:

Milk-V duo s

<----->

USB-TTL 串口

GND(pin 6)

<----->

GND

TX(pin 8)

<----->

RX

RX(pin 10)

<----->

TX

duo s的對應引腳如下:

7d80f0aa-1a2e-11ef-bebc-92fbcf53809c.png

USB-TTL引腳如下:

7e71b260-1a2e-11ef-bebc-92fbcf53809c.jpg

注:關(guān)于麥克風和音頻輸出的其他相關(guān)設置命令(可選)

# 查看錄音設備arecord -l# 查看播放設備aplay -l# 查看具體設備號的信息(假設設備號為3)amixer contents -c 3
# 麥克風音量設置(name根據(jù)具體而定,常規(guī)是這個)amixer -Dhw:0 cset name='ADC Capture Volume' 24# 揚聲器播放音量設置(假設音量設置為24)# 兩種方式:(假設設備號為3)amixer -Dhw:3 cset name='Speaker Playback Volume' 24amixer cset -c 3 numid=6 24

軟件使用方法

1、連接WiFi

sh wifi.sh# 輸入連接wifi的ssid和pwd

2、安裝運行依賴包

pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

3、運行故事機baby llama

python asr_chat-llama-baby.py# 在輸出Wait for key press后,通過按鍵輸入語音(按住即開始語音輸入,松開即結(jié)束語音輸入)

7e980528-1a2e-11ef-bebc-92fbcf53809c.png

注:baby llama源碼如下

# -*- coding: UTF-8 -*-import http.clientimport urllib.parseimport jsonimport subprocessimport timeimport httpximport requests
subprocess.Popen(['chmod', '+x', 'stable_demo'])subprocess.Popen(['./stable_demo'])print('Asr chat tts begin....')appKey = 'P918jP30TLJNHi3Q'#'P918jP30TLJNHi3Q'#s9NZm8ozBKyX63vK' #'RxkHgzYYYYLIP4OD'token = '31b129713beb46b8b0db321a005ecb0d'
# Chat ConfigurationAPI_KEY = "ebb785194c713e7b419ca8742277d414.hCBC11QCZvC5N0YK"BASE_URL = "https://open.bigmodel.cn/api/paas/v4/chat/completions"history = [{"role": "system", "content": "您好!"}]# Aliyun# url = 'https://nls-gateway-cn-shanghai.aliyuncs.com/stream/v1/asr'host = 'nls-gateway-cn-shanghai.aliyuncs.com'
def record_on_gpio(pin): is_pressed = False audioFilepath = './output.wav' while True: try: with open('/sys/class/gpio/gpio{}/value'.format(pin), 'r') as gpio_file: value = gpio_file.read().strip() #print('get key value {}',value) if value == '1' and not is_pressed: # 按鍵按下時開始錄音 recording_process = subprocess.Popen(['arecord', '-f', 'dat', '-c', '1', '-r', '16000', 'output.wav']) is_pressed = True print("Recording started.")
if value == '0' and is_pressed: subprocess.Popen(['killall', 'arecord']) recording_process.wait() # 等待錄音進程結(jié)束 is_pressed = False print("Recording stopped.") return audioFilepath except Exception as e: print("Error:", e)
def process_chunk(chunk,response_accumulator): if chunk.strip() == "[DONE]": return True, None try: data = json.loads(chunk) # print('process_chunk data:', data) if 'choices' in data and data['choices']: for choice in data['choices']: if 'delta' in choice and 'content' in choice['delta'] and choice['delta']['content']: result = choice['delta']['content'] # print('process_chunk result:', result) response_accumulator.append(result) return False, result except Exception as e: print(f"處理數(shù)據(jù)塊時出錯: {e}") return False, None


def chat(query, history): history += [{"role": "user", "content": query}] data = { "model": "glm-4", "messages": history, "temperature": 0.3, "stream": True, }
headers = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" }
response_accumulator = [] response = requests.post(BASE_URL, data=json.dumps(data), headers=headers, stream=True) send_to_lvgl(f"[CLEAR]{query}: ") try: for chunk in response.iter_lines(): if chunk: chunk_str = chunk.decode("utf-8") if chunk_str.startswith("data: "): chunk_str = chunk_str[len("data: "):]
done, result = process_chunk(chunk_str,response_accumulator) # print('result is', result)
chunk_str = "data: " + chunk_str # print("Get response:", chunk_str) if result: send_to_lvgl(result)
if done: tts_text = ''.join(response_accumulator) tts_to_play(tts_text)

except Exception as e: print(f"Error: {str(e)}")

def send_to_lvgl(text): pipe_name = '/tmp/query_pipe' try: with open(pipe_name, 'w') as pipe: pipe.write(text) pipe.flush() except Exception as e: print(f"LVGL send error: {e}")

def process(request, token, audioFile) : # 讀取音頻 print('process {} {}'.format(request, audioFile)) with open(audioFile, mode = 'rb') as f: audioContent = f.read()
host = 'nls-gateway-cn-shanghai.aliyuncs.com'
# 設置HTTPS請求頭部 httpHeaders = { 'X-NLS-Token': token, 'Content-type': 'application/octet-stream', 'Content-Length': len(audioContent) }
conn = http.client.HTTPSConnection(host)
conn.request(method='POST', url=request, body=audioContent, headers=httpHeaders)
response = conn.getresponse() print('Response status and response reason:') print(response.status ,response.reason)
try: body = json.loads(response.read()) text = body['result'] print('Recognized Text:', text) story = makeLLAMAStory(text) print('[makeLLAMAStory] return {}'.format(story)) #send_to_lvgl(story) tts_to_play(story) #chat_response = chat(text, history) #print('Chat Response:', chat_response) except ValueError: print('The response is not json format string')
conn.close()
def makeLLAMAStory(text): print('[makeLLAMAStory] {}'.format(text)) recording_process = subprocess.Popen(['./runq-fast-gcc', 'stories15M_q80.bin', '-t', '0.8', '-n', '256', '-i', text], stdout=subprocess.PIPE, stderr=subprocess.PIPE) return_value, stderr = recording_process.communicate() return return_value.decode('utf-8')
def oneloop(): print('Wait for key press') audioFilepath = record_on_gpio(499)
#print('Wait for first audio') format = 'pcm' sampleRate = 16000 enablePunctuationPrediction = True enableInverseTextNormalization = True enableVoiceDetection = False
# 設置RESTful請求參數(shù) asrurl = f'https://{host}/stream/v1/asr' request = asrurl + '?appkey=' + appKey request = request + '&format=' + format request = request + '&sample_rate=' + str(sampleRate)
if enablePunctuationPrediction : request = request + '&enable_punctuation_prediction=' + 'true'
if enableInverseTextNormalization : request = request + '&enable_inverse_text_normalization=' + 'true'
if enableVoiceDetection : request = request + '&enable_voice_detection=' + 'true'
print('Request: ' + request)
process(request, token, audioFilepath)
def tts_to_play(text, file_path='response.wav'): ttsurl = f'https://{host}/stream/v1/tts' text_encoded = urllib.parse.quote_plus(text) tts_request = f"{ttsurl}?appkey={appKey}&token={token}&text={text_encoded}&format=wav&sample_rate=16000"
conn = http.client.HTTPSConnection(host) conn.request('GET', tts_request) response = conn.getresponse() body = response.read() if response.status == 200 and response.getheader('Content-Type') == 'audio/mpeg': with open(file_path, 'wb') as f: f.write(body) print('TTS audio saved successfully') subprocess.Popen(['aplay', file_path]) else: print('TTS request failed:', body) conn.close()

while True: try: oneloop() except Exception as e: print(e)

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • C語言
    +關(guān)注

    關(guān)注

    183

    文章

    7643

    瀏覽量

    145453
  • AI
    AI
    +關(guān)注

    關(guān)注

    91

    文章

    39490

    瀏覽量

    300982
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3730

    瀏覽量

    52053
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    Linux 下交叉編譯實戰(zhàn):跑起來第一個 STM32 程序

    跑起來第一個STM32程序。、準備工作在開始之前,需要準備:1、Linux開發(fā)環(huán)境Ubuntu、Debian或其他主流發(fā)行版都可以。2、ARMGCC交叉編譯工具
    的頭像 發(fā)表于 11-24 19:04 ?771次閱讀
    Linux 下交叉編譯實戰(zhàn):跑起來<b class='flag-5'>你</b>的<b class='flag-5'>第一個</b> STM32 程序

    【OK3506-S12Mini試用評測】編譯第一個內(nèi)核模塊

    。 掌握這流程后,可以進步編寫更復雜的驅(qū)動模塊,訪問硬件外設(如 I2C、GPIO、SPI 等),為嵌入系統(tǒng)開發(fā)奠定基礎。
    發(fā)表于 10-24 21:00

    智能體化AI生成AI的區(qū)別

    步驟,甚至在沒有明確指令時主動行動。舉個例子:生成 AI 可能會幫你生成“本周出差清單”,
    的頭像 發(fā)表于 08-25 17:24 ?1585次閱讀

    【Sipeed MaixCAM Pro開發(fā)板試用體驗】基于MaixCAM-Pro的AI生成圖像鑒別系統(tǒng)

    圖像的快速鑒別,滿足實時或準實時的應用需求。 3. 數(shù)據(jù)采集 AI圖片數(shù)據(jù)集,本項目使用gemini生成圖片,使用的是gem來實現(xiàn)的。 提示詞如下
    發(fā)表于 08-21 13:59

    【Milk-V Duo S 開發(fā)板免費體驗】基于Duo S 使用 TDL SDK(V2版本)

    duo-tdl-examples 加載編譯環(huán)境: source envsetup.sh 第一次加載會自動下載所需的編譯工具鏈,下載后的目錄名為host-tools,下次再加載編譯環(huán)境時,會檢測該目錄,如果已存在則不會再次下載
    發(fā)表于 08-10 22:35

    【Milk-V Duo S 開發(fā)板免費體驗】Milk-V DuoS性能測試

    ;編譯 有鑒于Milk-V Duo S 開發(fā)板固件沒帶GCC,所以懶得去部署了,還是在WSL上交叉編譯。 ()源碼下載 直接從github
    發(fā)表于 08-09 23:32

    【Milk-V Duo S 開發(fā)板免費體驗】測試舵機

    、MG90S舵機 MG90S360度舵機,本質(zhì)都是通過輸出PWM波來控制的,舵機的工作
    發(fā)表于 08-09 22:46

    【Milk-V Duo S 開發(fā)板免費體驗】鏡像燒錄與開箱

    前言 關(guān)注Milk很久了,主要做RISC-V相關(guān)板子的,之前Duo比較火,準備入手Duo,后面因為各種原因未達成,這次有幸得到塊DuoS。 給我的第一感覺就是小巧精致,麻雀雖小五臟俱
    發(fā)表于 06-30 19:19

    關(guān)于鴻蒙App架中“AI文本生成模塊的資質(zhì)證明文件”的情況說明

    檢查結(jié)果為“通過”或?qū)徍藸顟B(tài)為“審核通過”。 那么對于這個問題,我也是嘗試去解決……這里分享下我了解到的情況和方法 首先,這個政策雖然說是針對AI文本生成模塊,但實際,針對的是所有
    發(fā)表于 06-30 18:37

    【Milk-V Duo S 開發(fā)板免費體驗】Milk-V Duo S 開發(fā)板試用報告(3)網(wǎng)絡

    root@192.168.42.1 登陸到 Duo 的終端。 我們直接打開終端輸入:ssh root@192.168.42.1即可連接上Duo S,前提是要把它接上電腦。 進入s
    發(fā)表于 06-30 13:21

    【Milk-V Duo S 開發(fā)板免費體驗】Milk-V Duo S 開發(fā)板試用報告(1)開箱

    、初識 盼啊盼,終于盼來了這塊Milk-V Duo S。先看Duo S的包裝。(圖1)
    發(fā)表于 06-29 19:43

    【Milk-V Duo S 開發(fā)板免費體驗】Milk-V Duo S開箱、固件燒寫和系統(tǒng)體驗

    ,一個是RISC-V版本,一個是ARM版本,均可以啟動系統(tǒng),但是在Milk-V Duo S板子要選擇啟動的核心。 因為ARM版的下載速度要
    發(fā)表于 06-27 23:21

    谷歌新生成AI媒體模型登陸Vertex AI平臺

    我們在 Vertex AI 推出新生成 AI 媒體模型: Imagen 4、Veo 3
    的頭像 發(fā)表于 06-18 09:56 ?1064次閱讀

    文教你構(gòu)建第一個應用程序

    構(gòu)建第一個應用程序 創(chuàng)建新工程 步驟 1通過如下兩種方式,打開工程創(chuàng)建向?qū)Ы缑妗? 如果當前未打開任何工程,可以在 DevEco Studio 的歡迎頁,選擇“Projects &
    發(fā)表于 04-24 06:41

    如何制作和控制一只仿生手

    這個項目介紹了如何制作和控制一只仿生手。作者最初受到Instagram上一個視頻的啟發(fā),該視頻展示了使用MPU6050傳感器追蹤手部動作并在屏幕顯示3D模型。作者決定將這個想法進
    的頭像 發(fā)表于 04-15 11:52 ?1354次閱讀
    如何制作和控制<b class='flag-5'>一只</b>仿生手