MusicGen est un modèle simple et contrôlable pour la génération de musique. Il s'agit d'un modèle de transformateur auto-régressif à un étage formé sur un tokenizer EnCodec 32 kHz avec 4 livres de codes échantillonnés à 50 Hz. Contrairement aux méthodes existantes comme MusicLM, MusicGen ne nécessite pas de représentation sémantique auto-supervisée et génère les 4 livres de codes en un seul passage. En introduisant un petit délai entre les livres de codes, les auteurs montrent qu'ils peuvent les prédire en parallèle, n'ayant ainsi que 50 pas auto-régressifs par seconde d'audio. Ils ont utilisé 20 000 heures de musique sous licence pour former MusicGen. Plus précisément, ils se sont appuyés sur un ensemble de données interne de 10 000 morceaux de musique de haute qualité, ainsi que sur les données musicales ShutterStock et Pond5.
Pour plus d’informations sur ce modèle, voir ici.
Vous pouvez faire une démonstration de ce modèle ou apprendre à l'utiliser avec l'API de Replicate ici.
Cog est un outil open source qui regroupe des modèles d'apprentissage automatique dans un conteneur standard prêt pour la production. Vous pouvez déployer votre modèle packagé sur votre propre infrastructure ou sur Répliquer, où les utilisateurs peuvent interagir avec lui via une interface Web ou une API.
Dent. Suivez ces instructions pour installer Cog ou exécutez simplement :
sudo curl -o /usr/local/bin/cog -L "https://github.com/replicate/cog/releases/latest/download/cog_$(uname -s)_$(uname -m)"
sudo chmod +x /usr/local/bin/cog
Notez que pour utiliser Cog, vous aurez également besoin d'une installation de Docker.
git clone https://github.com/replicate/cog-musicgen-melody
Pour exécuter le modèle, vous avez besoin d'une copie locale de l'image Docker du modèle. Vous pouvez satisfaire à cette exigence en spécifiant l'ID de l'image dans votre appel pour predict
comme :
cog predict r8.im/joehoover/musicgen-melody@sha256:1a53415e6c4549e3022a0af82f4bd22b9ae2e747a8193af91b0bdffe63f93dfd -i description=tense staccato strings. plucked strings. dissonant. scary movie. -i duration=8
Pour plus d'informations, consultez la section Cog ici
Alternativement, vous pouvez créer l'image vous-même, soit en exécutant cog build
, soit en laissant cog predict
déclencher implicitement le processus de construction. Par exemple, ce qui suit déclenchera le processus de génération, puis exécutera la prédiction :
cog predict -i description="tense staccato strings. plucked strings. dissonant. scary movie." -i duration=8
Notez que la première fois que vous exécutez cog predict
, les poids du modèle et les autres actifs requis seront téléchargés s'ils ne sont pas disponibles localement. Ce téléchargement ne doit être exécuté qu'une seule fois.
Si vous ne l'avez pas déjà fait, vous devez vous assurer que votre modèle s'exécute localement avec cog predict
. Cela garantira que tous les actifs sont accessibles. Par exemple, exécutez :
cog predict -i description=tense staccato strings. plucked strings. dissonant. scary movie. -i duration=8
Accédez à replite.com/create pour créer un modèle de réplication. Si vous souhaitez garder le modèle privé, assurez-vous de spécifier « privé ».
Replicate prend en charge l'exécution de modèles sur diverses configurations CPU et GPU. Pour obtenir les meilleures performances, vous souhaiterez exécuter ce modèle sur une instance A100.
Cliquez sur l'onglet « Paramètres » sur la page de votre modèle, faites défiler jusqu'à « Matériel GPU » et sélectionnez « A100 ». Cliquez ensuite sur "Enregistrer".
Connectez-vous pour répliquer :
cog login
Transférez le contenu de votre répertoire actuel vers Répliquer, en utilisant le nom de modèle que vous avez spécifié à l'étape 1 :
cog push r8.im/username/modelname
Apprenez-en davantage sur la manière de pousser les modèles vers la réplication.
La prise en charge du réglage fin de MusicGen est en cours de développement. Actuellement, un support minimal a été implémenté via une adaptation du formateur music_gen
de @chavez.
En supposant que vous ayez configuré un environnement local (c'est-à-dire que vous avez effectué les étapes spécifiées sous Exécuter avec Cog), vous pouvez exécuter la formation avec une commande telle que :
cog train -i dataset_path=@<path-to-your-data> <additional hyperparameters>
Cog nécessite que les données d'entrée soient un fichier ; cependant, notre script de formation attend un répertoire. Par conséquent, en production, les données de formation doivent être fournies sous forme d’archive tar d’un répertoire de données de formation correctement formatées. Cependant, vous pouvez contourner cette exigence en nommant votre répertoire de données de formation ./train_data
. Si un tel répertoire existe, le script de formation tentera de charger les données de ce répertoire (voir les lignes 140 à 147 dans train.py
).
Actuellement, la formation prend uniquement en charge la génération de musique avec des invites textuelles.
Pour entraîner le modèle sur vos propres données, procédez comme suit :
.txt
correspondant avec le même nom de fichier. Ces fichiers texte doivent contenir l'invite de texte que vous souhaitez associer au fichier audio correspondant. Par exemple, si vous avez audio_1.wav
, vous devez également avoir audio_1.txt
et ce fichier texte doit contenir l'invite audio_1.wav
../train_data
, vous pouvez simplement exécuter le script de formation comme : cog train -i dataset_path=@./train_data/ <additional hyperparameters>
train_data
n'existe pas, vous pouvez tarballer votre répertoire de données et transmettre le chemin d'accès à l'archive tar à cog train ...
. Le script de train décompressera ensuite vos données et tentera de les charger.Exécutez ceci pour vous entraîner sur un seul clip :
mkdir ./train_data/
wget -P ./train_data/ https://github.com/facebookresearch/audiocraft/raw/main/assets/bach.mp3
echo bach > ./train_data/bach.txt
tar -cvzf train_data.tar.gz train_data/
cog train -i dataset_path=@./data.tar.gz -i epochs=10
Ensuite, vous pouvez charger votre modèle comme model.lm.load_state_dict(torch.load('model_outdir/lm_final.pt'))
et générer comme :
model.set_generation_params(
duration=8,
top_k=250,
top_p=0,
temperature=1,
cfg_coef=3,
)
wav = model.generate(descriptions=[''], progress=True)