import argparse import tempfile import os import subprocess import sys def main(): parser = argparse.ArgumentParser(description='Run YuE model with direct input') parser.add_argument('--genre', type=str, required=True, help='Genre tags for the music') parser.add_argument('--lyrics', type=str, required=True, help='Lyrics for the music') parser.add_argument('--run_n_segments', type=int, default=2, help='Number of segments to process') parser.add_argument('--stage2_batch_size', type=int, default=4, help='Batch size for stage 2') parser.add_argument('--max_new_tokens', type=int, default=3000, help='Maximum number of new tokens') parser.add_argument('--cuda_idx', type=int, default=0, help='CUDA device index') args = parser.parse_args() print("\n=== Starting YuE Inference ===") current_dir = os.path.dirname(os.path.abspath(__file__)) inference_dir = os.path.dirname(os.path.abspath(__file__)) print(f"\nCurrent directory: {os.getcwd()}") print(f"Script directory: {current_dir}") print(f"Inference directory: {inference_dir}") # Create temporary files for genre and lyrics with tempfile.NamedTemporaryFile(mode='w', delete=False) as genre_file: genre_file.write(args.genre) genre_path = genre_file.name print(f"\nCreated genre file at: {genre_path}") print(f"Genre content: {args.genre}") with tempfile.NamedTemporaryFile(mode='w', delete=False) as lyrics_file: lyrics_file.write(args.lyrics) lyrics_path = lyrics_file.name print(f"\nCreated lyrics file at: {lyrics_path}") print(f"Lyrics content: {args.lyrics}") output_dir = '/home/user/app/output' try: # Go to inference directory for running the script os.chdir(inference_dir) print(f"\nChanged working directory to: {os.getcwd()}") infer_script = 'infer.py' print(f"\nInference script path: {infer_script}") print(f"Script exists: {os.path.exists(infer_script)}") tokenizer_path = './mm_tokenizer_v0.2_hf/tokenizer.model' print(f"\nChecking tokenizer at: {tokenizer_path}") print(f"Tokenizer exists: {os.path.exists(tokenizer_path)}") if os.path.exists('./mm_tokenizer_v0.2_hf'): print("Tokenizer directory contents:") print(os.listdir('./mm_tokenizer_v0.2_hf')) else: print("WARNING: Tokenizer directory not found!") print("\nExecuting inference command...") command = [ 'python', infer_script, '--stage1_model', 'm-a-p/YuE-s1-7B-anneal-en-cot', '--stage2_model', 'm-a-p/YuE-s2-1B-general', '--genre_txt', genre_path, '--lyrics_txt', lyrics_path, '--run_n_segments', str(args.run_n_segments), '--stage2_batch_size', str(args.stage2_batch_size), '--output_dir', output_dir, '--cuda_idx', str(args.cuda_idx), '--max_new_tokens', str(args.max_new_tokens) ] print(f"Command: {' '.join(command)}") result = subprocess.run(command, check=True, capture_output=True, text=True) print("\nInference completed successfully!") print("\nStdout:") print(result.stdout) if result.stderr: print("\nStderr:") print(result.stderr) print(f"\nOutput directory: {output_dir}") if os.path.exists(output_dir): print("Generated files:") for file in os.listdir(output_dir): file_path = os.path.join(output_dir, file) print(f"- {file_path} ({os.path.getsize(file_path)} bytes)") else: print("WARNING: Output directory does not exist!") except subprocess.CalledProcessError as e: print("\nError running inference script:") print(f"Exit code: {e.returncode}") print("\nStdout:") print(e.stdout) print("\nStderr:") print(e.stderr) raise finally: # Clean up temporary files print("\nCleaning up temporary files...") os.unlink(genre_path) os.unlink(lyrics_path) if __name__ == '__main__': main()