%23%20Copyright%20(c)%20Sebastian%20Raschka%20under%20Apache%20License%202.0%20(see%20LICENSE.txt).%0A%23%20Source%20for%20%22Build%20a%20Large%20Language%20Model%20From%20Scratch%22%0A%23%20%20%20-%20https%3A%2F%2Fwww.manning.com%2Fbooks%2Fbuild-a-large-language-model-from-scratch%0A%23%20Code%3A%20https%3A%2F%2Fgithub.com%2Frasbt%2FLLMs-from-scratch%0A%0Aimport%20marimo%0A%0A__generated_with%20%3D%20%220.19.2%22%0Aapp%20%3D%20marimo.App()%0A%0Awith%20app.setup%3A%0A%20%20%20%20import%20json%0A%20%20%20%20import%20os%0A%20%20%20%20import%20urllib.request%0A%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20import%20numpy%20as%20np%0A%20%20%20%20import%20tensorflow%20as%20tf%0A%20%20%20%20from%20tqdm%20import%20tqdm%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%81%93%E3%82%8C%E3%81%AF%E3%80%81OpenAI%20Public%20%E3%81%8B%E3%82%89%E3%83%A2%E3%83%87%E3%83%AB%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%82%92%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E3%81%97%E3%80%81%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AE%E9%87%8D%E3%81%BF%E3%82%92%E8%BE%9E%E6%9B%B8%E3%81%A8%E3%81%97%E3%81%A6%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%80%E5%85%A8%E4%BD%93%E3%81%AE%E3%83%91%E3%82%A4%E3%83%97%E3%83%A9%E3%82%A4%E3%83%B3%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.function%0Adef%20download_and_load_gpt2(model_size%2C%20models_dir)%3A%0A%20%20%20%20%23%20%E3%83%A2%E3%83%87%E3%83%AB%E3%82%B5%E3%82%A4%E3%82%BA%E3%82%92%E6%A4%9C%E8%A8%BC%E3%81%99%E3%82%8B%0A%20%20%20%20allowed_sizes%20%3D%20(%22124M%22%2C%20%22355M%22%2C%20%22774M%22%2C%20%221558M%22)%0A%20%20%20%20if%20model_size%20not%20in%20allowed_sizes%3A%0A%20%20%20%20%20%20%20%20raise%20ValueError(f%22Model%20size%20not%20in%20%7Ballowed_sizes%7D%22)%0A%0A%20%20%20%20%23%20%E3%83%91%E3%82%B9%E3%82%92%E5%AE%9A%E7%BE%A9%E3%81%99%E3%82%8B%0A%20%20%20%20model_dir%20%3D%20os.path.join(models_dir%2C%20model_size)%0A%20%20%20%20base_url%20%3D%20%22https%3A%2F%2Fopenaipublic.blob.core.windows.net%2Fgpt-2%2Fmodels%22%0A%20%20%20%20backup_base_url%20%3D%20%22https%3A%2F%2Ff001.backblazeb2.com%2Ffile%2FLLMs-from-scratch%2Fgpt2%22%0A%20%20%20%20filenames%20%3D%20%5B%0A%20%20%20%20%20%20%20%20%22checkpoint%22%2C%20%22encoder.json%22%2C%20%22hparams.json%22%2C%0A%20%20%20%20%20%20%20%20%22model.ckpt.data-00000-of-00001%22%2C%20%22model.ckpt.index%22%2C%0A%20%20%20%20%20%20%20%20%22model.ckpt.meta%22%2C%20%22vocab.bpe%22%0A%20%20%20%20%5D%0A%0A%20%20%20%20%23%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E3%81%99%E3%82%8B%0A%20%20%20%20os.makedirs(model_dir%2C%20exist_ok%3DTrue)%0A%20%20%20%20for%20filename%20in%20filenames%3A%0A%20%20%20%20%20%20%20%20file_url%20%3D%20os.path.join(base_url%2C%20model_size%2C%20filename)%0A%20%20%20%20%20%20%20%20backup_url%20%3D%20os.path.join(backup_base_url%2C%20model_size%2C%20filename)%0A%20%20%20%20%20%20%20%20file_path%20%3D%20os.path.join(model_dir%2C%20filename)%0A%20%20%20%20%20%20%20%20download_file(file_url%2C%20file_path%2C%20backup_url)%0A%0A%20%20%20%20%23%20%E8%A8%AD%E5%AE%9A%E3%81%A8%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%80%0A%20%20%20%20tf_ckpt_path%20%3D%20tf.train.latest_checkpoint(model_dir)%0A%20%20%20%20settings%20%3D%20json.load(open(os.path.join(model_dir%2C%20%22hparams.json%22)%2C%20%22r%22%2C%20encoding%3D%22utf-8%22))%0A%20%20%20%20params%20%3D%20load_gpt2_params_from_tf_ckpt(tf_ckpt_path%2C%20settings)%0A%0A%20%20%20%20return%20settings%2C%20params%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%81%93%E3%82%8C%E3%81%AF%E3%80%81%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E5%AD%98%E5%9C%A8%E7%A2%BA%E8%AA%8D%E3%83%BB%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AF%E5%8D%98%E4%BD%8D%E3%81%AE%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E3%83%BB%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%20URL%20%E3%81%B8%E3%81%AE%E5%AF%BE%E5%BF%9C%E3%82%92%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88%E3%81%99%E3%82%8B%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%80%E3%83%BC%E9%96%A2%E6%95%B0%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.function%0Adef%20download_file(url%2C%20destination%2C%20backup_url%3DNone)%3A%0A%20%20%20%20def%20_attempt_download(download_url)%3A%0A%20%20%20%20%20%20%20%20with%20urllib.request.urlopen(download_url)%20as%20response%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%20%E3%83%98%E3%83%83%E3%83%80%E3%83%BC%E3%81%8B%E3%82%89%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%85%A8%E4%BD%93%E3%81%AE%E3%82%B5%E3%82%A4%E3%82%BA%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E3%80%82%E3%81%AA%E3%81%91%E3%82%8C%E3%81%B0%200%20%E3%81%A8%E3%81%99%E3%82%8B%0A%20%20%20%20%20%20%20%20%20%20%20%20file_size%20%3D%20int(response.headers.get(%22Content-Length%22%2C%200))%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8C%E5%AD%98%E5%9C%A8%E3%81%97%E3%80%81%E3%82%B5%E3%82%A4%E3%82%BA%E3%81%8C%E5%90%8C%E3%81%98%E3%81%8B%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20os.path.exists(destination)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20file_size_local%20%3D%20os.path.getsize(destination)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20file_size%20%3D%3D%20file_size_local%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20print(f%22File%20already%20exists%20and%20is%20up-to-date%3A%20%7Bdestination%7D%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20True%20%20%23%20%E5%86%8D%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E3%81%9B%E3%81%9A%E3%81%AB%E6%88%90%E5%8A%9F%E3%82%92%E7%A4%BA%E3%81%99%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20block_size%20%3D%201024%20%20%23%201%20%E3%82%AD%E3%83%AD%E3%83%90%E3%82%A4%E3%83%88%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%85%A8%E4%BD%93%E3%81%AE%E3%82%B5%E3%82%A4%E3%82%BA%E3%81%A7%E3%83%97%E3%83%AD%E3%82%B0%E3%83%AC%E3%82%B9%E3%83%90%E3%83%BC%E3%82%92%E5%88%9D%E6%9C%9F%E5%8C%96%E3%81%99%E3%82%8B%0A%20%20%20%20%20%20%20%20%20%20%20%20progress_bar_description%20%3D%20os.path.basename(download_url)%0A%20%20%20%20%20%20%20%20%20%20%20%20with%20tqdm(total%3Dfile_size%2C%20unit%3D%22iB%22%2C%20unit_scale%3DTrue%2C%20desc%3Dprogress_bar_description)%20as%20progress_bar%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20with%20open(destination%2C%20%22wb%22)%20as%20file%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20while%20True%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20chunk%20%3D%20response.read(block_size)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20not%20chunk%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20file.write(chunk)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20progress_bar.update(len(chunk))%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20True%0A%0A%20%20%20%20try%3A%0A%20%20%20%20%20%20%20%20if%20_attempt_download(url)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%0A%20%20%20%20except%20(urllib.error.HTTPError%2C%20urllib.error.URLError)%3A%0A%20%20%20%20%20%20%20%20if%20backup_url%20is%20not%20None%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20print(f%22Primary%20URL%20(%7Burl%7D)%20failed.%20Attempting%20backup%20URL%3A%20%7Bbackup_url%7D%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20try%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20_attempt_download(backup_url)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%0A%20%20%20%20%20%20%20%20%20%20%20%20except%20urllib.error.HTTPError%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20pass%0A%0A%20%20%20%20%20%20%20%20%23%20%E3%81%93%E3%81%93%E3%81%AB%E5%88%B0%E9%81%94%E3%81%97%E3%81%9F%E5%A0%B4%E5%90%88%E3%80%81%E4%B8%A1%E6%96%B9%E3%81%AE%E8%A9%A6%E8%A1%8C%E3%81%8C%E5%A4%B1%E6%95%97%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%0A%20%20%20%20%20%20%20%20error_message%20%3D%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20f%22Failed%20to%20download%20from%20both%20primary%20URL%20(%7Burl%7D)%22%0A%20%20%20%20%20%20%20%20%20%20%20%20f%22%7B'%20and%20backup%20URL%20('%20%2B%20backup_url%20%2B%20')'%20if%20backup_url%20else%20''%7D.%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%5CnCheck%20your%20internet%20connection%20or%20the%20file%20availability.%5Cn%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%22For%20help%2C%20visit%3A%20https%3A%2F%2Fgithub.com%2Frasbt%2FLLMs-from-scratch%2Fdiscussions%2F273%22%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20print(error_message)%0A%20%20%20%20except%20Exception%20as%20e%3A%0A%20%20%20%20%20%20%20%20print(f%22An%20unexpected%20error%20occurred%3A%20%7Be%7D%22)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%81%93%E3%82%8C%E3%81%AF%E3%80%81TensorFlow%20%E3%81%AE%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88%E3%82%92%E3%80%81%E6%8E%A5%E9%A0%AD%E8%BE%9E%20%22h%22%20%E3%82%92%E7%9C%81%E3%81%84%E3%81%9F%E9%81%A9%E5%88%87%E3%81%AA%E5%90%8D%E5%89%8D%E3%82%92%E6%8C%81%E3%81%A4%E8%BE%9E%E6%9B%B8%E5%A4%89%E6%95%B0%E3%81%B8%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%80%E9%96%A2%E6%95%B0%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.function%0Adef%20load_gpt2_params_from_tf_ckpt(ckpt_path%2C%20settings)%3A%0A%20%20%20%20%23%20%E5%90%84%E5%B1%A4%E3%81%94%E3%81%A8%E3%81%AB%E7%A9%BA%E3%81%AE%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%82%92%E6%8C%81%E3%81%A4%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E8%BE%9E%E6%9B%B8%E3%82%92%E5%88%9D%E6%9C%9F%E5%8C%96%E3%81%99%E3%82%8B%0A%20%20%20%20params%20%3D%20%7B%22blocks%22%3A%20%5B%7B%7D%20for%20_%20in%20range(settings%5B%22n_layer%22%5D)%5D%7D%0A%0A%20%20%20%20%23%20%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88%E5%86%85%E3%81%AE%E5%90%84%E5%A4%89%E6%95%B0%E3%82%92%E5%8F%8D%E5%BE%A9%E3%81%99%E3%82%8B%0A%20%20%20%20for%20name%2C%20_%20in%20tf.train.list_variables(ckpt_path)%3A%0A%20%20%20%20%20%20%20%20%23%20%E5%A4%89%E6%95%B0%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%80%81%E3%82%B5%E3%82%A4%E3%82%BA1%E3%81%AE%E6%AC%A1%E5%85%83%E3%82%92%E9%99%A4%E5%8E%BB%E3%81%99%E3%82%8B%0A%20%20%20%20%20%20%20%20variable_array%20%3D%20np.squeeze(tf.train.load_variable(ckpt_path%2C%20name))%0A%0A%20%20%20%20%20%20%20%20%23%20%E5%A4%89%E6%95%B0%E5%90%8D%E3%82%92%E5%87%A6%E7%90%86%E3%81%97%E3%81%A6%E9%96%A2%E9%80%A3%E3%81%99%E3%82%8B%E9%83%A8%E5%88%86%E3%82%92%E6%8A%BD%E5%87%BA%E3%81%99%E3%82%8B%0A%20%20%20%20%20%20%20%20variable_name_parts%20%3D%20name.split(%22%2F%22)%5B1%3A%5D%20%20%23%20'model%2F'%20%E3%81%AE%E6%8E%A5%E9%A0%AD%E8%BE%9E%E3%82%92%E3%82%B9%E3%82%AD%E3%83%83%E3%83%97%E3%81%99%E3%82%8B%0A%0A%20%20%20%20%20%20%20%20%23%20%E5%A4%89%E6%95%B0%E3%81%AE%E6%A0%BC%E7%B4%8D%E5%85%88%E3%81%A8%E3%81%AA%E3%82%8B%E8%BE%9E%E6%9B%B8%E3%82%92%E7%89%B9%E5%AE%9A%E3%81%99%E3%82%8B%0A%20%20%20%20%20%20%20%20target_dict%20%3D%20params%0A%20%20%20%20%20%20%20%20if%20variable_name_parts%5B0%5D.startswith(%22h%22)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20layer_number%20%3D%20int(variable_name_parts%5B0%5D%5B1%3A%5D)%0A%20%20%20%20%20%20%20%20%20%20%20%20target_dict%20%3D%20params%5B%22blocks%22%5D%5Blayer_number%5D%0A%0A%20%20%20%20%20%20%20%20%23%20%E3%83%8D%E3%82%B9%E3%83%88%E3%81%97%E3%81%9F%E8%BE%9E%E6%9B%B8%E3%82%92%E5%86%8D%E5%B8%B0%E7%9A%84%E3%81%AB%E5%8F%82%E7%85%A7%E3%81%BE%E3%81%9F%E3%81%AF%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%0A%20%20%20%20%20%20%20%20for%20key%20in%20variable_name_parts%5B1%3A-1%5D%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20target_dict%20%3D%20target_dict.setdefault(key%2C%20%7B%7D)%0A%0A%20%20%20%20%20%20%20%20%23%20%E5%A4%89%E6%95%B0%E9%85%8D%E5%88%97%E3%82%92%E6%9C%80%E5%BE%8C%E3%81%AE%E3%82%AD%E3%83%BC%E3%81%B8%E5%89%B2%E3%82%8A%E5%BD%93%E3%81%A6%E3%82%8B%0A%20%20%20%20%20%20%20%20last_key%20%3D%20variable_name_parts%5B-1%5D%0A%20%20%20%20%20%20%20%20target_dict%5Blast_key%5D%20%3D%20variable_array%0A%0A%20%20%20%20return%20params%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
74641b00373dc6e00236bb419d11fb81