add a bit less embarassing argparse that uses keyword arguments instead of positional arguments
This commit is contained in:
@@ -46,10 +46,10 @@ This still runs at interactive rates and samples more coherent and diverse stori
|
||||
|
||||
> Once upon a time, there was a little girl named Lily. She loved playing with her toys on top of her bed. One day, she decided to have a tea party with her stuffed animals. She poured some tea into a tiny teapot and put it on top of the teapot. Suddenly, her little brother Max came into the room and wanted to join the tea party too. Lily didn't want to share her tea and she told Max to go away. Max started to cry and Lily felt bad. She decided to yield her tea party to Max and they both shared the teapot. But then, something unexpected happened. The teapot started to shake and wiggle. Lily and Max were scared and didn't know what to do. Suddenly, the teapot started to fly towards the ceiling and landed on the top of the bed. Lily and Max were amazed and they hugged each other. They realized that sharing was much more fun than being selfish. From that day on, they always shared their tea parties and toys.
|
||||
|
||||
You can also prompt the model with a prefix (sadly, because this is currently done via positional arguments, you also have to specify temperature 1.0 and 256 steps, before you enter the prompt):
|
||||
You can also prompt the model with a prefix or a number of additional command line arguments, e.g. to sample at temperature 0.8 for 256 steps and with a prompt:
|
||||
|
||||
```bash
|
||||
./run stories42M.bin 1.0 256 "One day, Lily met a Shoggoth"
|
||||
./run stories42M.bin -t 0.8 -n 256 -p "One day, Lily met a Shoggoth"
|
||||
```
|
||||
|
||||
> One day, Lily met a Shoggoth. He was very shy, but was also very generous. Lily said “Hello Shoggy! Can I be your friend?” Shoggy was happy to have a friend and said “Yes, let’s explore the universe together!” So they set off on a journey to explore the universe. As they travelled, Shoggy was happy to explain to Lily about all the wonderful things in the universe. At the end of the day, Lily and Shoggy had gathered lots of wonderful things from the universe, and they both felt very proud. They promised to explore the universe as one big pair and to never stop being generous to each other.
|
||||
|
||||
@@ -448,35 +448,40 @@ int argmax(float* v, int n) {
|
||||
}
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
void error_usage() {
|
||||
printf("Usage: run <checkpoint> [options]\n");
|
||||
printf("Example: run model.bin -t 0.9 -n 256 -p \"Once upon a time\"\n");
|
||||
printf("Options:\n");
|
||||
printf(" -t <float> temperature, default 0.9\n");
|
||||
printf(" -s <int> random seed, default time(NULL)\n");
|
||||
printf(" -n <int> number of steps to run for, default 256. 0 = max_seq_len\n");
|
||||
printf(" -p <string> prompt string, default none\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
|
||||
// poor man's C argparse
|
||||
// default inits
|
||||
char *checkpoint = NULL; // e.g. out/model.bin
|
||||
float temperature = 0.9f; // e.g. 1.0, or 0.0
|
||||
int steps = 256; // max number of steps to run for, 0: use seq_len
|
||||
float temperature = 0.9f; // 0.0 = greedy & deterministic, 1.0 = max uncertainty
|
||||
rng_seed = (unsigned int)time(NULL); // seed rng with time by default
|
||||
int steps = 256; // number of steps to run for
|
||||
char *prompt = NULL; // prompt string
|
||||
|
||||
// 'checkpoint' is necessary arg
|
||||
if (argc < 2) {
|
||||
printf("Usage: %s <checkpoint_file> [temperature] [steps] [prompt]\n", argv[0]);
|
||||
return 1;
|
||||
// poor man's C argparse so we can override the defaults above from the command line
|
||||
if (argc >= 2) { checkpoint = argv[1]; } else { error_usage(); }
|
||||
for (int i = 2; i < argc; i+=2) {
|
||||
// do some basic validation
|
||||
if (i + 1 >= argc) { error_usage(); } // must have arg after flag
|
||||
if (argv[i][0] != '-') { error_usage(); } // must start with dash
|
||||
if (strlen(argv[i]) != 2) { error_usage(); } // must be -x (one dash, one letter)
|
||||
// read in the args
|
||||
if (argv[i][1] == 't') { temperature = atof(argv[i + 1]); }
|
||||
else if (argv[i][1] == 's') { rng_seed = atoi(argv[i + 1]); }
|
||||
else if (argv[i][1] == 'n') { steps = atoi(argv[i + 1]); }
|
||||
else if (argv[i][1] == 'p') { prompt = argv[i + 1]; }
|
||||
else { error_usage(); }
|
||||
}
|
||||
if (argc >= 2) {
|
||||
checkpoint = argv[1];
|
||||
}
|
||||
if (argc >= 3) {
|
||||
// optional temperature. 0.0 = (deterministic) argmax sampling. 1.0 = baseline
|
||||
temperature = atof(argv[2]);
|
||||
}
|
||||
if (argc >= 4) {
|
||||
steps = atoi(argv[3]);
|
||||
}
|
||||
if (argc >= 5) {
|
||||
prompt = argv[4];
|
||||
}
|
||||
|
||||
// seed rng with time. if you want deterministic behavior use temperature 0.0
|
||||
rng_seed = (unsigned int)time(NULL);
|
||||
|
||||
// read in the model.bin file
|
||||
Config config;
|
||||
|
||||
Reference in New Issue
Block a user