| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| """ |
| Create a random model and tokenizer for PPO training |
| """ |
|
|
| import os |
|
|
| import torch |
| from transformers import AutoModelForCausalLM, AutoTokenizer, LlamaConfig |
|
|
| from tests.e2e.envs.digit_completion import CharTokenizer |
|
|
| tokenizer = CharTokenizer( |
| characters=["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ",", ":"], |
| model_max_length=2048, |
| chat_template="{% if messages[0]['role'] == 'system' %}{{ raise_exception('System role not supported') }}{% endif %}{% for message in messages %}{% if (message['role'] == 'user') != (loop.index0 % 2 == 0) %}{{ raise_exception('Conversation roles must alternate user/assistant/user/assistant/...') }}{% endif %}{% set role = message['role'] %}{{ message['content'] }}{% endfor %}{% if add_generation_prompt %}{{ sep_token }}{% endif %}", |
| ) |
|
|
| config = LlamaConfig( |
| vocab_size=(tokenizer.vocab_size + 16 - 1) // 16 * 16, |
| hidden_size=128, |
| intermediate_size=344, |
| num_hidden_layers=4, |
| num_attention_heads=4, |
| num_key_value_heads=4, |
| pad_token_id=tokenizer.pad_token_id, |
| bos_token_id=tokenizer.bos_token_id, |
| eos_token_id=tokenizer.eos_token_id, |
| ) |
|
|
| model = AutoModelForCausalLM.from_config(config, torch_dtype=torch.bfloat16) |
|
|
| model_folder = os.path.join(os.path.dirname(os.path.abspath(__file__))) |
| os.makedirs(model_folder, exist_ok=True) |
|
|
| model.save_pretrained(model_folder) |
|
|
| tokenizer_folder = model_folder |
| tokenizer.save_pretrained(tokenizer_folder) |
|
|
| load_tokenizer = AutoTokenizer.from_pretrained(tokenizer_folder) |
|
|
| chat = [{"role": "user", "content": "1,0:2,3"}] |
|
|
| load_tokenizer.padding_side = "left" |
| print(load_tokenizer.apply_chat_template(chat, tokenize=True, add_generation_prompt=True, max_length=10, padding="max_length")) |
|
|