Jetson Nano上ChatGPT语音交互脚本Illegal instruction报错排查求助
问题:Jetson Nano上运行ChatGPT语音交互脚本出现
Illegal instruction (core dumped)错误 环境与需求
- 硬件:Jetson Nano
- 系统:Ubuntu 20.04,Python 3.8.10
- 目标:搭建类Amazon Echo语音交互系统——麦克风输入语音转文字调用ChatGPT,再将ChatGPT文本回复转为语音输出
- 脚本基于某视频教程编写
原始Python脚本
import openai import speech_recognition as sr import pyttsx3 import time # Initialize OpenAI API openai.api_key = "ciao a tutti" # Initialize the text to speech engine engine=pyttsx3.init() def transcribe_audio_to_test(filename): recogizer=sr.Recognizer() with sr.AudioFile(filename)as source: audio=recogizer.record(source) try: return recogizer.recognize_google(audio) except: print("skipping unkown error") def generate_response(prompt): response= openai.completion.create( engine="text-davinci-003", prompt=prompt, max_tokens=4000, n=1, stop=None, temperature=0.5, ) return response ["Choices"][0]["text"] def speak_text(text): engine.say(text) engine.runAndWait() def main(): while True: #Waith for user say "genius" print("Say 'Genius' to start recording your question") with sr.Microphone() as source: recognizer=sr.Recognizer() audio=recognizer.listen(source) try: transcription = recognizer.recognize_google(audio) if transcription.lower()=="genius": #record audio filename ="input.wav" print("Say your question") with sr.Microphone() as source: recognizer=sr.recognize() source.pause_threshold=1 audio=recognizer.listen(source,phrase_time_limit=None,timeout=None) with open(filename,"wb")as f: f.write(audio.get_wav_data()) #transcript audio to test text=transcribe_audio_to_test(filename) if text: print(f"yuo said {text}") #Generate the response response = generate_response(text) print(f"chat gpt 3 say {response}") #read resopnse using GPT3 speak_text(response) except Exception as e: print("An error ocurred : {}".format(e)) if __name__=="__main__": main()
问题过程
- 初始运行报错
ModuleNotFoundError: No module named 'openai',先后用pip和pip3安装openai 0.27.2版本,安装日志如下:
marietto@marietto:/mnt/fisso/OS/Alexa-ChatGPT# pip install openai Collecting openai Downloading openai-0.27.2-py3-none-any.whl (70 kB) |????????????????????????????????| 70 kB 1.3 MB/s Requirement already satisfied: requests>=2.20 in /usr/local/lib/python3.8/dist-packages (from openai) (2.28.2) Requirement already satisfied: tqdm in /usr/local/lib/python3.8/dist-packages (from openai) (4.62.3) Collecting aiohttp Downloading aiohttp-3.8.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.0 MB) |????????????????????????????????| 1.0 MB 6.7 MB/s Requirement already satisfied: idna<4,>=2.5 in /usr/lib/python3/dist-packages (from requests>=2.20->openai) (2.8) Requirement already satisfied: certifi>=2017.4.17 in /usr/lib/python3/dist-packages (from requests>=2.20->openai) (2019.11.28) Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/lib/python3/dist-packages (from requests>=2.20->openai) (1.25.8) Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.8/dist-packages (from requests>=2.20->openai) (2.0.6) Requirement already satisfied: attrs>=17.3.0 in /usr/lib/python3/dist-packages (from aiohttp->openai) (19.3.0) Collecting yarl<2.0,>=1.0 Downloading yarl-1.8.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (258 kB) |????????????????????????????????| 258 kB 10.4 MB/s Collecting aiosignal>=1.1.2 Downloading aiosignal-1.3.1-py3-none-any.whl (7.6 kB) Collecting multidict<7.0,>=4.5 Downloading multidict-6.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (124 kB) |????????????????????????????????| 124 kB 9.7 MB/s Collecting async-timeout<5.0,>=4.0.0a3 Downloading async_timeout-4.0.2-py3-none-any.whl (5.8 kB) Collecting frozenlist>=1.1.1 Downloading frozenlist-1.3.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (162 kB) |????????????????????????????????| 162 kB 9.4 MB/s Installing collected packages: multidict, yarl, frozenlist, aiosignal, async-timeout, aiohttp, openai Successfully installed aiohttp-3.8.4 aiosignal-1.3.1 async-timeout-4.0.2 frozenlist-1.3.3 multidict-6.0.4 openai-0.27.2 yarl-1.8.2
marietto@marietto:/mnt/fisso/OS/Alexa-ChatGPT# pip3 install openai Requirement already satisfied: openai in /usr/local/lib/python3.8/dist-packages (0.27.2) Requirement already satisfied: tqdm in /usr/local/lib/python3.8/dist-packages (from openai) (4.62.3) Requirement already satisfied: requests>=2.20 in /usr/local/lib/python3.8/dist-packages (from openai) (2.28.2) Requirement already satisfied: aiohttp in /usr/local/lib/python3.8/dist-packages (from openai) (3.8.4) Requirement already satisfied: idna<4,>=2.5 in /usr/lib/python3/dist-packages (from requests>=2.20->openai) (2.8) Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/lib/python3/dist-packages (from requests>=2.20->openai) (1.25.8) Requirement already satisfied: certifi>=2017.4.17 in /usr/lib/python3/dist-packages (from requests>=2.20->openai) (2019.11.28) Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.8/dist-packages (from requests>=2.20->openai) (2.0.6) Requirement already satisfied: attrs>=17.3.0 in /usr/lib/python3/dist-packages (from aiohttp->openai) (19.3.0) Requirement already satisfied: frozenlist>=1.1.1 in /usr/local/lib/python3.8/dist-packages (from aiohttp->openai) (1.3.3) Requirement already satisfied: aiosignal>=1.1.2 in /usr/local/lib/python3.8/dist-packages (from aiohttp->openai) (1.3.1) Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/lib/python3.8/dist-packages (from aiohttp->openai) (6.0.4) Requirement already satisfied: async-timeout<5.0,>=4.0.0a3 in /usr/local/lib/python3.8/dist-packages (from aiohttp->openai) (4.0.2) Requirement already satisfied: yarl<2.0,>=1.0 in /usr/local/lib/python3.8/dist-packages (from aiohttp->openai) (1.8.2)
- 再次运行脚本,出现错误:
marietto@marietto:/mnt/fisso/OS/Alexa-ChatGPT# python3 code.py Illegal instruction (core dumped)
原因分析
Jetson Nano是ARMv8.0架构的aarch64平台,PyPI上部分预编译的二进制包(比如aiohttp及其依赖frozenlist、multidict)可能包含了该平台不支持的指令集(如ARMv8.2+专属指令),导致运行时触发非法指令错误。
解决方法
方法1:从源码编译兼容依赖
强制pip从源码编译所有依赖,适配Jetson Nano的硬件架构:
- 卸载现有冲突包:
pip3 uninstall -y openai aiohttp frozenlist multidict yarl aiosignal async-timeout
- 安装编译依赖:
sudo apt-get update && sudo apt-get install -y build-essential python3-dev libssl-dev libffi-dev
- 重新从源码安装:
pip3 install --no-binary :all: aiohttp openai
方法2:降级到兼容版本
部分旧版本的依赖包对ARMv8.0支持更友好:
pip3 uninstall -y aiohttp frozenlist multidict pip3 install aiohttp==3.7.4.post0 frozenlist==1.2.1 multidict==5.2.0 pip3 install openai==0.27.2
方法3:修正脚本自身错误
原脚本存在几处语法/拼写错误,修正后避免额外问题:
import openai import speech_recognition as sr import pyttsx3 import time # 替换为你的OpenAI API密钥 openai.api_key = "your-real-api-key-here" # 初始化语音合成引擎 engine = pyttsx3.init() def transcribe_audio_to_text(filename): recognizer = sr.Recognizer() with sr.AudioFile(filename) as source: audio = recognizer.record(source) try: return recognizer.recognize_google(audio) except: print("跳过未知错误") def generate_response(prompt): response = openai.Completion.create( engine="text-davinci-003", prompt=prompt, max_tokens=4000, n=1, stop=None, temperature=0.5, ) return response["choices"][0]["text"] # 修正原脚本的Choices大小写错误 def speak_text(text): engine.say(text) engine.runAndWait() def main(): while True: print("说 'Genius' 开始录制你的问题") with sr.Microphone() as source: recognizer = sr.Recognizer() audio = recognizer.listen(source) try: transcription = recognizer.recognize_google(audio) if transcription.lower() == "genius": filename = "input.wav" print("说出你的问题") with sr.Microphone() as source: recognizer = sr.Recognizer() # 修正原脚本的recognize()错误 source.pause_threshold = 1 audio = recognizer.listen(source, phrase_time_limit=None, timeout=None) with open(filename, "wb") as f: f.write(audio.get_wav_data()) # 音频转文字 text = transcribe_audio_to_text(filename) if text: print(f"你说的是:{text}") # 生成回复 response = generate_response(text) print(f"ChatGPT回复:{response}") # 语音输出回复 speak_text(response) except Exception as e: print(f"发生错误:{e}") if __name__ == "__main__": main()
内容的提问来源于stack exchange,提问作者john_connor
相关产品推荐
相关产品推荐

