MusicGPT
基于自然语言提示生成音乐,并使用本地运行的大型语言模型(LLM)。
https://github.com/gabotechs/MusicGPT/assets/45515538/f0276e7c-70e5-42fc-817a-4d9ee9095b4c
☝️ 调高音量!
概述
MusicGPT 是一个应用程序,允许在任何平台上以高效的方式本地运行最新的音乐生成AI模型,无需安装像Python或机器学习框架等庞大的依赖项。
目前它仅支持 Meta的MusicGen,但计划未来支持不同的音乐生成模型,用户可以无缝切换。
项目的主要里程碑包括:
- 文本条件的音乐生成
- 基于旋律的音乐生成
- 无限或不定长的音乐流
安装
Mac 和 Linux
MusicGPT 可以通过 brew
在 Mac 和 Linux 上安装:
brew install gabotechs/taps/musicgpt
或直接从 此链接 下载预编译的二进制文件
Windows
在 Windows 上,可以从 此链接 下载可执行文件。
Docker(推荐使用CUDA运行)
如果你想使用支持CUDA的GPU运行MusicGPT,这是最佳方式,因为你只需在系统中安装 基本的NVIDIA驱动。
docker pull gabotechs/musicgpt
下载镜像后,你可以使用以下命令运行:
docker run -it --gpus all -p 8642:8642 -v ~/.musicgpt:/root/.local/share/musicgpt gabotechs/musicgpt --gpu --ui-expose
使用 cargo
如果你的系统中安装了 Rust工具链,你可以使用 cargo
安装:
cargo install musicgpt
使用方法
有两种与MusicGPT交互的方式:UI模式和CLI模式。
UI模式
此模式将显示一个类似聊天的网页应用,用于与LLM交换提示。它将:
- 保存你的聊天记录
- 允许你随时播放生成的音乐样本
- 在后台生成音乐样本
- 允许你在与执行LLM的设备不同的设备上使用UI
你可以通过执行以下命令运行UI:
musicgpt
你还可以选择不同的模型进行推理,并决定是否使用GPU,例如:
musicgpt --gpu --model medium
[!警告]
大多数模型需要非常强大的硬件来进行推理
如果你想使用支持CUDA的GPU,建议你使用Docker运行MusicGPT:
docker run -it --gpus all -p 8642:8642 -v ~/.musicgpt:/root/.local/share/musicgpt gabotechs/musicgpt --ui-expose --gpu
CLI模式
此模式将直接在终端中生成并播放音乐,允许你提供多个提示,并在生成后立即播放音频。你可以使用以下命令根据提示生成音频:
musicgpt "创作一首放松的LoFi音乐"
默认情况下,它会生成10秒的样本,这个时间可以配置最长到30秒:
musicgpt "创作一首放松的LoFi音乐" --secs 30
有多种模型可供选择,默认使用最小的一个,但你可以选择更大的模型:
musicgpt "创作一首放松的LoFi音乐" --model medium
[!警告]
大多数模型需要非常强大的硬件来进行推理
如果你想使用支持CUDA的GPU,建议你使用Docker运行MusicGPT:
docker run -it --gpus all -v ~/.musicgpt:/root/.local/share/musicgpt gabotechs/musicgpt --gpu "创作一首放松的LoFi音乐"
你可以通过运行以下命令查看所有可用选项:
musicgpt --help
基准测试
下图展示了在Mac M1 Pro上使用不同模型生成10秒音频所需的推理时间。为了对比,还展示了使用 https://github.com/huggingface/transformers 的Python等效时间。
生成10秒音频使用的命令是:
musicgpt '带有低音鼓和合成器的80年代流行音乐'
这是用于生成10秒音频的Python脚本
import scipy
import time
from transformers import AutoProcessor, MusicgenForConditionalGeneration
processor = AutoProcessor.from_pretrained("facebook/musicgen-small")
model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small")
inputs = processor(
text=["带有低音鼓和合成器的80年代流行音乐"],
padding=True,
return_tensors="pt",
)
start = time.time()
audio_values = model.generate(**inputs, max_new_tokens=500)
print(time.time() - start) # 记录生成所需时间
sampling_rate = model.config.audio_encoder.sampling_rate
scipy.io.wavfile.write("musicgen_out.wav", rate=sampling_rate, data=audio_values[0, 0].numpy())
存储
MusicGPT 需要访问你的存储,以保存下载的模型和生成的音频,以及应用程序正常运行所需的一些元数据。假设你的用户名是 foo
,它将把数据存储在以下位置:
- Windows:
C:\Users\foo\AppData\Roaming\gabotechs\musicgpt
- MacOS:
/Users/foo/Library/Application\ Support/com.gabotechs.musicgpt
- Linux:
/home/foo/.config/musicgpt
许可
代码是根据 MIT 许可 授权的,但应用程序启动时下载的AI模型权重是根据 CC-BY-NC-4.0 许可 授权的,因为它们是基于以下仓库生成的: