色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

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

算能開(kāi)發(fā)者社區(qū) ? 2024-05-25 08:34 ? 次閱讀

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

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

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

先看看效果:


賽題回顧

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

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

實(shí)機(jī)教程與演示:讓DuoS成為孩子的“故事王”

通過(guò)外接SPI顯示屏、麥克風(fēng)、音頻輸出設(shè)備,Duo團(tuán)隊(duì)實(shí)現(xiàn)了一個(gè)簡(jiǎn)易的場(chǎng)景Demo。(源碼附在最后)

主要分為以下四個(gè)部分:

1、通過(guò)麥克風(fēng)采集語(yǔ)音

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

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

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

硬件連接方法:

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

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

1、SPI顯示屏連接

將SPI顯示屏背面的引腳對(duì)應(yīng)的接口和duo s板卡的引腳對(duì)應(yīng)

duo s整體引腳圖如下:

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

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

SPI屏幕對(duì)應(yīng)的引腳7d2e98f0-1a2e-11ef-bebc-92fbcf53809c.png

整體引腳對(duì)應(yīng)連接圖如下:

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

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

2、麥克風(fēng)連接

使用USB聲卡,注意麥克風(fēng)和音頻輸出對(duì)應(yīng)孔的正確連接

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

3、音頻輸出連接

使用USB聲卡,注意麥克風(fēng)和揚(yáng)聲器輸入孔的正確對(duì)應(yīng)

# 播放錄音:aplay XXXX.wav

4、按鍵連接

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

5、Wifi連接

這里通過(guò)一個(gè)一鍵運(yùn)行腳本進(jìn)行設(shè)置Wifi

vi wifi-duo-s.sh
# 執(zhí)行i進(jìn)入編輯模式,將以下內(nèi)容寫(xiě)入########################################!/bin/bash# 提示用戶(hù)輸入WiFi的SSID和密碼read -p "請(qǐng)輸入WiFi的SSID: " ssidread -p "請(qǐng)輸入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)絡(luò)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的引腳對(duì)應(yīng)duo s的引腳,對(duì)應(yīng)關(guān)系如下:

Milk-V duo s

<----->

USB-TTL 串口

GND(pin 6)

<----->

GND

TX(pin 8)

<----->

RX

RX(pin 10)

<----->

TX

duo s的對(duì)應(yīng)引腳如下:

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

USB-TTL引腳如下:

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

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

# 查看錄音設(shè)備arecord -l# 查看播放設(shè)備aplay -l# 查看具體設(shè)備號(hào)的信息(假設(shè)設(shè)備號(hào)為3)amixer contents -c 3
# 麥克風(fēng)音量設(shè)置(name根據(jù)具體而定,常規(guī)是這個(gè))amixer -Dhw:0 cset name='ADC Capture Volume' 24# 揚(yáng)聲器播放音量設(shè)置(假設(shè)音量設(shè)置為24)# 兩種方式:(假設(shè)設(shè)備號(hào)為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、安裝運(yùn)行依賴(lài)包

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

3、運(yùn)行故事機(jī)baby llama

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

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: # 按鍵按下時(shí)開(kāi)始錄音 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() # 等待錄音進(jìn)程結(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ù)塊時(shí)出錯(cuò): {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'
# 設(shè)置HTTPS請(qǐng)求頭部 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
# 設(shè)置RESTful請(qǐng)求參數(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)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7608

    瀏覽量

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

    關(guān)注

    87

    文章

    31154

    瀏覽量

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

    關(guān)注

    1

    文章

    3268

    瀏覽量

    48925
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    國(guó)內(nèi)生成AI備案數(shù)量突破300款

    服務(wù)數(shù)量高達(dá)238款,占據(jù)了總備案數(shù)量的絕大部分,充分展示了該領(lǐng)域技術(shù)創(chuàng)新和市場(chǎng)需求的強(qiáng)勁動(dòng)力。這快速增長(zhǎng)不僅反映了國(guó)內(nèi)企業(yè)在生成AI技術(shù)
    的頭像 發(fā)表于 01-09 11:14 ?218次閱讀

    DAC8734能把第一個(gè)接收到的數(shù)字?jǐn)?shù)據(jù)輸出,有哪些原因?qū)е碌哪兀?/a>

    一個(gè)發(fā)送的數(shù)據(jù)時(shí)序沒(méi)問(wèn)題。但DAC8734能把第一個(gè)接收到的數(shù)字?jǐn)?shù)據(jù)輸出,我用的是TI公司自己的DAC8734EVM。可能有哪些原因?qū)е碌哪兀渴?b class='flag-5'>上電順序的原因嗎?
    發(fā)表于 12-19 09:17

    韓國(guó)無(wú)晶圓廠初創(chuàng)公司Panmnesia展示第一個(gè)支持CXL的AI集群

    在2024?OCP全球峰會(huì)上,開(kāi)發(fā)CXL交換機(jī)SoC和CXL IP的韓國(guó)無(wú)晶圓廠初創(chuàng)公司Panmnesia展示了第一個(gè)支持CXL的AI集群,該集群采用CXL 3.1交換機(jī)。 OCP全球峰會(huì)由世界
    的頭像 發(fā)表于 11-28 11:04 ?420次閱讀

    NVIDIA推出全新生成AI模型Fugatto

    NVIDIA 開(kāi)發(fā)了個(gè)全新的生成 AI 模型。利用輸入的文本和音頻,該模型可以創(chuàng)作出包含任意的音樂(lè)、人聲和聲音組合的作品。
    的頭像 發(fā)表于 11-27 11:29 ?383次閱讀

    在設(shè)備利用AI Edge Torch生成API部署自定義大語(yǔ)言模型

    ,從而無(wú)縫地將新的設(shè)備端生成 AI 模型部署到邊緣設(shè)備。本文是 Google AI Edge 博客連載的第二篇。
    的頭像 發(fā)表于 11-14 10:23 ?476次閱讀
    在設(shè)備<b class='flag-5'>上</b>利用<b class='flag-5'>AI</b> Edge Torch<b class='flag-5'>生成</b><b class='flag-5'>式</b>API部署自定義大語(yǔ)言模型

    生成AI工具作用

    生成AI工具是指那些能夠自動(dòng)生成文本、圖像、音頻、視頻等多種類(lèi)型數(shù)據(jù)的人工智能技術(shù)。在此,petacloud.ai小編為您整理
    的頭像 發(fā)表于 10-28 11:19 ?264次閱讀

    人手個(gè)AI是如何誕生的?

    2023年是AI大語(yǔ)言模型爆發(fā)的年,以O(shè)penAI推出的GPT大模型為起始,整個(gè)行業(yè)開(kāi)始從“推理式AI”向“生成
    的頭像 發(fā)表于 07-23 10:33 ?226次閱讀

    生成AI的定義和特征

    生成人工智能(Generative Artificial Intelligence, GAI)是人工智能領(lǐng)域的個(gè)重要分支,它利用機(jī)器學(xué)習(xí)算法,特別是深度學(xué)習(xí)技術(shù),使計(jì)算機(jī)能夠模擬人
    的頭像 發(fā)表于 07-05 17:33 ?1089次閱讀

    中國(guó)生成AI專(zhuān)利申請(qǐng)量全球第一

    在科技日新月異的今天,生成人工智能(Generative AI)作為新興技術(shù)的璀璨明珠,正以前所未有的速度改變著我們的世界。當(dāng)?shù)貢r(shí)間7月3日,世界知識(shí)產(chǎn)權(quán)組織(WIPO)發(fā)布的《生成
    的頭像 發(fā)表于 07-04 14:49 ?571次閱讀

    生成AI的基本原理和應(yīng)用領(lǐng)域

    生成人工智能(Generative Artificial Intelligence,簡(jiǎn)稱(chēng)Generative AI)是種利用機(jī)器學(xué)習(xí)算法和深度學(xué)習(xí)技術(shù),通過(guò)模擬人類(lèi)的創(chuàng)造性思維過(guò)程
    的頭像 發(fā)表于 07-04 11:50 ?1550次閱讀

    原來(lái)這才是【生成AI】!!

    隨著ChatGPT、文心言等AI產(chǎn)品的火爆,生成AI已經(jīng)成為了大家茶余飯后熱議的話題。可是,為什么要在
    的頭像 發(fā)表于 06-05 08:04 ?290次閱讀
    原來(lái)這才是【<b class='flag-5'>生成</b><b class='flag-5'>式</b><b class='flag-5'>AI</b>】!!

    生成 AI 進(jìn)入模型驅(qū)動(dòng)時(shí)代

    隨著ChatGPT和大型語(yǔ)言模型(LLM)呈現(xiàn)爆炸增長(zhǎng),生成人工智能(GenerativeAI)成為近來(lái)的大熱詞。由此引發(fā)了場(chǎng)爭(zhēng)論:
    的頭像 發(fā)表于 04-13 08:12 ?547次閱讀
    <b class='flag-5'>生成</b><b class='flag-5'>式</b> <b class='flag-5'>AI</b> 進(jìn)入模型驅(qū)動(dòng)時(shí)代

    NVIDIA即將推出項(xiàng)新的生成AI專(zhuān)業(yè)認(rèn)證

    NVIDIA 即將推出項(xiàng)新的生成 AI 專(zhuān)業(yè)認(rèn)證,助力開(kāi)發(fā)者在這重要領(lǐng)域證明自身技術(shù)實(shí)力。
    的頭像 發(fā)表于 03-14 09:43 ?561次閱讀

    世界上第一個(gè)石墨烯半導(dǎo)體的“石墨烯”究竟是什么?

    有媒體報(bào)道稱(chēng)有研究團(tuán)隊(duì)創(chuàng)造了世界上第一個(gè)由石墨烯制成的功能半導(dǎo)體(Functional Graphene Semiconductor)。
    的頭像 發(fā)表于 01-23 11:26 ?1297次閱讀

    什么是AI PC、AI手機(jī)?AI PC和AI手機(jī)出現(xiàn)的來(lái)龍去脈

    相信大家現(xiàn)在每天經(jīng)常可以在報(bào)章媒體看到“AI PC”、“AI 手機(jī)” 這兩個(gè)?特別是財(cái)經(jīng)新聞,這幾個(gè)月時(shí)不時(shí)就可以看見(jiàn)哪
    的頭像 發(fā)表于 01-18 10:43 ?1837次閱讀
    主站蜘蛛池模板: 夜夜女人国产香蕉久久精品| 祺鑫WRITEAS流出来了| 伊人久久国产| 日韩爽爽影院在线播放| 精品无码国产自产在线观看水浒传| 999国产高清在线精品| 亚洲欧美日韩国产精品26u| 日本毛片久久国产精品| 旧里番6080在线观看| 果冻传媒9CM在线观看| 成人综合在线视频免费观看完整版 | 国产免费看片| CHINA末成年VIDEO学生| 在线观看视频国产| 亚洲精品乱码电影在线观看 | 女人爽到高潮嗷嗷叫视频| 国产老肥熟xxxx| 国产91网站在线观看免费| www.久久久| 9久久免费国产精品特黄| 越南美女内射BBWXZ| 亚洲国产成人私人影院 | 永久免费观看视频| 亚洲日韩在线天堂一| 性欧美videofree中文字幕| 素人约啪第五季| 三叶草未满十八岁| 日本无修肉动漫在线观看| 欧美久久综合性欧美| 男人免费网站| 麻豆沈芯语| 美女内射少妇一区二区四区| 乱叫抽搐流白浆免费视频| 久久婷婷五月综合色丁香花| 久久国产av偷拍在线| 久久99精国产一区二区三区四区| 好大的太粗好深BL| 精品少妇爆AV无码专区| 精品夜夜澡人妻无码AV蜜桃| 灰原哀被啪漫画禁漫| 久久99精国产一区二区三区四区 |