mirror of https://github.com/skygpu/skynet.git
				
				
				
			Add more ais, and start upscaler config and pipeline
							parent
							
								
									3a9e612695
								
							
						
					
					
						commit
						91e0693e65
					
				| 
						 | 
					@ -1,11 +1,14 @@
 | 
				
			||||||
from pytorch/pytorch:1.11.0-cuda11.3-cudnn8-runtime
 | 
					from pytorch/pytorch:latest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
env DEBIAN_FRONTEND=noninteractive
 | 
					env DEBIAN_FRONTEND=noninteractive
 | 
				
			||||||
 | 
					
 | 
				
			||||||
run apt-get update && apt-get install -y git wget
 | 
					run apt-get update && apt-get install -y git wget
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					run conda install xformers -c xformers/label/dev
 | 
				
			||||||
 | 
					
 | 
				
			||||||
run pip install --upgrade \
 | 
					run pip install --upgrade \
 | 
				
			||||||
    diffusers[torch] \
 | 
					    diffusers[torch] \
 | 
				
			||||||
 | 
					    accelerate \
 | 
				
			||||||
    transformers \
 | 
					    transformers \
 | 
				
			||||||
    huggingface_hub \
 | 
					    huggingface_hub \
 | 
				
			||||||
    pyTelegramBotAPI \
 | 
					    pyTelegramBotAPI \
 | 
				
			||||||
| 
						 | 
					@ -13,6 +16,8 @@ run pip install --upgrade \
 | 
				
			||||||
    scipy \
 | 
					    scipy \
 | 
				
			||||||
    pdbpp
 | 
					    pdbpp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					env NVIDIA_VISIBLE_DEVICES=all
 | 
				
			||||||
 | 
					
 | 
				
			||||||
run mkdir /scripts
 | 
					run mkdir /scripts
 | 
				
			||||||
run mkdir /outputs
 | 
					run mkdir /outputs
 | 
				
			||||||
run mkdir /inputs
 | 
					run mkdir /inputs
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -27,7 +27,7 @@ from datetime import datetime
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from pymongo import MongoClient
 | 
					from pymongo import MongoClient
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from typing import Tuple
 | 
					from typing import Tuple, Optional
 | 
				
			||||||
 | 
					
 | 
				
			||||||
db_user = os.environ['DB_USER']
 | 
					db_user = os.environ['DB_USER']
 | 
				
			||||||
db_pass = os.environ['DB_PASS']
 | 
					db_pass = os.environ['DB_PASS']
 | 
				
			||||||
| 
						 | 
					@ -39,9 +39,13 @@ MEM_FRACTION = .33
 | 
				
			||||||
ALGOS = {
 | 
					ALGOS = {
 | 
				
			||||||
    'stable': 'runwayml/stable-diffusion-v1-5',
 | 
					    'stable': 'runwayml/stable-diffusion-v1-5',
 | 
				
			||||||
    'midj': 'prompthero/openjourney',
 | 
					    'midj': 'prompthero/openjourney',
 | 
				
			||||||
 | 
					    'hdanime': 'Linaqruf/anything-v3.0',
 | 
				
			||||||
    'waifu': 'hakurei/waifu-diffusion',
 | 
					    'waifu': 'hakurei/waifu-diffusion',
 | 
				
			||||||
 | 
					    'ghibli': 'nitrosocke/Ghibli-Diffusion',
 | 
				
			||||||
    'van-gogh': 'dallinmackay/Van-Gogh-diffusion',
 | 
					    'van-gogh': 'dallinmackay/Van-Gogh-diffusion',
 | 
				
			||||||
    'pokemon': 'lambdalabs/sd-pokemon-diffusers'
 | 
					    'pokemon': 'lambdalabs/sd-pokemon-diffusers',
 | 
				
			||||||
 | 
					    'ink': 'Envvi/Inkpunk-Diffusion',
 | 
				
			||||||
 | 
					    'robot': 'nousr/robo-diffusion'
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
N = '\n'
 | 
					N = '\n'
 | 
				
			||||||
| 
						 | 
					@ -111,6 +115,7 @@ DEFAULT_STEP = 75
 | 
				
			||||||
DEFAULT_CREDITS = 10
 | 
					DEFAULT_CREDITS = 10
 | 
				
			||||||
DEFAULT_ALGO = 'stable'
 | 
					DEFAULT_ALGO = 'stable'
 | 
				
			||||||
DEFAULT_ROLE = 'pleb'
 | 
					DEFAULT_ROLE = 'pleb'
 | 
				
			||||||
 | 
					DEFAULT_UPSCALER = None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
rr_total = 1
 | 
					rr_total = 1
 | 
				
			||||||
rr_id = 0
 | 
					rr_id = 0
 | 
				
			||||||
| 
						 | 
					@ -141,38 +146,49 @@ def generate_image(
 | 
				
			||||||
    size: Tuple[int, int],
 | 
					    size: Tuple[int, int],
 | 
				
			||||||
    guidance: int,
 | 
					    guidance: int,
 | 
				
			||||||
    seed: int,
 | 
					    seed: int,
 | 
				
			||||||
    algo: str
 | 
					    algo: str,
 | 
				
			||||||
 | 
					    upscaler: Optional[str]
 | 
				
			||||||
):
 | 
					):
 | 
				
			||||||
    assert torch.cuda.is_available()
 | 
					    assert torch.cuda.is_available()
 | 
				
			||||||
    torch.cuda.empty_cache()
 | 
					    torch.cuda.empty_cache()
 | 
				
			||||||
    torch.cuda.set_per_process_memory_fraction(MEM_FRACTION)
 | 
					    torch.cuda.set_per_process_memory_fraction(MEM_FRACTION)
 | 
				
			||||||
 | 
					    with torch.no_grad():
 | 
				
			||||||
 | 
					        if algo == 'stable':
 | 
				
			||||||
 | 
					            pipe = StableDiffusionPipeline.from_pretrained(
 | 
				
			||||||
 | 
					                'runwayml/stable-diffusion-v1-5',
 | 
				
			||||||
 | 
					                torch_dtype=torch.float16,
 | 
				
			||||||
 | 
					                revision="fp16",
 | 
				
			||||||
 | 
					                safety_checker=None
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if algo == 'stable':
 | 
					        else:
 | 
				
			||||||
        pipe = StableDiffusionPipeline.from_pretrained(
 | 
					            pipe = StableDiffusionPipeline.from_pretrained(
 | 
				
			||||||
            'runwayml/stable-diffusion-v1-5',
 | 
					                ALGOS[algo],
 | 
				
			||||||
            torch_dtype=torch.float16,
 | 
					                torch_dtype=torch.float16,
 | 
				
			||||||
            revision="fp16",
 | 
					                safety_checker=None
 | 
				
			||||||
            safety_checker=None
 | 
					            )
 | 
				
			||||||
        )
 | 
					
 | 
				
			||||||
 | 
					        pipe.scheduler = EulerAncestralDiscreteScheduler.from_config(pipe.scheduler.config)
 | 
				
			||||||
 | 
					        pipe = pipe.to("cuda")
 | 
				
			||||||
 | 
					        w, h = size
 | 
				
			||||||
 | 
					        print(f'generating image... of size {w, h}')
 | 
				
			||||||
 | 
					        image = pipe(
 | 
				
			||||||
 | 
					            prompt,
 | 
				
			||||||
 | 
					            width=w,
 | 
				
			||||||
 | 
					            height=h,
 | 
				
			||||||
 | 
					            guidance_scale=guidance, num_inference_steps=step,
 | 
				
			||||||
 | 
					            generator=torch.Generator("cuda").manual_seed(seed)
 | 
				
			||||||
 | 
					        ).images[0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if upscaler == 'x4':
 | 
				
			||||||
 | 
					            pipe = StableDiffusionPipeline.from_pretrained(
 | 
				
			||||||
 | 
					                'stabilityai/stable-diffusion-x4-upscaler',
 | 
				
			||||||
 | 
					                revision="fp16",
 | 
				
			||||||
 | 
					                torch_dtype=torch.float16
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					            image = pipe(prompt=prompt, image=image).images[0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    else:
 | 
					 | 
				
			||||||
        pipe = StableDiffusionPipeline.from_pretrained(
 | 
					 | 
				
			||||||
            ALGOS[algo],
 | 
					 | 
				
			||||||
            torch_dtype=torch.float16,
 | 
					 | 
				
			||||||
            safety_checker=None
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pipe.scheduler = EulerAncestralDiscreteScheduler.from_config(pipe.scheduler.config)
 | 
					 | 
				
			||||||
    pipe = pipe.to("cuda")
 | 
					 | 
				
			||||||
    w, h = size
 | 
					 | 
				
			||||||
    print(f'generating image... of size {w, h}')
 | 
					 | 
				
			||||||
    image = pipe(
 | 
					 | 
				
			||||||
        prompt,
 | 
					 | 
				
			||||||
        width=w,
 | 
					 | 
				
			||||||
        height=h,
 | 
					 | 
				
			||||||
        guidance_scale=guidance, num_inference_steps=step,
 | 
					 | 
				
			||||||
        generator=torch.Generator("cuda").manual_seed(seed)
 | 
					 | 
				
			||||||
    ).images[0]
 | 
					 | 
				
			||||||
    image.save(f'/outputs/{name}.png')
 | 
					    image.save(f'/outputs/{name}.png')
 | 
				
			||||||
    print('saved')
 | 
					    print('saved')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -220,7 +236,8 @@ if __name__ == '__main__':
 | 
				
			||||||
                'step': DEFAULT_STEP,
 | 
					                'step': DEFAULT_STEP,
 | 
				
			||||||
                'size': DEFAULT_SIZE,
 | 
					                'size': DEFAULT_SIZE,
 | 
				
			||||||
                'seed': None,
 | 
					                'seed': None,
 | 
				
			||||||
                'guidance': DEFAULT_GUIDANCE
 | 
					                'guidance': DEFAULT_GUIDANCE,
 | 
				
			||||||
 | 
					                'upscaler': DEFAULT_UPSCALER
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -234,11 +251,16 @@ if __name__ == '__main__':
 | 
				
			||||||
            res = tg_users.find_one_and_update(
 | 
					            res = tg_users.find_one_and_update(
 | 
				
			||||||
                {'uid': db_user['uid']}, {'$set': {'role': DEFAULT_ROLE}})
 | 
					                {'uid': db_user['uid']}, {'$set': {'role': DEFAULT_ROLE}})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # new: ai selection
 | 
					        # new: algo selection
 | 
				
			||||||
        if 'algo' not in db_user['config']:
 | 
					        if 'algo' not in db_user['config']:
 | 
				
			||||||
            res = tg_users.find_one_and_update(
 | 
					            res = tg_users.find_one_and_update(
 | 
				
			||||||
                {'uid': db_user['uid']}, {'$set': {'config.algo': DEFAULT_ALGO}})
 | 
					                {'uid': db_user['uid']}, {'$set': {'config.algo': DEFAULT_ALGO}})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # new: upscaler selection
 | 
				
			||||||
 | 
					        if 'upscaler' not in db_user['config']:
 | 
				
			||||||
 | 
					            res = tg_users.find_one_and_update(
 | 
				
			||||||
 | 
					                {'uid': db_user['uid']}, {'$set': {'config.upscaler': DEFAULT_UPSCALER}})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return get_user(db_user['uid'])
 | 
					        return get_user(db_user['uid'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_or_create_user(uid: int):
 | 
					    def get_or_create_user(uid: int):
 | 
				
			||||||
| 
						 | 
					@ -263,13 +285,14 @@ if __name__ == '__main__':
 | 
				
			||||||
    # bot handler
 | 
					    # bot handler
 | 
				
			||||||
    def img_for_user_with_prompt(
 | 
					    def img_for_user_with_prompt(
 | 
				
			||||||
        uid: int,
 | 
					        uid: int,
 | 
				
			||||||
        prompt: str, step: int, size: Tuple[int, int], guidance: int, seed: int, algo: str
 | 
					        prompt: str, step: int, size: Tuple[int, int], guidance: int, seed: int,
 | 
				
			||||||
 | 
					        algo: str, upscaler: Optional[str]
 | 
				
			||||||
    ):
 | 
					    ):
 | 
				
			||||||
        name = uuid.uuid4()
 | 
					        name = uuid.uuid4()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        spawn(
 | 
					        spawn(
 | 
				
			||||||
            generate_image,
 | 
					            generate_image,
 | 
				
			||||||
            args=(prompt, name, step, size, guidance, seed, algo))
 | 
					            args=(prompt, name, step, size, guidance, seed, algo, upscaler))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        logging.info(f'done generating. got {name}, sending...')
 | 
					        logging.info(f'done generating. got {name}, sending...')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -324,10 +347,11 @@ if __name__ == '__main__':
 | 
				
			||||||
        size = user_conf['size']
 | 
					        size = user_conf['size']
 | 
				
			||||||
        seed = user_conf['seed'] if user_conf['seed'] else random.randint(0, 999999999)
 | 
					        seed = user_conf['seed'] if user_conf['seed'] else random.randint(0, 999999999)
 | 
				
			||||||
        guidance = user_conf['guidance']
 | 
					        guidance = user_conf['guidance']
 | 
				
			||||||
 | 
					        upscaler = user_conf['upscaler']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            reply_txt, name = img_for_user_with_prompt(
 | 
					            reply_txt, name = img_for_user_with_prompt(
 | 
				
			||||||
                user.id, prompt, step, size, guidance, seed, algo)
 | 
					                user.id, prompt, step, size, guidance, seed, algo, upscaler)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            update_user(
 | 
					            update_user(
 | 
				
			||||||
                user.id,
 | 
					                user.id,
 | 
				
			||||||
| 
						 | 
					@ -370,12 +394,13 @@ if __name__ == '__main__':
 | 
				
			||||||
        size = user_conf['size']
 | 
					        size = user_conf['size']
 | 
				
			||||||
        seed = user_conf['seed'] if user_conf['seed'] else random.randint(0, 999999999)
 | 
					        seed = user_conf['seed'] if user_conf['seed'] else random.randint(0, 999999999)
 | 
				
			||||||
        guidance = user_conf['guidance']
 | 
					        guidance = user_conf['guidance']
 | 
				
			||||||
 | 
					        upscaler = user_conf['upscaler']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        logging.info(f"{user.first_name} ({user.id}) on chat {chat.id} redo: {prompt}")
 | 
					        logging.info(f"{user.first_name} ({user.id}) on chat {chat.id} redo: {prompt}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            reply_txt, name = img_for_user_with_prompt(
 | 
					            reply_txt, name = img_for_user_with_prompt(
 | 
				
			||||||
                user.id, prompt, step, size, guidance, seed, algo)
 | 
					                user.id, prompt, step, size, guidance, seed, algo, upscaler)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            update_user(
 | 
					            update_user(
 | 
				
			||||||
                user.id,
 | 
					                user.id,
 | 
				
			||||||
| 
						 | 
					@ -447,6 +472,13 @@ if __name__ == '__main__':
 | 
				
			||||||
                    val = max(min(val, MAX_GUIDANCE), 0)
 | 
					                    val = max(min(val, MAX_GUIDANCE), 0)
 | 
				
			||||||
                    res = update_user(user.id, {'$set': {'config.guidance': val}})
 | 
					                    res = update_user(user.id, {'$set': {'config.guidance': val}})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                elif attr == 'upscaler':
 | 
				
			||||||
 | 
					                    val = params[2]
 | 
				
			||||||
 | 
					                    if val == 'off':
 | 
				
			||||||
 | 
					                        val = None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    res = update_user(user.id, {'$set': {'config.upscaler': val}})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                else:
 | 
					                else:
 | 
				
			||||||
                    bot.reply_to(message, f'\"{attr}\" not a parameter')
 | 
					                    bot.reply_to(message, f'\"{attr}\" not a parameter')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -501,4 +533,5 @@ if __name__ == '__main__':
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    login(token=os.environ['HF_TOKEN'])
 | 
					    login(token=os.environ['HF_TOKEN'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    bot.infinity_polling()
 | 
					    bot.infinity_polling()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue