From 02b49acead0b61b0f543b74a926ec5b4b710267d Mon Sep 17 00:00:00 2001 From: Przemek Strzelczyk <41076710+nvpstr@users.noreply.github.com> Date: Tue, 10 Sep 2019 16:22:53 +0200 Subject: [PATCH 01/44] [Tacotron2] Added denoiser and inference stats, fixed typos --- PyTorch/SpeechSynthesis/Tacotron2/Dockerfile | 2 +- PyTorch/SpeechSynthesis/Tacotron2/README.md | 122 ++++--- .../SpeechSynthesis/Tacotron2/common/stft.py | 1 + .../SpeechSynthesis/Tacotron2/inference.py | 12 +- .../Tacotron2/run_latency_tests.sh | 5 + .../Tacotron2/tacotron2/model.py | 8 +- .../SpeechSynthesis/Tacotron2/test_infer.py | 316 ++++++++++++++++++ .../SpeechSynthesis/Tacotron2/test_infer.sh | 68 ++++ .../Tacotron2/waveglow/denoiser.py | 67 ++++ 9 files changed, 540 insertions(+), 61 deletions(-) create mode 100644 PyTorch/SpeechSynthesis/Tacotron2/run_latency_tests.sh create mode 100644 PyTorch/SpeechSynthesis/Tacotron2/test_infer.py create mode 100644 PyTorch/SpeechSynthesis/Tacotron2/test_infer.sh create mode 100644 PyTorch/SpeechSynthesis/Tacotron2/waveglow/denoiser.py diff --git a/PyTorch/SpeechSynthesis/Tacotron2/Dockerfile b/PyTorch/SpeechSynthesis/Tacotron2/Dockerfile index f35c922f..b5752d77 100644 --- a/PyTorch/SpeechSynthesis/Tacotron2/Dockerfile +++ b/PyTorch/SpeechSynthesis/Tacotron2/Dockerfile @@ -1,4 +1,4 @@ -FROM nvcr.io/nvidia/pytorch:19.07-py3 +FROM nvcr.io/nvidia/pytorch:19.08-py3 ADD . /workspace/tacotron2 WORKDIR /workspace/tacotron2 diff --git a/PyTorch/SpeechSynthesis/Tacotron2/README.md b/PyTorch/SpeechSynthesis/Tacotron2/README.md index f13a4483..236112b2 100644 --- a/PyTorch/SpeechSynthesis/Tacotron2/README.md +++ b/PyTorch/SpeechSynthesis/Tacotron2/README.md @@ -1,4 +1,4 @@ -# Tacotron 2 And WaveGlow v1.6 For PyTorch +# Tacotron 2 And WaveGlow v1.7 For PyTorch This repository provides a script and recipe to train Tacotron 2 and WaveGlow v1.6 models to achieve state of the art accuracy, and is tested and maintained by NVIDIA. @@ -38,7 +38,8 @@ v1.6 models to achieve state of the art accuracy, and is tested and maintained b * [NVIDIA DGX-1 (8x V100 16G)](#nvidia-dgx-1-8x-v100-16g) * [Expected training time](#expected-training-time) * [Inference performance results](#inference-performance-results) - * [NVIDIA DGX-1 (8x V100 16G)](#nvidia-dgx-1-8x-v100-16g) + * [NVIDIA V100 16G](#nvidia-v100-16g) + * [NVIDIA T4](#nvidia-t4) * [Release notes](#release-notes) * [Changelog](#changelog) * [Known issues](#known-issues) @@ -99,7 +100,7 @@ into spherical Gaussian distribution through a series of flows. One step of a flow consists of an invertible convolution, followed by a modified WaveNet architecture that serves as an affine coupling layer. During inference, the network is inverted and audio samples are generated from the Gaussian -distribution. +distribution. Our implementation uses 512 residual channels in the coupling layer. ![](./img/waveglow_arch.png "WaveGlow architecture") @@ -130,16 +131,16 @@ The following features are supported by this model. |[AMP](https://nvidia.github.io/apex/amp.html) | Yes | Yes | |[Apex DistributedDataParallel](https://nvidia.github.io/apex/parallel.html) | Yes | Yes | -#### Features +#### Features -AMP - a tool that enables Tensor Core-accelerated training. For more information, +AMP - a tool that enables Tensor Core-accelerated training. For more information, refer to [Enabling mixed precision](#enabling-mixed-precision). -Apex DistributedDataParallel - a module wrapper that enables easy multiprocess -distributed data parallel training, similar to `torch.nn.parallel.DistributedDataParallel`. -`DistributedDataParallel` is optimized for use with NCCL. It achieves high -performance by overlapping communication with computation during `backward()` -and bucketing smaller gradient transfers to reduce the total number of transfers +Apex DistributedDataParallel - a module wrapper that enables easy multiprocess +distributed data parallel training, similar to `torch.nn.parallel.DistributedDataParallel`. +`DistributedDataParallel` is optimized for use with NCCL. It achieves high +performance by overlapping communication with computation during `backward()` +and bucketing smaller gradient transfers to reduce the total number of transfers required. ## Mixed precision training @@ -267,16 +268,9 @@ this script, issue: bash scripts/prepare_dataset.sh ``` - To preprocess the datasets for Tacotron 2 training, use the - `./scripts/prepare_mels.sh` script: - ```bash - bash scripts/prepare_mels.sh - ``` - Data is downloaded to the `./LJSpeech-1.1` directory (on the host). The -`./LJSpeech-1.1` directory is mounted to the `/workspace/tacotron2/LJSpeech-1.1` -location in the NGC container. The preprocessed mel-spectrograms are stored in the -`./LJSpeech-1.1/mels` directory. + `./LJSpeech-1.1` directory is mounted to the `/workspace/tacotron2/LJSpeech-1.1` + location in the NGC container. 3. Build the Tacotron 2 and WaveGlow PyTorch NGC container. ```bash @@ -290,8 +284,14 @@ After you build the container image, you can start an interactive CLI session wi bash scripts/docker/interactive.sh ``` - The `interactive.sh` script requires that the location on the dataset is specified. - For example, `LJSpeech-1.1`. + The `interactive.sh` script requires that the location on the dataset is specified. + For example, `LJSpeech-1.1`. To preprocess the datasets for Tacotron 2 training, use + the `./scripts/prepare_mels.sh` script: + ```bash + bash scripts/prepare_mels.sh + ``` + + The preprocessed mel-spectrograms are stored in the `./LJSpeech-1.1/mels` directory. 5. Start training. To start Tacotron 2 training, run: @@ -313,8 +313,8 @@ Ensure your loss values are comparable to those listed in the table in the samples in the `./audio` folder. For details about generating audio, see the [Inference process](#inference-process) section below. - The training scripts automatically run the validation after each training - epoch. The results from the validation are printed to the standard output + The training scripts automatically run the validation after each training + epoch. The results from the validation are printed to the standard output (`stdout`) and saved to the log files. 7. Start inference. @@ -327,10 +327,10 @@ and `--waveglow` arguments. ```bash python inference.py --tacotron2 --waveglow -o output/ -i phrases/phrase.txt --amp-run ``` - - The speech is generated from lines of text in the file that is passed with - `-i` argument. The number of lines determines inference batch size. To run - inference in mixed precision, use the `--amp-run` flag. The output audio will + + The speech is generated from lines of text in the file that is passed with + `-i` argument. The number of lines determines inference batch size. To run + inference in mixed precision, use the `--amp-run` flag. The output audio will be stored in the path specified by the `-o` argument. ## Advanced @@ -390,11 +390,12 @@ WaveGlow models. #### WaveGlow parameters * `--segment-length` - segment length of input audio processed by the neural network (8000) +* `--wn-channels` - number of residual channels in the coupling layer networks (512) ### Command-line options -To see the full list of available options and their descriptions, use the `-h` +To see the full list of available options and their descriptions, use the `-h` or `--help` command line option, for example: ```bash python train.py --help @@ -470,8 +471,12 @@ To run inference, issue: ```bash python inference.py --tacotron2 --waveglow -o output/ --include-warmup -i phrases/phrase.txt --amp-run ``` -Here, `Tacotron2_checkpoint` and `WaveGlow_checkpoint` are pre-trained -checkpoints for the respective models, and `phrases/phrase.txt` contains input phrases. The number of text lines determines the inference batch size. Audio will be saved in the output folder. +Here, `Tacotron2_checkpoint` and `WaveGlow_checkpoint` are pre-trained +checkpoints for the respective models, and `phrases/phrase.txt` contains input +phrases. The number of text lines determines the inference batch size. Audio +will be saved in the output folder. The audio files [audio_fp16](./audio/audio_fp16.wav) +and [audio_fp32](./audio/audio_fp32.wav) were generated using checkpoints from +mixed precision and FP32 training, respectively. You can find all the available options by calling `python inference.py --help`. @@ -548,9 +553,9 @@ To benchmark the inference performance on a batch size=1, run: ``` The output log files will contain performance numbers for Tacotron 2 model -(number of output mel-spectrograms per second, reported as `tacotron2_items_per_sec`) -and for WaveGlow (number of output samples per second, reported as `waveglow_items_per_sec`). -The `inference.py` script will run a few warmup iterations before running the benchmark. +(number of output mel-spectrograms per second, reported as `tacotron2_items_per_sec`) +and for WaveGlow (number of output samples per second, reported as `waveglow_items_per_sec`). +The `inference.py` script will run a few warmup iterations before running the benchmark. ### Results @@ -635,31 +640,36 @@ The following table shows the expected training time for convergence for WaveGlo #### Inference performance results -##### NVIDIA DGX-1 (8x V100 16G) +The following tables show inference statistics for the Tacotron2 and WaveGlow +text-to-speech system, gathered from 1000 inference runs, on 1 V100 and 1 T4, +respectively. Latency is measured from the start of Tacotron 2 inference to +the end of WaveGlow inference. The tables include average latency, latency standard +deviation, and latency confidence intervals. Throughput is measured +as the number of generated audio samples per second. RTF is the real-time factor +which tells how many seconds of speech are generated in 1 second of compute. -Our results were obtained by running the `./inference.py` inference script in -the PyTorch-19.06-py3 NGC container on NVIDIA DGX-1 with 8x V100 16G GPUs. -Performance numbers (in output mel-spectrograms per second for Tacotron 2 and -output samples per second for WaveGlow) were averaged over 16 runs. +##### NVIDIA V100 16G -The following table shows the inference performance results for Tacotron 2 model. -Results are measured in the number of output mel-spectrograms per second. +|Batch size|Input length|Precision|Avg latency (s)|Latency std (s)|Latency confidence interval 50% (s)|Latency confidence interval 100% (s)|Throughput (samples/sec)|Speed-up with mixed precision|Avg mels generated (81 mels=1 sec of speech)|Avg audio length (s)|Avg RTF| +|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:| +|1| 128| FP16| 1.73| 0.07| 1.72| 2.11| 89,162| 1.09| 601| 6.98| 4.04| +|4| 128| FP16| 4.21| 0.17| 4.19| 4.84| 145,800| 1.16| 600| 6.97| 1.65| +|1| 128| FP32| 1.85| 0.06| 1.84| 2.19| 81,868| 1.00| 590| 6.85| 3.71| +|4| 128| FP32| 4.80| 0.15| 4.79| 5.43| 125,930| 1.00| 590| 6.85| 1.43| -|Number of GPUs|Number of mels used with mixed precision|Number of mels used with FP32|Speed-up with mixed precision| -|---:|---:|---:|---:| -|**1**|625|613|1.02| +##### NVIDIA T4 -The following table shows the inference performance results for WaveGlow model. -Results are measured in the number of output samples per second1. - -|Number of GPUs|Number of samples used with mixed precision|Number of samples used with FP32|Speed-up with mixed precision| -|---:|---:|---:|---:| -|**1**|180474|162282|1.11| - -1With sampling rate equal to 22050, one second of audio is generated from 22050 samples. - -To achieve these same results, follow the steps in the [Quick Start Guide](#quick-start-guide). +|Batch size|Input length|Precision|Avg latency (s)|Latency std (s)|Latency confidence interval 50% (s)|Latency confidence interval 100% (s)|Throughput (samples/sec)|Speed-up with mixed precision|Avg mels generated (81 mels=1 sec of speech)|Avg audio length (s)|Avg RTF| +|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:| +|1| 128| FP16| 3.16| 0.13| 3.16| 3.81| 48,792| 1.23| 603| 7.00| 2.21| +|4| 128| FP16| 11.45| 0.49| 11.39| 14.38| 53,771| 1.22| 601| 6.98| 0.61| +|1| 128| FP32| 3.82| 0.11| 3.81| 4.24| 39,603| 1.00| 591| 6.86| 1.80| +|4| 128| FP32| 13.80| 0.45| 13.74| 16.09| 43,915| 1.00| 592| 6.87| 0.50| +Our results were obtained by running the `./run_latency_tests.sh` script in +the PyTorch-19.06-py3 NGC container. Please note that to reproduce the results, +you need to provide pretrained checkpoints for Tacotron 2 and WaveGlow. Please +edit the script to provide your checkpoint filenames. ## Release notes @@ -674,7 +684,7 @@ June 2019 * Fixed dropouts on LSTMCells July 2019 -* Changed measurement units for Tacotron 2 training and inference performance +* Changed measurement units for Tacotron 2 training and inference performance benchmarks from input tokes per second to output mel-spectrograms per second * Introduced batched inference * Included warmup in the inference script @@ -683,6 +693,10 @@ August 2019 * Fixed inference results * Fixed initialization of Batch Normalization +September 2019 +* Introduced inference statistics + ### Known issues There are no known issues in this release. + diff --git a/PyTorch/SpeechSynthesis/Tacotron2/common/stft.py b/PyTorch/SpeechSynthesis/Tacotron2/common/stft.py index 9655190d..12582744 100644 --- a/PyTorch/SpeechSynthesis/Tacotron2/common/stft.py +++ b/PyTorch/SpeechSynthesis/Tacotron2/common/stft.py @@ -124,6 +124,7 @@ class STFT(torch.nn.Module): np.where(window_sum > tiny(window_sum))[0]) window_sum = torch.autograd.Variable( torch.from_numpy(window_sum), requires_grad=False) + window_sum = window_sum.cuda() if magnitude.is_cuda else window_sum inverse_transform[:, :, approx_nonzero_indices] /= window_sum[approx_nonzero_indices] # scale by hop ratio diff --git a/PyTorch/SpeechSynthesis/Tacotron2/inference.py b/PyTorch/SpeechSynthesis/Tacotron2/inference.py index 05e4e087..bff8f8d1 100644 --- a/PyTorch/SpeechSynthesis/Tacotron2/inference.py +++ b/PyTorch/SpeechSynthesis/Tacotron2/inference.py @@ -41,6 +41,8 @@ from dllogger.autologging import log_hardware, log_args from apex import amp +from waveglow.denoiser import Denoiser + def parse_args(parser): """ Parse commandline arguments. @@ -53,7 +55,8 @@ def parse_args(parser): help='full path to the Tacotron2 model checkpoint file') parser.add_argument('--waveglow', type=str, help='full path to the WaveGlow model checkpoint file') - parser.add_argument('-s', '--sigma-infer', default=0.6, type=float) + parser.add_argument('-s', '--sigma-infer', default=0.9, type=float) + parser.add_argument('-d', '--denoising-strength', default=0.01, type=float) parser.add_argument('-sr', '--sampling-rate', default=22050, type=int, help='Sampling rate') parser.add_argument('--amp-run', action='store_true', @@ -212,6 +215,7 @@ def main(): args.amp_run) waveglow = load_and_setup_model('WaveGlow', parser, args.waveglow, args.amp_run) + denoiser = Denoiser(waveglow).cuda() texts = [] try: @@ -242,6 +246,7 @@ def main(): with torch.no_grad(), MeasureTime(measurements, "waveglow_time"): audios = waveglow.infer(mel, sigma=args.sigma_infer) audios = audios.float() + audios = denoiser(audios, strength=args.denoising_strength).squeeze(1) tacotron2_infer_perf = mel.size(0)*mel.size(2)/measurements['tacotron2_time'] waveglow_infer_perf = audios.size(0)*audios.size(1)/measurements['waveglow_time'] @@ -254,9 +259,10 @@ def main(): measurements['waveglow_time'])) for i, audio in enumerate(audios): + audio = audio[:mel_lengths[i]*args.stft_hop_length] + audio = audio/torch.max(torch.abs(audio)) audio_path = args.output + "audio_"+str(i)+".wav" - write(audio_path, args.sampling_rate, - audio.data.cpu().numpy()[:mel_lengths[i]*args.stft_hop_length]) + write(audio_path, args.sampling_rate, audio.cpu().numpy()) LOGGER.iteration_stop() LOGGER.finish() diff --git a/PyTorch/SpeechSynthesis/Tacotron2/run_latency_tests.sh b/PyTorch/SpeechSynthesis/Tacotron2/run_latency_tests.sh new file mode 100644 index 00000000..aadbdd01 --- /dev/null +++ b/PyTorch/SpeechSynthesis/Tacotron2/run_latency_tests.sh @@ -0,0 +1,5 @@ +bash test_infer.sh -bs 1 -il 128 -p amp --num-iters 1003 --tacotron2 checkpoint_Tacotron2_amp --waveglow checkpoint_WaveGlow_amp +bash test_infer.sh -bs 4 -il 128 -p amp --num-iters 1003 --tacotron2 checkpoint_Tacotron2_amp --waveglow checkpoint_WaveGlow_amp +bash test_infer.sh -bs 1 -il 128 -p fp32 --num-iters 1003 --tacotron2 checkpoint_Tacotron2_fp32 --waveglow checkpoint_WaveGlow_fp32 +bash test_infer.sh -bs 4 -il 128 -p fp32 --num-iters 1003 --tacotron2 checkpoint_Tacotron2_fp32 --waveglow checkpoint_WaveGlow_fp32 + diff --git a/PyTorch/SpeechSynthesis/Tacotron2/tacotron2/model.py b/PyTorch/SpeechSynthesis/Tacotron2/tacotron2/model.py index a2ae1a70..81f574b0 100644 --- a/PyTorch/SpeechSynthesis/Tacotron2/tacotron2/model.py +++ b/PyTorch/SpeechSynthesis/Tacotron2/tacotron2/model.py @@ -491,9 +491,6 @@ class Decoder(nn.Module): decoder_input = self.prenet(decoder_input, inference=True) mel_output, gate_output, alignment = self.decode(decoder_input) - mel_outputs += [mel_output.squeeze(1)] - gate_outputs += [gate_output] - alignments += [alignment] dec = torch.le(torch.sigmoid(gate_output.data), self.gate_threshold).to(torch.int32).squeeze(1) @@ -502,6 +499,11 @@ class Decoder(nn.Module): if self.early_stopping and torch.sum(not_finished) == 0: break + + mel_outputs += [mel_output.squeeze(1)] + gate_outputs += [gate_output] + alignments += [alignment] + if len(mel_outputs) == self.max_decoder_steps: print("Warning! Reached max decoder steps") break diff --git a/PyTorch/SpeechSynthesis/Tacotron2/test_infer.py b/PyTorch/SpeechSynthesis/Tacotron2/test_infer.py new file mode 100644 index 00000000..9f69f799 --- /dev/null +++ b/PyTorch/SpeechSynthesis/Tacotron2/test_infer.py @@ -0,0 +1,316 @@ +# ***************************************************************************** +# Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the NVIDIA CORPORATION nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL NVIDIA CORPORATION BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# ***************************************************************************** + +from tacotron2.text import text_to_sequence +import models +import torch +import argparse +import numpy as np +from scipy.io.wavfile import write + +import sys + +import time +from dllogger.logger import LOGGER +import dllogger.logger as dllg +from dllogger.autologging import log_hardware, log_args + +from apex import amp + +def parse_args(parser): + """ + Parse commandline arguments. + """ + parser.add_argument('--tacotron2', type=str, + help='full path to the Tacotron2 model checkpoint file') + parser.add_argument('--waveglow', type=str, + help='full path to the WaveGlow model checkpoint file') + parser.add_argument('-s', '--sigma-infer', default=0.6, type=float) + parser.add_argument('-sr', '--sampling-rate', default=22050, type=int, + help='Sampling rate') + parser.add_argument('--amp-run', action='store_true', + help='inference with AMP') + parser.add_argument('--log-file', type=str, default='nvlog.json', + help='Filename for logging') + parser.add_argument('--stft-hop-length', type=int, default=256, + help='STFT hop length for estimating audio length from mel size') + parser.add_argument('--num-iters', type=int, default=10, + help='Number of iterations') + parser.add_argument('-il', '--input-length', type=int, default=64, + help='Input length') + parser.add_argument('-bs', '--batch-size', type=int, default=1, + help='Batch size') + + + return parser + + +def checkpoint_from_distributed(state_dict): + """ + Checks whether checkpoint was generated by DistributedDataParallel. DDP + wraps model in additional "module.", it needs to be unwrapped for single + GPU inference. + :param state_dict: model's state dict + """ + ret = False + for key, _ in state_dict.items(): + if key.find('module.') != -1: + ret = True + break + return ret + + +def unwrap_distributed(state_dict): + """ + Unwraps model from DistributedDataParallel. + DDP wraps model in additional "module.", it needs to be removed for single + GPU inference. + :param state_dict: model's state dict + """ + new_state_dict = {} + for key, value in state_dict.items(): + new_key = key.replace('module.', '') + new_state_dict[new_key] = value + return new_state_dict + + +def load_and_setup_model(model_name, parser, checkpoint, amp_run, to_cuda=True): + model_parser = models.parse_model_args(model_name, parser, add_help=False) + model_args, _ = model_parser.parse_known_args() + + model_config = models.get_model_config(model_name, model_args) + model = models.get_model(model_name, model_config, to_cuda=to_cuda) + + if checkpoint is not None: + if to_cuda: + state_dict = torch.load(checkpoint)['state_dict'] + else: + state_dict = torch.load(checkpoint,map_location='cpu')['state_dict'] + if checkpoint_from_distributed(state_dict): + state_dict = unwrap_distributed(state_dict) + + model.load_state_dict(state_dict) + + if model_name == "WaveGlow": + model = model.remove_weightnorm(model) + + model.eval() + + if amp_run: + model, _ = amp.initialize(model, [], opt_level="O3") + + return model + + +# taken from tacotron2/data_function.py:TextMelCollate.__call__ +def pad_sequences(batch): + # Right zero-pad all one-hot text sequences to max input length + input_lengths, ids_sorted_decreasing = torch.sort( + torch.LongTensor([len(x) for x in batch]), + dim=0, descending=True) + max_input_len = input_lengths[0] + + text_padded = torch.LongTensor(len(batch), max_input_len) + text_padded.zero_() + for i in range(len(ids_sorted_decreasing)): + text = batch[ids_sorted_decreasing[i]] + text_padded[i, :text.size(0)] = text + + return text_padded, input_lengths + + +def prepare_input_sequence(texts): + + d = [] + for i,text in enumerate(texts): + d.append(torch.IntTensor( + text_to_sequence(text, ['english_cleaners'])[:])) + + text_padded, input_lengths = pad_sequences(d) + if torch.cuda.is_available(): + text_padded = torch.autograd.Variable(text_padded).cuda().long() + input_lengths = torch.autograd.Variable(input_lengths).cuda().long() + else: + text_padded = torch.autograd.Variable(text_padded).long() + input_lengths = torch.autograd.Variable(input_lengths).long() + + return text_padded, input_lengths + +class MeasureTime(): + def __init__(self, measurements, key): + self.measurements = measurements + self.key = key + + def __enter__(self): + torch.cuda.synchronize() + self.t0 = time.perf_counter() + + def __exit__(self, exc_type, exc_value, exc_traceback): + torch.cuda.synchronize() + self.measurements[self.key] = time.perf_counter() - self.t0 + + +def main(): + """ + Launches text to speech (inference). + Inference is executed on a single GPU. + """ + parser = argparse.ArgumentParser( + description='PyTorch Tacotron 2 Inference') + parser = parse_args(parser) + args, unknown_args = parser.parse_known_args() + + LOGGER.set_model_name("Tacotron2_PyT") + LOGGER.set_backends([ + dllg.JsonBackend(log_file=args.log_file, + logging_scope=dllg.TRAIN_ITER_SCOPE, iteration_interval=1) + ]) + LOGGER.register_metric("pre_processing", metric_scope=dllg.TRAIN_ITER_SCOPE) + LOGGER.register_metric("tacotron2_items_per_sec", metric_scope=dllg.TRAIN_ITER_SCOPE) + LOGGER.register_metric("tacotron2_latency", metric_scope=dllg.TRAIN_ITER_SCOPE) + LOGGER.register_metric("waveglow_items_per_sec", metric_scope=dllg.TRAIN_ITER_SCOPE) + LOGGER.register_metric("waveglow_latency", metric_scope=dllg.TRAIN_ITER_SCOPE) + LOGGER.register_metric("latency", metric_scope=dllg.TRAIN_ITER_SCOPE) + LOGGER.register_metric("type_conversion", metric_scope=dllg.TRAIN_ITER_SCOPE) + LOGGER.register_metric("storage", metric_scope=dllg.TRAIN_ITER_SCOPE) + LOGGER.register_metric("data_transfer", metric_scope=dllg.TRAIN_ITER_SCOPE) + LOGGER.register_metric("num_mels_per_audio", metric_scope=dllg.TRAIN_ITER_SCOPE) + LOGGER.register_metric("throughput", metric_scope=dllg.TRAIN_ITER_SCOPE) + + measurements_all = {"pre_processing": [], + "tacotron2_latency": [], + "waveglow_latency": [], + "latency": [], + "type_conversion": [], + "data_transfer": [], + "storage": [], + "tacotron2_items_per_sec": [], + "waveglow_items_per_sec": [], + "num_mels_per_audio": [], + "throughput": []} + + log_hardware() + log_args(args) + + print("args:", args, unknown_args) + + tacotron2 = load_and_setup_model('Tacotron2', parser, args.tacotron2, args.amp_run) + waveglow = load_and_setup_model('WaveGlow', parser, args.waveglow, args.amp_run) + + texts = ["The forms of printed letters should be beautiful, and that their arrangement on the page should be reasonable and a help to the shapeliness of the letters themselves. The forms of printed letters should be beautiful, and that their arrangement on the page should be reasonable and a help to the shapeliness of the letters themselves."] + texts = [texts[0][:args.input_length]] + texts = texts*args.batch_size + + warmup_iters = 3 + + for iter in range(args.num_iters): + + if iter >= warmup_iters: + LOGGER.iteration_start() + + measurements = {} + + with MeasureTime(measurements, "pre_processing"): + sequences_padded, input_lengths = prepare_input_sequence(texts) + + with torch.no_grad(): + with MeasureTime(measurements, "latency"): + with MeasureTime(measurements, "tacotron2_latency"): + _, mel, _, _, mel_lengths = tacotron2.infer(sequences_padded, input_lengths) + + with MeasureTime(measurements, "waveglow_latency"): + audios = waveglow.infer(mel, sigma=args.sigma_infer) + + num_mels = mel.size(0)*mel.size(2) + num_samples = audios.size(0)*audios.size(1) + + with MeasureTime(measurements, "type_conversion"): + audios = audios.float() + + with MeasureTime(measurements, "data_transfer"): + audios = audios.cpu() + + with MeasureTime(measurements, "storage"): + audios = audios.numpy() + for i, audio in enumerate(audios): + audio_path = "audio_"+str(i)+".wav" + write(audio_path, args.sampling_rate, + audio[:mel_lengths[i]*args.stft_hop_length]) + + measurements['tacotron2_items_per_sec'] = num_mels/measurements['tacotron2_latency'] + measurements['waveglow_items_per_sec'] = num_samples/measurements['waveglow_latency'] + measurements['num_mels_per_audio'] = mel.size(2) + measurements['throughput'] = num_samples/measurements['latency'] + + if iter >= warmup_iters: + for k,v in measurements.items(): + measurements_all[k].append(v) + LOGGER.log(key=k, value=v) + + LOGGER.iteration_stop() + + LOGGER.finish() + + print(np.mean(measurements_all['latency'][1:]), + np.mean(measurements_all['throughput'][1:]), + np.mean(measurements_all['pre_processing'][1:]), + np.mean(measurements_all['type_conversion'][1:])+ + np.mean(measurements_all['storage'][1:])+ + np.mean(measurements_all['data_transfer'][1:]), + np.mean(measurements_all['num_mels_per_audio'][1:])) + + throughput = measurements_all['throughput'] + preprocessing = measurements_all['pre_processing'] + type_conversion = measurements_all['type_conversion'] + storage = measurements_all['storage'] + data_transfer = measurements_all['data_transfer'] + postprocessing = [sum(p) for p in zip(type_conversion,storage,data_transfer)] + latency = measurements_all['latency'] + num_mels_per_audio = measurements_all['num_mels_per_audio'] + + latency.sort() + + cf_50 = max(latency[:int(len(latency)*0.50)]) + cf_90 = max(latency[:int(len(latency)*0.90)]) + cf_95 = max(latency[:int(len(latency)*0.95)]) + cf_99 = max(latency[:int(len(latency)*0.99)]) + cf_100 = max(latency[:int(len(latency)*1.0)]) + + print("Throughput average (samples/sec) = {:.4f}".format(np.mean(throughput))) + print("Preprocessing average (seconds) = {:.4f}".format(np.mean(preprocessing))) + print("Postprocessing average (seconds) = {:.4f}".format(np.mean(postprocessing))) + print("Number of mels per audio average = {}".format(np.mean(num_mels_per_audio))) + print("Latency average (seconds) = {:.4f}".format(np.mean(latency))) + print("Latency std (seconds) = {:.4f}".format(np.std(latency))) + print("Latency cl 50 (seconds) = {:.4f}".format(cf_50)) + print("Latency cl 90 (seconds) = {:.4f}".format(cf_90)) + print("Latency cl 95 (seconds) = {:.4f}".format(cf_95)) + print("Latency cl 99 (seconds) = {:.4f}".format(cf_99)) + print("Latency cl 100 (seconds) = {:.4f}".format(cf_100)) + +if __name__ == '__main__': + main() diff --git a/PyTorch/SpeechSynthesis/Tacotron2/test_infer.sh b/PyTorch/SpeechSynthesis/Tacotron2/test_infer.sh new file mode 100644 index 00000000..f778e1be --- /dev/null +++ b/PyTorch/SpeechSynthesis/Tacotron2/test_infer.sh @@ -0,0 +1,68 @@ +#!/bin/bash + +BATCH_SIZE=1 +INPUT_LENGTH=128 +PRECISION="fp32" +NUM_ITERS=1003 # extra 3 iterations for warmup +TACOTRON2_CKPT="checkpoint_Tacotron2_1500_fp32" +WAVEGLOW_CKPT="checkpoint_WaveGlow_1000_fp32" + + +while [ -n "$1" ] +do + case "$1" in + -bs|--batch-size) + BATCH_SIZE="$2" + shift + ;; + -il|--input-length) + INPUT_LENGTH="$2" + shift + ;; + -p|--prec) + PRECISION="$2" + shift + ;; + --num-iters) + NUM_ITERS="$2" + shift + ;; + --tacotron2) + TACOTRON2_CKPT="$2" + shift + ;; + --waveglow) + WAVEGLOW_CKPT="$2" + shift + ;; + *) + echo "Option $1 not recognized" + esac + shift +done + +LOG_SUFFIX=bs${BATCH_SIZE}_il${INPUT_LENGTH}_${PRECISION} +NVLOG_FILE=nvlog_${LOG_SUFFIX}.json +TMP_LOGFILE=tmp_log_${LOG_SUFFIX}.log +LOGFILE=log_${LOG_SUFFIX}.log + +set -x +python test_infer.py \ + --tacotron2 $TACOTRON2_CKPT \ + --waveglow $WAVEGLOW_CKPT \ + --batch-size $BATCH_SIZE \ + --input-length $INPUT_LENGTH $AMP_RUN $CPU_RUN \ + --log-file $NVLOG_FILE \ + --num-iters $NUM_ITERS \ + |& tee $TMP_LOGFILE +set +x + + +PERF=$(cat $TMP_LOGFILE | grep -F 'Throughput average (samples/sec)' | awk -F'= ' '{print $2}') +NUM_MELS=$(cat $TMP_LOGFILE | grep -F 'Number of mels per audio average' | awk -F'= ' '{print $2}') +LATENCY=$(cat $TMP_LOGFILE | grep -F 'Latency average (seconds)' | awk -F'= ' '{print $2}') +LATENCYSTD=$(cat $TMP_LOGFILE | grep -F 'Latency std (seconds)' | awk -F'= ' '{print $2}') +LATENCY50=$(cat $TMP_LOGFILE | grep -F 'Latency cl 50 (seconds)' | awk -F'= ' '{print $2}') +LATENCY100=$(cat $TMP_LOGFILE | grep -F 'Latency cl 100 (seconds)' | awk -F'= ' '{print $2}') + +echo "$BATCH_SIZE,$INPUT_LENGTH,$PRECISION,$NUM_ITERS,$LATENCY,$LATENCYSTD,$LATENCY50,$LATENCY100,$PERF,$NUM_MELS" >> $LOGFILE diff --git a/PyTorch/SpeechSynthesis/Tacotron2/waveglow/denoiser.py b/PyTorch/SpeechSynthesis/Tacotron2/waveglow/denoiser.py new file mode 100644 index 00000000..4b5352c9 --- /dev/null +++ b/PyTorch/SpeechSynthesis/Tacotron2/waveglow/denoiser.py @@ -0,0 +1,67 @@ +# ***************************************************************************** +# Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the NVIDIA CORPORATION nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL NVIDIA CORPORATION BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# ***************************************************************************** + +import sys +sys.path.append('tacotron2') +import torch +from common.layers import STFT + + +class Denoiser(torch.nn.Module): + """ Removes model bias from audio produced with waveglow """ + + def __init__(self, waveglow, filter_length=1024, n_overlap=4, + win_length=1024, mode='zeros'): + super(Denoiser, self).__init__() + self.stft = STFT(filter_length=filter_length, + hop_length=int(filter_length/n_overlap), + win_length=win_length).cuda() + if mode == 'zeros': + mel_input = torch.zeros( + (1, 80, 88), + dtype=waveglow.upsample.weight.dtype, + device=waveglow.upsample.weight.device) + elif mode == 'normal': + mel_input = torch.randn( + (1, 80, 88), + dtype=waveglow.upsample.weight.dtype, + device=waveglow.upsample.weight.device) + else: + raise Exception("Mode {} if not supported".format(mode)) + + with torch.no_grad(): + bias_audio = waveglow.infer(mel_input, sigma=0.0).float() + bias_spec, _ = self.stft.transform(bias_audio) + + self.register_buffer('bias_spec', bias_spec[:, :, 0][:, :, None]) + + def forward(self, audio, strength=0.1): + audio_spec, audio_angles = self.stft.transform(audio.cuda().float()) + audio_spec_denoised = audio_spec - self.bias_spec * strength + audio_spec_denoised = torch.clamp(audio_spec_denoised, 0.0) + audio_denoised = self.stft.inverse(audio_spec_denoised, audio_angles) + return audio_denoised From 6fe463fe2776452294187bf4f4e8135798bdf165 Mon Sep 17 00:00:00 2001 From: Przemek Strzelczyk <41076710+nvpstr@users.noreply.github.com> Date: Tue, 10 Sep 2019 17:21:52 +0200 Subject: [PATCH 02/44] [BERT/PyT] Support for multi-node --- PyTorch/LanguageModeling/BERT/.dockerignore | 26 +- PyTorch/LanguageModeling/BERT/.gitignore | 9 +- PyTorch/LanguageModeling/BERT/Dockerfile | 30 +- PyTorch/LanguageModeling/BERT/LICENSE | 3 +- PyTorch/LanguageModeling/BERT/README.md | 466 +++++++++++------- PyTorch/LanguageModeling/BERT/bind_pyt.py | 13 + .../LanguageModeling/BERT/configurations.yml | 182 +++++++ .../BERT/create_pretraining_data.py | 5 +- .../BERT/data/BooksDownloader.py | 12 + .../BERT/data/BookscorpusTextFormatting.py | 12 + .../LanguageModeling/BERT/data/Downloader.py | 12 + .../data/GooglePretrainedWeightDownloader.py | 11 + .../BERT/data/MRPCDownloader.py | 11 + .../data/NVIDIAPretrainedWeightDownloader.py | 11 + .../BERT/data/SquadDownloader.py | 11 + .../BERT/data/TextSharding.py | 11 + .../BERT/data/WikiDownloader.py | 15 +- .../BERT/data/WikicorpusTextFormatting.py | 11 + .../LanguageModeling/BERT/data/__init__.py | 12 + .../LanguageModeling/BERT/data/bertPrep.py | 15 +- .../BERT/data/create_datasets_from_start.sh | 15 +- .../BERT/data/glue/download_mrpc.sh | 13 + .../BERT/data/squad/squad_download.sh | 13 + .../LanguageModeling/BERT/extract_features.py | 1 + PyTorch/LanguageModeling/BERT/file_utils.py | 14 + PyTorch/LanguageModeling/BERT/modeling.py | 4 +- PyTorch/LanguageModeling/BERT/optimization.py | 2 + PyTorch/LanguageModeling/BERT/run.sub | 74 +++ PyTorch/LanguageModeling/BERT/run_glue.py | 4 +- .../LanguageModeling/BERT/run_pretraining.py | 31 +- .../BERT/run_pretraining_inference.py | 1 + PyTorch/LanguageModeling/BERT/run_squad.py | 11 +- PyTorch/LanguageModeling/BERT/run_swag.py | 4 +- PyTorch/LanguageModeling/BERT/schedulers.py | 14 + .../BERT/scripts/data_download.sh | 14 + .../LanguageModeling/BERT/scripts/run_glue.sh | 16 +- .../BERT/scripts/run_pretraining.sh | 13 + .../BERT/scripts/run_pretraining_inference.sh | 13 + .../BERT/scripts/run_squad.sh | 14 +- .../LanguageModeling/BERT/scripts/run_swag.sh | 16 +- .../BERT/scripts/start_pretraining.sh | 14 + PyTorch/LanguageModeling/BERT/tokenization.py | 3 +- PyTorch/LanguageModeling/BERT/utils.py | 13 + 43 files changed, 930 insertions(+), 265 deletions(-) create mode 100644 PyTorch/LanguageModeling/BERT/configurations.yml create mode 100644 PyTorch/LanguageModeling/BERT/run.sub diff --git a/PyTorch/LanguageModeling/BERT/.dockerignore b/PyTorch/LanguageModeling/BERT/.dockerignore index 0da97b53..594940d2 100644 --- a/PyTorch/LanguageModeling/BERT/.dockerignore +++ b/PyTorch/LanguageModeling/BERT/.dockerignore @@ -1,8 +1,20 @@ -data/download/ -data/extracted/ -data/formatted_one_article_per_line/ -data/sharded/ -data/hdf5/ +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +data/download +data/extracted +data/formatted_one_article_per_line +data/sharded +data/hdf5 vocab/ -results/ -checkpoints/* +results/ \ No newline at end of file diff --git a/PyTorch/LanguageModeling/BERT/.gitignore b/PyTorch/LanguageModeling/BERT/.gitignore index 5269e69c..52579bcf 100644 --- a/PyTorch/LanguageModeling/BERT/.gitignore +++ b/PyTorch/LanguageModeling/BERT/.gitignore @@ -8,14 +8,11 @@ __pycache__/ # C extensions *.so -#Data +#Data checkpoints and results data/*/*/ data/*/*.zip -data/* - -#checkpoints and results -checkpoints/* -results/* +checkpoints/ +results/ # Distribution / packaging .Python diff --git a/PyTorch/LanguageModeling/BERT/Dockerfile b/PyTorch/LanguageModeling/BERT/Dockerfile index 0130c6b4..0dabe400 100755 --- a/PyTorch/LanguageModeling/BERT/Dockerfile +++ b/PyTorch/LanguageModeling/BERT/Dockerfile @@ -1,24 +1,22 @@ -ARG FROM_IMAGE_NAME=nvcr.io/nvidia/pytorch:19.07-py3 +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +ARG FROM_IMAGE_NAME=nvcr.io/nvidia/pytorch:19.08-py3 FROM ${FROM_IMAGE_NAME} RUN apt-get update && apt-get install -y pbzip2 pv bzip2 cabextract ENV BERT_PREP_WORKING_DIR /workspace/bert/data -WORKDIR /opt -RUN rm -rf /opt/pytorch/apex ; \ - git clone https://github.com/NVIDIA/apex.git pytorch/apex ; \ - cd pytorch/apex ; \ - pip uninstall --yes apex; \ - git checkout 880ab925bce9f817a93988b021e12db5f67f7787; \ - git pull; \ - pip install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" . - -#WORKDIR /opt -#RUN cd pytorch/apex \ -# && git fetch origin pull/334/head:multi_tensor_lamb_optimizer \ -# && git checkout multi_tensor_lamb_optimizer \ -# && python setup.py develop --cuda_ext --cpp_ext - WORKDIR /workspace RUN git clone https://github.com/attardi/wikiextractor.git RUN git clone https://github.com/soskek/bookcorpus.git diff --git a/PyTorch/LanguageModeling/BERT/LICENSE b/PyTorch/LanguageModeling/BERT/LICENSE index d6456956..de609f66 100755 --- a/PyTorch/LanguageModeling/BERT/LICENSE +++ b/PyTorch/LanguageModeling/BERT/LICENSE @@ -1,4 +1,3 @@ - Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -176,6 +175,8 @@ END OF TERMS AND CONDITIONS + Copyright 2019 NVIDIA CORPORATION. All rights reserved. + APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following diff --git a/PyTorch/LanguageModeling/BERT/README.md b/PyTorch/LanguageModeling/BERT/README.md index be8ac3c8..222eed06 100755 --- a/PyTorch/LanguageModeling/BERT/README.md +++ b/PyTorch/LanguageModeling/BERT/README.md @@ -1,8 +1,8 @@ # BERT For PyTorch -This repository provides a script and recipe to train the BERT model to achieve state of the art accuracy, and is tested and maintained by NVIDIA. +This repository provides a script and recipe to train the BERT model for PyTorch to achieve state-of-the-art accuracy, and is tested and maintained by NVIDIA. -**Table Of Contents** +## Table Of Contents - [Model overview](#model-overview) * [Model architecture](#model-architecture) @@ -11,6 +11,7 @@ This repository provides a script and recipe to train the BERT model to achieve * [Features](#features) * [Mixed precision training](#mixed-precision-training) * [Enabling mixed precision](#enabling-mixed-precision) + * [Glossary](#glossary) - [Setup](#setup) * [Requirements](#requirements) - [Quick Start Guide](#quick-start-guide) @@ -18,14 +19,12 @@ This repository provides a script and recipe to train the BERT model to achieve * [Scripts and sample code](#scripts-and-sample-code) * [Parameters](#parameters) * [Pre-training parameters](#pre-training-parameters) + * [Multi-node](#multi-node) * [Fine-tuning parameters](#fine-tuning-parameters) * [Command-line options](#command-line-options) * [Getting the data](#getting-the-data) * [Dataset guidelines](#dataset-guidelines) * [Multi-dataset](#multi-dataset) - * [Relocating hdf5 files](#relocating-hdf5-files) - * [Inter sequence-pair mixing](#inter-sequence-pair-mixing) - * [Retaining document-level granularity](#retaining-document-level-granularity) * [Training process](#training-process) * [Pre-training](#pre-training) * [Fine-tuning](#fine-tuning) @@ -43,31 +42,34 @@ This repository provides a script and recipe to train the BERT model to achieve * [Training stability test](#training-stability-test) * [Pre-training stability test](#pre-training-stability-test) * [Fine-tuning stability test](#fine-tuning-stability-test) - * [Training performance results](#training-performance-results) - * [Training performance: NVIDIA DGX-1 (8x V100 16G)](#training-performance-nvidia-dgx-1-8x-v100-16g) - * [Pre-training NVIDIA DGX-1 With 16G](#pre-training-nvidia-dgx-1-with-16g) - * [Fine-tuning NVIDIA DGX-1 With 16G](#fine-tuning-nvidia-dgx-1-with-16g) - * [Training performance: NVIDIA DGX-1 (8x V100 32G)](#training-performance-nvidia-dgx-1-8x-v100-32g) - * [Pre-training NVIDIA DGX-1 With 32G](#pre-training-nvidia-dgx-1-with-32g) - * [Fine-tuning NVIDIA DGX-1 With 32G](#fine-tuning-nvidia-dgx-1-with-32g) - * [Training performance: NVIDIA DGX-2 (16x V100 32G)](#training-performance-nvidia-dgx-2-16x-v100-32g) - * [Pre-training NVIDIA DGX-2 With 32G](#pre-training-nvidia-dgx-2-with-32g) - * [Fine-tuning NVIDIA DGX-2 With 32G](#fine-tuning-nvidia-dgx-2-with-32g) - * [Inference performance results](#inference-performance-results) - * [Inference performance: NVIDIA DGX-1 (1x V100 16G)](#inference-performance-nvidia-dgx-1-1x-v100-16g) - * [Pre-training inference on NVIDIA DGX-1 with 16G](#pre-training-inference-on-nvidia-dgx-1-with-16g) - * [Fine-tuning inference on NVIDIA DGX-1 with 16G](#fine-tuning-inference-on-nvidia-dgx-1-with-16g) - * [Inference performance: NVIDIA DGX-1 (1x V100 32G)](#inference-performance-nvidia-dgx-1-1x-v100-32g) - * [Pre-training inference on NVIDIA DGX-1 with 32G](#pre-training-inference-on-nvidia-dgx-1-with-32g) - * [Fine-tuning inference on NVIDIA DGX-1 with 32G](#fine-tuning-inference-on-nvidia-dgx-1-with-32g) - * [Inference performance: NVIDIA DGX-2 (1x V100 32G)](#inference-performance-nvidia-dgx-2-1x-v100-32g) - * [Pre-training inference on NVIDIA DGX-2 with 32G](#pre-training-inference-on-nvidia-dgx-2-with-32g) - * [Fine-tuning inference on NVIDIA DGX-2 with 32G](#fine-tuning-inference-on-nvidia-dgx-2-with-32g) + * [Training performance results](#training-performance-results) + * [Training performance: NVIDIA DGX-1 (8x V100 16G)](#training-performance-nvidia-dgx-1-8x-v100-16g) + * [Pre-training NVIDIA DGX-1 With 16G](#pre-training-nvidia-dgx-1-with-16g) + * [Pre-training on multiple NVIDIA DGX-1 With 16G](#pre-training-on-multiple-nvidia-dgx-1-with-16g) + * [Fine-tuning NVIDIA DGX-1 With 16G](#fine-tuning-nvidia-dgx-1-with-16g) + * [Training performance: NVIDIA DGX-1 (8x V100 32G)](#training-performance-nvidia-dgx-1-8x-v100-32g) + * [Pre-training NVIDIA DGX-1 With 32G](#pre-training-nvidia-dgx-1-with-32g) + * [Fine-tuning NVIDIA DGX-1 With 32G](#fine-tuning-nvidia-dgx-1-with-32g) + * [Training performance: NVIDIA DGX-2 (16x V100 32G)](#training-performance-nvidia-dgx-2-16x-v100-32g) + * [Pre-training NVIDIA DGX-2 With 32G](#pre-training-nvidia-dgx-2-with-32g) + * [Pre-training on multiple NVIDIA DGX-2H With 32G](#pre-training-on-multiple-nvidia-dgx-2h-with-32g) + * [Fine-tuning NVIDIA DGX-2 With 32G](#fine-tuning-nvidia-dgx-2-with-32g) + * [Inference performance results](#inference-performance-results) + * [Inference performance: NVIDIA DGX-1 (1x V100 16G)](#inference-performance-nvidia-dgx-1-1x-v100-16g) + * [Pre-training inference on NVIDIA DGX-1 with 16G](#pre-training-inference-on-nvidia-dgx-1-with-16g) + * [Fine-tuning inference on NVIDIA DGX-1 with 16G](#fine-tuning-inference-on-nvidia-dgx-1-with-16g) + * [Inference performance: NVIDIA DGX-1 (1x V100 32G)](#inference-performance-nvidia-dgx-1-1x-v100-32g) + * [Pre-training inference on NVIDIA DGX-1 with 32G](#pre-training-inference-on-nvidia-dgx-1-with-32g) + * [Fine-tuning inference on NVIDIA DGX-1 with 32G](#fine-tuning-inference-on-nvidia-dgx-1-with-32g) + * [Inference performance: NVIDIA DGX-2 (1x V100 32G)](#inference-performance-nvidia-dgx-2-1x-v100-32g) + * [Pre-training inference on NVIDIA DGX-2 with 32G](#pre-training-inference-on-nvidia-dgx-2-with-32g) + * [Fine-tuning inference on NVIDIA DGX-2 with 32G](#fine-tuning-inference-on-nvidia-dgx-2-with-32g) - [Release notes](#release-notes) * [Changelog](#changelog) * [Known issues](#known-issues) + ## Model overview BERT, or Bidirectional Encoder Representations from Transformers, is a new method of pre-training language representations which obtains state-of-the-art results on a wide array of Natural Language Processing (NLP) tasks. This model is based on the [BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding](https://arxiv.org/abs/1810.04805) paper. NVIDIA's implementation of BERT is an optimized version of the [Hugging Face implementation](https://github.com/huggingface/pytorch-pretrained-BERT), leveraging mixed precision arithmetic and Tensor Cores on V100 GPUs for faster training times while maintaining target accuracy. @@ -75,22 +77,25 @@ BERT, or Bidirectional Encoder Representations from Transformers, is a new metho The repository also contains scripts to interactively launch data download, training, benchmarking and inference routines in a Docker container for both pre-training and fine-tuning for tasks such as question answering. The major differences between the original implementation of the paper and this version of BERT are as follows: - Scripts to download Wikipedia and BookCorpus datasets -- Scripts to preprocess downloaded data or a custom corpus into inputs and targets for pre-training in a modular fashion. +- Scripts to preprocess downloaded data or a custom corpus into inputs and targets for pre-training in a modular fashion - Fused [LAMB](https://arxiv.org/pdf/1904.00962.pdf) optimizer to support training with larger batches - Fused Adam optimizer for fine tuning tasks - Fused CUDA kernels for better performance LayerNorm -- Automatic Mixed precision training support +- Automatic mixed precision (AMP) training support +- Scripts to launch on multiple number of nodes Other publicly available implementations of BERT include: - -1. [Google's official implementation](https://github.com/google-research/bert) -2. [codertimo](https://github.com/codertimo/BERT-pytorch) +1. [NVIDIA Tensorflow](https://github.com/NVIDIA/DeepLearningExamples/tree/master/TensorFlow/LanguageModeling/BERT) +2. [Hugging Face](https://github.com/huggingface/pytorch-pretrained-BERT) +3. [codertimo](https://github.com/codertimo/BERT-pytorch) +4. [gluon-nlp](https://github.com/dmlc/gluon-nlp/tree/master/scripts/bert) +5. [Google's implementation](https://github.com/google-research/bert) This model trains with mixed precision Tensor Cores on Volta and provides a push-button solution to pretraining on a corpus of choice. As a result, researchers can get results 4x faster than training without Tensor Cores. This model is tested against each NGC monthly container release to ensure consistent accuracy and performance over time. ### Model architecture -The BERT architecture uses the same architecture as the encoder half of the Transformer. Input sequences are projected into an embedding space before being fed into the encoder structure. Additionally, a positional and segment encodings are added to the embeddings to preserve positional information. The encoder structure is simply a stack of Transformer blocks, which consist of a multi-head attention layer followed by successive stages of feed-forward networks and layer normalization. The multi-head attention layer accomplishes self-attention on multiple input representations. +The BERT architecture uses the same architecture as the encoder half of the Transformer. Input sequences are projected into an embedding space before being fed into the encoder structure. Additionally, positional and segment encodings are added to the embeddings to preserve positional information. The encoder structure is simply a stack of Transformer blocks, which consist of a multi-head attention layer followed by successive stages of feed-forward networks and layer normalization. The multi-head attention layer accomplishes self-attention on multiple input representations. An illustration of the architecture taken from the [Transformer paper](https://arxiv.org/pdf/1706.03762.pdf) is shown below. @@ -100,14 +105,14 @@ An illustration of the architecture taken from the [Transformer paper](https://a The architecture of the BERT model is almost identical to the Transformer model that was first introduced in the [Attention Is All You Need paper](https://arxiv.org/pdf/1706.03762.pdf). The main innovation of BERT lies in the pre-training step, where the model is trained on two unsupervised prediction tasks using a large text corpus. Training on these unsupervised tasks produces a generic language model, which can then be quickly fine-tuned to achieve state-of-the-art performance on language processing tasks such as question answering. -The BERT paper reports results two configurations of BERT, each corresponding to a unique model size. This implementation provides the same configurations by default, which are described in the table below. +The BERT paper reports the results for two configurations of BERT, each corresponding to a unique model size. This implementation provides the same configurations by default, which are described in the table below. | **Model** | **Hidden layers** | **Hidden unit size** | **Attention heads** | **Feedforward filter size** | **Max sequence length** | **Parameters** | |:---------:|:----------:|:----:|:---:|:--------:|:---:|:----:| |BERTBASE |12 encoder| 768| 12|4 x 768|512|110M| |BERTLARGE|24 encoder|1024| 16|4 x 1024|512|330M| -Additionally, this implementation supports training on multiple GPUs. Mixed precision training and inference with dynamic loss scaling is also supported. + ### Feature support matrix @@ -118,12 +123,13 @@ The following features are supported by this model. |APEX AMP|Yes| |APEX DDP|Yes| |LAMB|Yes| +|Multi-node|Yes| #### Features -[APEX](https://github.com/NVIDIA/apex) is a Pytorch extension with NVIDIA-maintained utilities to streamline mixed precision and distributed training. +[APEX](https://github.com/NVIDIA/apex) is a Pytorch extension with NVIDIA-maintained utilities to streamline mixed precision and distributed training, whereas [AMP](https://nvidia.github.io/apex/amp.html) is an abbreviation used for automatic mixed precision training. -[DDP](https://nvidia.github.io/apex/parallel.html) stands for DistributedDataParallel and is used for multi-GPU training, where as [AMP](https://nvidia.github.io/apex/amp.html) is an abbreviation used for automatic mixed precision training. +[DDP](https://nvidia.github.io/apex/parallel.html) stands for DistributedDataParallel and is used for multi-GPU training. [LAMB](https://arxiv.org/pdf/1904.00962.pdf) stands for Layerwise Adaptive Moments based optimizer, is a large batch optimization technique that helps accelerate training of deep neural networks using large minibatches. It allows using a global batch size of 65536 and 32768 on sequence lengths 128 and 512 respectively, compared to a batch size of 256 for Adam. The optimized implementation accumulates 1024 gradients batches in phase 1 and 4096 steps in phase 2 before updating weights once. This results in 15% training speedup. On multi-node systems, LAMB allows scaling up to 1024 GPUs resulting in training speedups of up to 72x in comparison to [Adam](https://arxiv.org/pdf/1412.6980.pdf). Adam has limitations on the learning rate that can be used since it is applied globally on all parameters whereas LAMB follows a layerwise learning rate strategy. @@ -135,10 +141,9 @@ Mixed precision is the combined use of different numerical precisions in a compu 2. Adding loss scaling to preserve small gradient values. For information about: - - How to train using mixed precision, see the [Mixed Precision Training](https://arxiv.org/abs/1710.03740) paper and [Training With Mixed Precision](https://docs.nvidia.com/deeplearning/sdk/mixed-precision-training/index.html) documentation. - Techniques used for mixed precision training, see the [Mixed-Precision Training of Deep Neural Networks](https://devblogs.nvidia.com/mixed-precision-training-deep-neural-networks/) blog. -- APEX tools for mixed precision training, see the [NVIDIA Apex: Tools for Easy Mixed-Precision Training in PyTorch](https://devblogs.nvidia.com/apex-pytorch-easy-mixed-precision-training/). +- APEX tools for mixed precision training, see the [NVIDIA APEX: Tools for Easy Mixed-Precision Training in PyTorch](https://devblogs.nvidia.com/apex-pytorch-easy-mixed-precision-training/). #### Enabling mixed precision @@ -149,15 +154,35 @@ Automatic mixed precision can be enabled with the following code changes: ``` from apex import amp if fp16: - # Wrap optimizer and model - model, optimizer = amp.initialize(model, optimizer, opt_level=, loss_scale=”dynamic”) + # Wrap optimizer and model + model, optimizer = amp.initialize(model, optimizer, opt_level=, loss_scale=”dynamic”) if fp16: - with amp.scale_loss(loss, optimizer) as scaled_loss: - scaled_loss.backward() + with amp.scale_loss(loss, optimizer) as scaled_loss: + scaled_loss.backward() ``` -Where `` is the optimization level. In the pretraining, “O2” is set as the optimization level. Mixed precision training can be turned on by passing the `fp16` argument to the pre-training and fine-tuning Python scripts. Shell scripts all have a positional argument available to enable mixed precision training. +Where `` is the optimization level. In the pretraining, `O2` is set as the optimization level. Mixed precision training can be turned on by passing the `fp16` argument to the `run_pretraining.py` and `run_squad.py`. All shell scripts have a positional argument available to enable mixed precision training. + +### Glossary + +**Fine-tuning** +Training an already pretrained model further using a task specific dataset for subject-specific refinements, by adding task-specific layers on top if required. + +**Language Model** +Assigns a probability distribution over a sequence of words. Given a sequence of words, it assigns a probability to the whole sequence. + +**Pre-training** +Training a model on vast amounts of data on the same (or different) task to build general understandings. + +**Transformer** +The paper [Attention Is All You Need](https://arxiv.org/abs/1706.03762) introduces a novel architecture called Transformer that uses an attention mechanism and transforms one sequence into another. + +**Phase1** +Pretraining on samples of sequence length 128 and 20 masked predictions per sequence. + +**Phase2** +Pretraining on samples of sequence length 512 and 80 masked predictions per sequence. ## Setup @@ -178,9 +203,14 @@ For more information about how to get started with NGC containers, see the follo For those unable to use the PyTorch NGC container, to set up the required environment or create your own container, see the versioned [NVIDIA Container Support Matrix](https://docs.nvidia.com/deeplearning/dgx/support-matrix/index.html). +For multi-node, the sample provided in this repository requires [Enroot](https://github.com/NVIDIA/enroot) and [Pyxis](https://github.com/NVIDIA/pyxis) set up on a [SLURM](https://slurm.schedmd.com) cluster. + +More information on how to set up and launch can be found in the [Multi-node Documentation](https://docs.nvidia.com/ngc/multi-node-bert-user-guide). + + ## Quick Start Guide -To train your model using mixed precision with Tensor Cores or using FP32, perform the following steps using the default parameters of the BERT model. The default parameters for pretraining have been set to run on 8 x V100 32G cards. For the specifics concerning training and inference, see [Advanced](#advanced). +To train your model using mixed precision with Tensor Cores or using FP32, perform the following steps using the default parameters of the BERT model. The default parameters for pretraining have been set to run on 8 x V100 32G cards. For the specifics concerning training and inference, see the [Advanced](#advanced) section. 1. Clone the repository. @@ -190,11 +220,11 @@ To train your model using mixed precision with Tensor Cores or using FP32, perfo `cd DeepLearningExamples/PyTorch/LanguageModeling/BERT` -2. Download NVIDIA pretrained checkpoint. +2. Download the NVIDIA pretrained checkpoint. -If you want to use a pretrained checkpoint, visit [NGC](https://ngc.nvidia.com/catalog/models) and browse the available models. This downloaded checkpoint is used to fine-tune on SQuAD. Make sure to place the downloaded checkpoint in `checkpoints/` folder. +If you want to use a pretrained checkpoint, visit [NGC](https://ngc.nvidia.com/catalog/models) and browse the available models. This downloaded checkpoint is used to fine-tune on SQuAD. Ensure you place the downloaded checkpoint in the `checkpoints/` folder. -3. Build the BERT 19.07 NGC container. +3. Build the BERT 19.08 NGC container. `bash scripts/docker/build.sh` @@ -202,7 +232,7 @@ If you want to use a pretrained checkpoint, visit [NGC](https://ngc.nvidia.com/c `bash scripts/docker/launch.sh` -Resultant logs and checkpoints of pretraining and finetuning routines get stored in the `results/` folder. +Resultant logs and checkpoints of pretraining and fine-tuning routines get stored in the `results/` folder. `data` and `vocab.txt` are downloaded in `data/` directory by default. Refer to the [Getting the data](#getting-the-data) section for more details on how to process a custom corpus as required for BERT pretraining. @@ -214,25 +244,29 @@ This repository provides scripts to download, verify and extract the following d - Wikipedia (pre-training) - BookCorpus (pre-training) -To download, verify, extract the datasets, and create the shards in hdf5 format, run: +To download, verify, extract the datasets, and create the shards in hdf5 format, run: `/workspace/bert/data/create_datasets_from_start.sh` -6. Start pre-training. +Depending on the speed of your internet connection, this process takes about a day to complete. -BERT is designed to pre-train deep bidirectional representations for language representations. The following scripts are to replicate pretraining on Wikipedia+Book Corpus from this [paper](https://arxiv.org/pdf/1810.04805.pdf). These scripts are general and can be used for pre-training language representations on any corpus of choice. +6. Start pretraining. -From within the container, you can use the following script to run pre-training. +BERT is designed to pre-train deep bidirectional networks for language representations. The following scripts replicate pretraining on Wikipedia + BookCorpus from this [paper](https://arxiv.org/pdf/1810.04805.pdf). These scripts are general and can be used for pre-training language representations on any corpus of choice. + +To run on a single node, from within the container, you can use the following script to run pre-training. `bash scripts/run_pretraining.sh` -More details can be found in Details/Training Process - -7. Start fine-tuning with the SQUAD dataset. +The default hyperparameters are set to run on 8 x V100 32G cards. -The above pretrained BERT representations can be fine tuned with just one additional output layer for a state-of-the-art question answering system. Running the following script launches fine-tuning for question answering with the SQuaD dataset. +To run on multiple nodes, see the [Multi-node](#multi-node) section. + +7. Start fine-tuning with the SQuAD dataset. + +The above pretrained BERT representations can be fine tuned with just one additional output layer for a state-of-the-art question answering system. Running the following script launches fine-tuning for question answering with the SQuAD dataset. `bash scripts/run_squad.sh /workspace/checkpoints/` -Default arguments are listed below in order, +Default arguments are listed below in the order the scripts expects: - Initial checkpoint - The default is `/workspace/checkpoints/bert_uncased.pt`. - Number of training Epochs - The default is `2`. @@ -244,18 +278,18 @@ Default arguments are listed below in order, - SQuAD directory - The default is `/workspace/bert/data/v1.1`. - Vocabulary file (token to ID mapping) - The default is `/workspace/bert/vocab/vocab`. - Output directory for result - The default is `/results/SQuAD`. -- Mode (“train”, “eval”, “train eval”, "predict") - The default is `train`. -- Config file for the bert model (It should be the same as the pretrained model) - The default is `/workspace/bert/bert_config.json`. +- Mode (`train`, `eval`, `train eval`, `predict`) - The default is `train`. +- Config file for the BERT model (It should be the same as the pretrained model) - The default is `/workspace/bert/bert_config.json`. -The script will save the final checkpoint to the `/results/SQuAD/pytorch_model.bin` file. +The script saves the final checkpoint to the `/results/SQuAD/pytorch_model.bin` file. 9. Start validation/evaluation. -Validation can be performed with the same script as above, setting `Mode` to "prediction". +Validation can be performed with the same script as above, setting `Mode` to `prediction`. 10. Start inference/predictions. -Inference can be performed with the same script as above, setting `Mode` to `eval`. Inference predictions get saved to `/predictions.json`. +Inference can be performed with the same script as above, setting `Mode` to `eval`. Inference predictions are saved to `/predictions.json`. ## Advanced @@ -273,7 +307,7 @@ Descriptions of the key scripts and folders are provided below. - `create_pretraining_data.py` - Creates `.hdf5` files from shared text files in the final step of dataset creation. - `model.py` - Implements the BERT pre-training and fine-tuning model architectures with PyTorch. - `optimization.py` - Implements the LAMB optimizer with PyTorch. -- `run_squad.py` - Implements fine tuning training and evaluation for question answering on the [SQuaD](https://rajpurkar.github.io/SQuAD-explorer/) dataset. +- `run_squad.py` - Implements fine tuning training and evaluation for question answering on the [SQuAD](https://rajpurkar.github.io/SQuAD-explorer/) dataset. - `run_pretraining.py` - Implements BERT pre-training. - `run_pretraining_inference.py` - Implements evaluation of a BERT pre-trained model. @@ -284,145 +318,169 @@ Descriptions of the key scripts and folders are provided below. The complete list of the available parameters for the `run_pretraining.py` script are: ``` - --input_dir INPUT_DIR - The input data directory. - Should contain .hdf5 files for the task. + --input_dir INPUT_DIR - The input data directory. + Should contain .hdf5 files for the task. - --config_file CONFIG_FILE - Path to a json file describing the BERT model - configuration. This file configures the model - architecture, such as the number of transformer - blocks, number of attention heads, etc. + --config_file CONFIG_FILE - Path to a json file describing the BERT model + configuration. This file configures the model + architecture, such as the number of transformer + blocks, number of attention heads, etc. - --bert_model BERT_MODEL - Specifies the type of BERT model to use; - should be one of the following: - bert-base-uncased - bert-large-uncased - bert-base-cased - bert-base-multilingual - bert-base-chinese + --bert_model BERT_MODEL - Specifies the type of BERT model to use; + should be one of the following: + bert-base-uncased + bert-large-uncased + bert-base-cased + bert-base-multilingual + bert-base-chinese - --output_dir OUTPUT_DIR - Path to the output directory where the model - checkpoints will be written. + --output_dir OUTPUT_DIR - Path to the output directory where the model + checkpoints will be written. --max_seq_length MAX_SEQ_LENGTH - - The maximum total input sequence length after - WordPiece tokenization. Sequences longer than - this will be truncated, and sequences shorter - than this will be padded. + - The maximum total input sequence length after + WordPiece tokenization. Sequences longer than + this will be truncated, and sequences shorter + than this will be padded. --max_predictions_per_seq MAX_PREDICTIONS_PER_SEQ - - The maximum total of masked tokens per input - sequence for Masked LM. + - The maximum total of masked tokens per input + sequence for Masked LM. --train_batch_size TRAIN_BATCH_SIZE - - Batch size per GPU for training. + - Batch size per GPU for training. --learning_rate LEARNING_RATE - - The initial learning rate for LAMB optimizer. + - The initial learning rate for LAMB optimizer. - --max_steps MAX_STEPS - Total number of training steps to perform. + --max_steps MAX_STEPS - Total number of training steps to perform. --warmup_proportion WARMUP_PROPORTION - - Proportion of training to perform linear learning - rate warmup for. For example, 0.1 = 10% of training. + - Proportion of training to perform linear learning + rate warmup for. For example, 0.1 = 10% of training. - --seed SEED - Sets the seed to use for random number generation. + --seed SEED - Sets the seed to use for random number generation. --gradient_accumulation_steps GRADIENT_ACCUMULATION_STEPS - - Number of update steps to accumulate before - performing a backward/update pass. + - Number of update steps to accumulate before + performing a backward/update pass. - --fp16 - If set, will perform computations using - automatic mixed precision. + --fp16 - If set, will perform computations using + automatic mixed precision. - --loss_scale LOSS_SCALE - Sets the loss scaling value to use when - mixed precision is used. The default value (0) - tells the script to use dynamic loss scaling - instead of fixed loss scaling. + --loss_scale LOSS_SCALE - Sets the loss scaling value to use when + mixed precision is used. The default value (0) + tells the script to use dynamic loss scaling + instead of fixed loss scaling. - --log_freq LOG_FREQ - If set, the script will output the training - loss every LOG_FREQ steps. + --log_freq LOG_FREQ - If set, the script will output the training + loss every LOG_FREQ steps. - --resume_from_checkpoint - If set, training will resume from a checkpoint - that currently exists in OUTPUT_DIR. + --resume_from_checkpoint - If set, training will resume from a checkpoint + that currently exists in OUTPUT_DIR. --num_steps_per_checkpoint NUM_STEPS_PER_CHECKPOINT - - Number of update steps until a model checkpoint - is saved to disk.` + - Number of update steps until a model checkpoint + is saved to disk. + --phase2 - Specified if training on phase 2 only. If not specified, default pretraining is on phase 1. + --phase1_end_step - The number of steps phase 1 was trained for. In order to + resume phase 2 the correct way, phase1_end_step should correspond to the --max_steps phase 1 was trained for. ``` + +#### Multi-node + +Multi-node runs can be launched on a pyxis/enroot Slurm cluster (see [Requirements](#requirements)) with the `run.sub` script with the following command for a 4-node DGX1 example for both phase 1 and phase 2: +``` +BATCHSIZE=2048 LR=6e-3 GRADIENT_STEPS=128 PHASE=1 sbatch -N4 --ntasks-per-node=8 run.sub +BATCHSIZE=1024 LR=4e-3 GRADIENT_STEPS=256 PHASE=2 sbatch -N4 --ntasks-per-node=8 run.sub +``` + + +Checkpoint after phase 1 will be saved in `checkpointdir` specified in `run.sub`. The checkpoint will be automatically picked up to resume training on phase 2. Note that phase 2 should be run after phase 1. + +Variables to re-run the [Training performance results](#training-performance-results) are available in the `configurations.yml` file. + +The batch variables `BATCHSIZE`, `LR`, `GRADIENT_STEPS`,`PHASE` refer to the Python arguments `train_batch_size`, `learning_rate`, `gradient_accumulation_steps`, `phase2` respectively. + +Note that the `run.sub` script is a starting point that has to be adapted depending on the environment. In particular, variables such as `datadir` handle the location of the files for each phase. + +Refer to the files contents to see the full list of variables to adjust for your system. + + #### Fine-tuning parameters -The run_squad.py script contains many of the same arguments as `run_pretraining.py`. +The `run_squad.py` script contains many of the same arguments as `run_pretraining.py`. The main script specific parameters are: ``` - --bert_model BERT_MODEL - Specifies the type of BERT model to use; - should be one of the following: - bert-base-uncased - bert-large-uncased - bert-base-cased - bert-base-multilingual - bert-base-chinese + --bert_model BERT_MODEL - Specifies the type of BERT model to use; + should be one of the following: + bert-base-uncased + bert-large-uncased + bert-base-cased + bert-base-multilingual + bert-base-chinese - --train_file TRAIN_FILE - Path to the SQuAD json for training. - For example, train-v1.1.json. + --train_file TRAIN_FILE - Path to the SQuAD json for training. + For example, train-v1.1.json. - --predict_file PREDICT_FILE - Path to the SQuAD json for predictions. - For example, dev-v1.1.json or test-v1.1.json. + --predict_file PREDICT_FILE - Path to the SQuAD json for predictions. + For example, dev-v1.1.json or test-v1.1.json. --max_seq_length MAX_SEQ_LENGTH - - The maximum total input sequence length - after WordPiece tokenization. - Sequences longer than this will be truncated, - and sequences shorter than this will be padded. + - The maximum total input sequence length + after WordPiece tokenization. + Sequences longer than this will be truncated, + and sequences shorter than this will be padded. - --doc_stride DOC_STRIDE - When splitting up a long document into chunks - this parameters sets how much stride to take - between chunks of tokens. + --doc_stride DOC_STRIDE - When splitting up a long document into chunks + this parameters sets how much stride to take + between chunks of tokens. --max_query_length MAX_QUERY_LENGTH - - The maximum number of tokens for the question. - Questions longer than - will be truncated to the value specified. + - The maximum number of tokens for the question. + Questions longer than + will be truncated to the value specified. - --n_best_size N_BEST_SIZE - The total number of n-best predictions to - generate in the nbest_predictions.json - output file. + --n_best_size N_BEST_SIZE - The total number of n-best predictions to + generate in the nbest_predictions.json + output file. --max_answer_length MAX_ANSWER_LENGTH - - The maximum length of an answer that can be - generated. This is needed because the start and - end predictions are not conditioned on one another. + - The maximum length of an answer that can be + generated. This is needed because the start and + end predictions are not conditioned on one another. - --verbose_logging - If true, all the warnings related to data - processing will be printed. A number of warnings - are expected for a normal SQuAD evaluation. + --verbose_logging - If true, all the warnings related to data + processing will be printed. A number of warnings + are expected for a normal SQuAD evaluation. - --do_lower_case - Whether to lower case the input text. Set to - true for uncased models and false for cased models. + --do_lower_case - Whether to lower case the input text. Set to + true for uncased models and false for cased models. - --version_2_with_negative - If true, the SQuAD examples contain questions - that do not have an answer. + --version_2_with_negative - If true, the SQuAD examples contain questions + that do not have an answer. --null_score_diff_threshold NULL_SCORE_DIFF_THRES HOLD - - A null answer will be predicted if null_score if - best_non_null is greater than NULL_SCORE_DIFF_THRESHOLD. + - A null answer will be predicted if null_score if + best_non_null is greater than NULL_SCORE_DIFF_THRESHOLD. ``` ### Command-line options -To see the full list of available options and their descriptions, use the -h or --help command line option, for example: +To see the full list of available options and their descriptions, use the `-h` or `--help` command line option, for example: `python run_pretraining.py --help` `python run_squad.py --help` -Detailed descriptions of command line options can be found in the Parameters section above. +Detailed descriptions of command-line options can be found in the [Parameters](#parameters) section. ### Getting the data -For pre-training BERT, we use the concatenation of Wikipedia (2500M words) as well as Book Corpus (800M words). For Wikipedia, we extract only the text passages and ignore headers, lists, and tables. BERT requires that datasets are structured as a document level corpus rather than a shuffled sentence level corpus because it is critical to extract long contiguous sentences. +For pre-training BERT, we use the concatenation of Wikipedia (2500M words) as well as BookCorpus (800M words). For Wikipedia, we extract only the text passages and ignore headers, lists, and tables. BERT requires that datasets are structured as a document level corpus rather than a shuffled sentence level corpus because it is critical to extract long contiguous sentences. The preparation of pre-training dataset is described in the `bertPrep.py` script found in the `data/` folder. The component steps in the automated scripts to prepare the datasets are as follows: @@ -436,12 +494,11 @@ The preparation of pre-training dataset is described in the `bertPrep.py` script 5. hdf5 file creation - each text file shard is processed by the `create_pretraining_data.py` script to produce a corresponding hdf5 file. The script generates input data and labels for masked language modeling and sentence prediction tasks for the input text shard. -The tools used for preparing the Bookcorpus and Wikipedia datasets can be applied to prepare an arbitrary corpus. The `create_datasets_from_start.sh` script in the `data/` directory applies sentence segmentation, sharding, and hdf5 file creation given an arbitrary text file containing a document-separated text corpus. - +The tools used for preparing the BookCorpus and Wikipedia datasets can be applied to prepare an arbitrary corpus. The `create_datasets_from_start.sh` script in the `data/` directory applies sentence segmentation, sharding, and hdf5 file creation given an arbitrary text file containing a document-separated text corpus. For fine-tuning a pre-trained BERT model for specific tasks, by default this repository prepares the following dataset: -- [SQuAD](https://rajpurkar.github.io/SQuAD-explorer/): for question answering +- [SQuAD](https://rajpurkar.github.io/SQuAD-explorer/): for question answering #### Dataset guidelines @@ -469,7 +526,7 @@ The training process consists of two steps: pre-training and fine-tuning. Pre-training is performed using the `run_pretraining.py` script along with parameters defined in the `scripts/run_pretraining.sh`. -The `run_pretraining.sh` script runs a job on a single node that trains the BERT-large model from scratch using the Wikipedia and BookCorpus datasets as training data using LAMB optimizer. By default, the training script runs two phases of training with a hyperparameter recipe specific to 8 x V100 32G cards: +The `run_pretraining.sh` script runs a job on a single node that trains the BERT-large model from scratch using Wikipedia and BookCorpus datasets as training data using the LAMB optimizer. By default, the training script runs two phases of training with a hyperparameter recipe specific to 8 x V100 32G cards: Phase 1: (Maximum sequence length of 128) - Runs on 8 GPUs with training batch size of 64 per GPU @@ -487,7 +544,7 @@ Phase 2: (Maximum sequence length of 512) - Saves a checkpoint every 200 iterations (keeps only the latest 3 checkpoints) and at the end of training. All checkpoints, and training logs are saved to the `/results` directory (in the container which can be mounted to a local directory). - Creates a log file containing all the output -These parameters will train on Wikipedia and BooksCorpus to SoTA accuracy on a DGX-1 with 32GB V100 cards. +These parameters will train on Wikipedia and BookCorpus to SoTA accuracy on a DGX-1 with 32GB V100 cards. `bash run_pretraining.sh ` @@ -496,14 +553,14 @@ Where: - `` is per-GPU batch size used for training. Larger batch sizes run more efficiently, but require more memory. - `` is the base learning rate for training - `` is the type of math in your model, can be either `fp32` or `fp16`. The options mean: - - FP32: 32-bit IEEE single precision floats. - - FP16: Mixed precision 16 and 32 bit floats. + - FP32: 32-bit IEEE single precision floats. + - FP16: Mixed precision 16 and 32 bit floats. - `` is the number of GPUs to use for training. Must be equal to or smaller than the number of GPUs attached to your node. - `` is the percentage of training steps used for warm-up at the start of training. - `` is the total number of training steps. - `` controls how often checkpoints are saved. -- `` if set to true, training should resume from latest model in /results/checkpoints. Default is false. -- `` a flag indicating if output should be written to a log file or not (acceptable values are true or false. true indicates output should be saved to a log file.) +- `` if set to `true`, training should resume from latest model in `/results/checkpoints`. Default is `false`. +- `` a flag indicating if output should be written to a log file or not (acceptable values are `true` or 'false`. `true` indicates output should be saved to a log file.) - `` a flag indicating whether a larger batch should be simulated with gradient accumulation. - `` an integer indicating the number of steps to accumulate gradients over. Effective batch size = `training_batch_size` / `gradient_accumulation_steps`. - `` random seed for the run. @@ -522,7 +579,7 @@ For example: Trains BERT-large from scratch on a DGX-1 32G using FP16 arithmetic. 90% of the training steps are done with sequence length 128 (phase1 of training) and 10% of the training steps are done with sequence length 512 (phase2 of training). -In order to train on a DGX-1 16G, set `gradient_accumulation_steps` to `512` and `gradient_accumulation_steps_phase2` to `1024` in `scripts/run_pretraining.sh` +In order to train on a DGX-1 16G, set `gradient_accumulation_steps` to `512` and `gradient_accumulation_steps_phase2` to `1024` in `scripts/run_pretraining.sh`. In order to train on a DGX-2 32G, set `train_batch_size` to `4096`, `train_batch_size_phase2` to `2048`, `num_gpus` to `16`, `gradient_accumulation_steps` to `64` and `gradient_accumulation_steps_phase2` to `256` in `scripts/run_pretraining.sh` @@ -538,17 +595,17 @@ By default, each Python script implements fine-tuning a pre-trained BERT model f - Has FP16 precision enabled - Saves a checkpoint at the end of training to the `/results/` folder -Fine-tuning Python scripts implement support for mixed precision and multi-GPU training through NVIDIA’s [Apex](https://github.com/NVIDIA/apex) library. For a full list of parameters and associated explanations, consult the [Parameters](#parameters) section. +Fine-tuning Python scripts implement support for mixed precision and multi-GPU training through NVIDIA’s [APEX](https://github.com/NVIDIA/apex) library. For a full list of parameters and associated explanations, see the [Parameters](#parameters) section. All fine-tuning shell scripts have the same positional arguments, outlined below: -`bash scripts/run_squad.sh ` +```bash scripts/run_squad.sh ``` By default, the mode positional argument is set to train eval. See the [Quick Start Guide](#quick-start-guide) for explanations of each positional argument. Note: The first positional argument (the path to the checkpoint to load) is required. -Each fine-tuning script assumes that the corresponding dataset files exist in the `data/` directory or separate path can be a command line input to `run_squad.sh`. +Each fine-tuning script assumes that the corresponding dataset files exist in the `data/` directory or separate path can be a command-line input to `run_squad.sh`. ### Inference process @@ -578,13 +635,13 @@ Where: - `` is per-GPU batch size used for inference. Larger batch sizes run more efficiently, but require more memory. - `` is the type of math in your model, can be either `fp32` or `fp16`. The options mean: - - `fp32`: 32-bit IEEE single precision floats - - `fp16`: 16-bit floats for 3.2x faster inference + - `fp32`: 32-bit IEEE single precision floats + - `fp16`: 16-bit floats for 3.2x faster inference - `` is the number of GPUs to use for inference. Must be equal to or smaller than the number of GPUs attached to your node. - `` is either `--eval` for evaluation or `--prediction` for inference -- `` is the model checkpoint to run inference on. Default is `-1`, which takes the most recent model checkpoint from the checkpoints folder. +- `` is the model checkpoint to run inference on. Default is `-1`, which takes the most recent model checkpoint from the `checkpoints` folder. - `` is the total number of inference steps per process. Default is `-1`, which iterates over the entire dataset. -- `` a flag indicating if output should be written to a logfile or not (acceptable values are true or false. true indicates output should be saved to a logfile.) +- `` a flag indicating if output should be written to a logfile or not (acceptable values are `true` or `false`. `true` indicates output should be saved to a logfile.) For example: @@ -598,11 +655,10 @@ Evaluation fine-tuning is enabled by the same scripts as training: The mode positional argument of the shell script is used to run in evaluation mode. The fine-tuned BERT model will be run on the evaluation dataset, and the evaluation loss and accuracy will be displayed. -Each inference shell script expects dataset files to exist in the same locations as the corresponding training scripts. The inference scripts can be run with default settings. By setting `mode` variable in the script to either `eval` or `prediction` flag, you can choose between running evaluation on a given dataset or doing prediction. +Each inference shell script expects dataset files to exist in the same locations as the corresponding training scripts. The inference scripts can be run with default settings. By setting `mode` variable in the script to either `eval` or `prediction` flag, you can choose between running prediction and evaluating them on a given dataset or just the former. `bash scripts/run_squad.sh ` -Note: Fine-tuning evaluation is only supported on single GPU. ## Performance @@ -612,11 +668,11 @@ The following section shows how to run benchmarks measuring the model performanc #### Training performance benchmark -Training performance benchmarks for both pretraining and fine-tuning can be obtained by running `scripts/run_pretraining.sh` and `scripts/run_squad.sh` respectively. The required parameters can be passed through the command line as described in [Training process](#training-process). +Training performance benchmarks for both pretraining and fine-tuning can be obtained by running `scripts/run_pretraining.sh` and `scripts/run_squad.sh` respectively. The required parameters can be passed through the command-line as described in [Training process](#training-process). To benchmark the training performance on a specific batch size, run: -`bash scripts/run_squad.sh train ` +`bash scripts/run_squad.sh train ` An example call used to generate throughput numbers: @@ -626,11 +682,11 @@ An example call used to generate throughput numbers: #### Inference performance benchmark -Inference performance benchmarks for both pretraining and fine-tuning can be obtained by running `scripts/run_pretraining_inference.sh` and `scripts/run_squad.sh` respectively. The required parameters can be passed through the command line as described in [Inference process](#inference-process). +Inference performance benchmarks for both pretraining and fine-tuning can be obtained by running `scripts/run_pretraining_inference.sh` and `scripts/run_squad.sh` respectively. The required parameters can be passed through the command-line as described in [Inference process](#inference-process). To benchmark the inference performance on a specific batch size, run: -`bash scripts/run_squad.sh eval ` +`bash scripts/run_squad.sh eval ` An example call used to generate throughput numbers: @@ -644,18 +700,20 @@ An example call used to generate throughput numbers: #### Training accuracy results - -Our results were obtained by running `scripts/run_squad.sh` and `scripts/run_pretraining.sh` training scripts in the pytorch:19.07-py3 NGC container on NVIDIA DGX-2 with (16x V100 32G) GPUs for pretraining and NVIDIA DGX-1 with (8x V100 16G) GPUs for fine-tuning. - -Note: Pretraining results were obtained with a dataset that was created using an earlier version of the data preprocessing scripts than are currently in this repository, and with an an earlier snapshot of wikidumps. The results in the table will be updated soon with results using the latest data prep scripts. Early data show the results are quite similar. +Our results were obtained by running the `scripts/run_squad.sh` and `scripts/run_pretraining.sh` training scripts in the pytorch:19.07-py3 NGC container on NVIDIA DGX-2 with (16x V100 32G) GPUs for pretraining and NVIDIA DGX-1 with (8x V100 16G) GPUs for fine-tuning. ##### Pre-training loss results -| DGX System | GPUs | Accumulated Batch size / GPU (Phase 1 and Phase 2) | Accumulation steps (Phase 1 and Phase 2) | Final Loss - FP32 | Final Loss - mixed precision | Time to train(days) - FP32 | Time to train(days) - mixed precision | Time to train speedup (FP32 to mixed precision) +| DGX System | GPUs | Accumulated Batch size / GPU (Phase 1 and Phase 2) | Accumulation steps (Phase 1 and Phase 2) | Final Loss - FP32 | Final Loss - mixed precision | Time to train(hours) - FP32 | Time to train(hours) - mixed precision | Time to train speedup (FP32 to mixed precision) |---|---|---|---|---|---|---|---|--- -| NVIDIA DGX-1 With 16G|8|8192 and 4196 |512 and 1024|-|1.53|-|6.84|- -| NVIDIA DGX-2 With 32G|16|4096 and 2048 |64 and 256|-|1.52|-|2.71|- +| 1 x NVIDIA DGX-1 With 16G|8|8192 and 4196 |512 and 1024|-|1.36|-|153.16|- +| 1 x NVIDIA DGX-2H With 32G|16|4096 and 2048 |64 and 256|-|1.35|-|58.4|- +| 4 x NVIDIA DGX-1 With 16G|8|2048 and 1024 |128 and 256|-|1.34|-|39.27|- +| 4 x NVIDIA DGX-2H With 32G|16|1024 and 512 |16 and 64|-|1.33|-|15.35|- +| 16 x NVIDIA DGX-1 With 16G|8|512 and 256 |32 and 64|-|1.329|-|10.36|- +| 16 x NVIDIA DGX-2H With 32G|16|256 and 128 |4 and 16|-|1.33|-|3.94|- +| 64 x NVIDIA DGX-2H With 32G|16|64 and 32 |(1 and 4)FP16 and (2 and 8)FP32|1.33|1.331|4.338|1.124|3.85 ##### Fine-tuning accuracy results @@ -667,9 +725,9 @@ Note: Pretraining results were obtained with a dataset that was created using an ###### Pre-training stability test -| Accuracy Metric | Seed 1 -|---|--- -| Final Loss | 1.52 +| Accuracy Metric | Seed 1 | Seed 2 | Seed 3 | Seed 4 | Seed 5 | Mean | Standard Deviation +|---|---|---|---|---|---|---|--- +|Final Loss| 1.344 | 1.328 | 1.324 | 1.326 | 1.333 | 1.331 | 0.009 ###### Fine-tuning stability test @@ -680,11 +738,12 @@ Training stability with 8 GPUs, FP16 computations, batch size of 4: |Exact Match %| 84.50 | 84.07 | 84.52 | 84.23 | 84.17 | 84.30 | .200 | f1 % | 91.29 | 91.01 | 91.14 | 91.10 | 90.85 | 91.08 | 0.162 + #### Training performance results ##### Training performance: NVIDIA DGX-1 (8x V100 16G) -Our results were obtained by running `scripts/run_pretraining.sh` and `scripts/run_squad.shtraining scripts in the pytorch:19.07-py3 NGC container on NVIDIA DGX-1 with (8x V100 16G) GPUs. Performance numbers (in sequences per second) were averaged over a predefined number of training iterations. +Our results were obtained by running the `scripts/run_pretraining.sh` and `scripts/run_squad.sh` training scripts in the pytorch:19.07-py3 NGC container on NVIDIA DGX-1 with (8x V100 16G) GPUs. Performance numbers (in sequences per second) were averaged over a predefined number of training iterations. ###### Pre-training NVIDIA DGX-1 With 16G @@ -698,6 +757,18 @@ Our results were obtained by running `scripts/run_pretraining.sh` and `scripts/r | 8| 2| 4| 512| 56.16 |194.56 | 3.46| 7.43| 7.30 +###### Pre-training on multiple NVIDIA DGX-1 With 16G + +| Nodes | GPUs | Batch size / GPU (FP32) | Batch size / GPU (FP16) | Sequence length | Throughput - FP32(sequences/sec) | Throughput - mixed precision(sequences/sec) | Throughput speedup (FP32 - mixed precision) | Weak scaling - FP32 | Weak scaling - mixed precision +|------------------|----------------------|----------------------|-------------------|-----------------------------------------------|------------------------------------|---------------------------------|----------------------|----------------------------------------------|-------------- +|1 |8 | N/A | 16| 128| N/A |874.24 |N/A |N/A | 1.00 +|4 |8 | N/A | 16| 128| N/A |3089.76 | N/A| N/A| 3.53 +|16 |8 | N/A | 16| 128| N/A |12144.64 | N/A| N/A| 13.89 +|1 |8 | N/A | 4| 512| N/A |195.93 |N/A |N/A | 1.00 +|4 |8 | N/A | 4| 512| N/A |700.16 | N/A| N/A| 3.57 +|16| 8| N/A | 4| 512| N/A |2746.368 | N/A| N/A| 14.02 + + ###### Fine-tuning NVIDIA DGX-1 With 16G @@ -713,7 +784,7 @@ Our results were obtained by running `scripts/run_pretraining.sh` and `scripts/r ##### Training performance: NVIDIA DGX-1 (8x V100 32G) -Our results were obtained by running `scripts/run_pretraining.sh` and `scripts/run_squad.sh` training scripts in the pytorch:19.07-py3 NGC container on NVIDIA DGX-1 with (8x V100 32G) GPUs. Performance numbers (in sequences per second) were averaged over an entire training epoch. +Our results were obtained by running the `scripts/run_pretraining.sh` and `scripts/run_squad.sh` training scripts in the pytorch:19.07-py3 NGC container on NVIDIA DGX-1 with (8x V100 32G) GPUs. Performance numbers (in sequences per second) were averaged over an entire training epoch. ###### Pre-training NVIDIA DGX-1 With 32G @@ -729,6 +800,7 @@ Our results were obtained by running `scripts/run_pretraining.sh` and `scripts/r |4 |N/A | 10| 512|N/A |164.00 | N/A| N/A| 3.57 | 8|N/A | 10| 512|N/A |325.60| N/A| N/A| 7.08 + ###### Fine-tuning NVIDIA DGX-1 With 32G | GPUs | Batch size / GPU | Throughput - FP32(sequences/sec) | Throughput - mixed precision(sequences/sec) | Throughput speedup (FP32 - mixed precision) | Weak scaling - FP32 | Weak scaling - mixed precision @@ -743,7 +815,7 @@ Our results were obtained by running `scripts/run_pretraining.sh` and `scripts/r ##### Training performance: NVIDIA DGX-2 (16x V100 32G) -Our results were obtained by running `scripts/run_pretraining.sh` and `scripts/run_squad.sh` training scripts in the pytorch:19.07-py3 NGC container on NVIDIA DGX-2 with (16x V100 32G) GPUs. Performance numbers (in sequences per second) were averaged over an entire training epoch. +Our results were obtained by running the `scripts/run_pretraining.sh` and `scripts/run_squad.sh` training scripts in the pytorch:19.07-py3 NGC container on NVIDIA DGX-2 with (16x V100 32G) GPUs. Performance numbers (in sequences per second) were averaged over an entire training epoch. ###### Pre-training NVIDIA DGX-2 With 32G @@ -762,6 +834,22 @@ Our results were obtained by running `scripts/run_pretraining.sh` and `scripts/r |8 | N/A | 10| 512| N/A| 325.60| N/A| N/A| 6.87 |16 | N/A | 10| 512| N/A| 648.00| N/A| N/A| 13.67 +###### Pre-training on multiple NVIDIA DGX-2H With 32G + +Note: Multi-node performance numbers below are on DGX-2H whereas the single node performance numbers above are on DGX-2. + + +| Nodes | GPUs | Batch size / GPU (FP32) | Batch size / GPU (FP16) | Sequence length | Throughput - FP32(sequences/sec) | Throughput - mixed precision(sequences/sec) | Throughput speedup (FP32 - mixed precision) | Weak scaling - FP32 | Weak scaling - mixed precision +|------------------|----------------------|----------------------|-------------------|-----------------------------------------------|------------------------------------|---------------------------------|----------------------|----------------------------------------------|--------------------- +|1 |16 | N/A | 64| 128| N/A |3379.2 |N/A |N/A | 1.00 +|4 |16 | N/A | 64| 128| N/A |12709.88 | N/A| N/A| 3.76 +|16 |16 | N/A | 64| 128| N/A |51937.28 | N/A| N/A| 15.37 +|64 |16 | 32 | 64| 128| 46628.86 |188088.32 | 4.03 | N/A| 55.66 +|1 |16 | N/A | 8| 512| N/A |625.66 |N/A |N/A | 1.00 +|4 |16 | N/A | 8| 512| N/A |2386.38 | N/A| N/A| 3.81 +|16| 16| N/A | 8| 512| N/A |9932.8 | N/A| N/A| 15.87 +|64| 16| 4 | 8| 512| 9543.68 |37478.4 | 3.92| N/A| 59.9 + ###### Fine-tuning NVIDIA DGX-2 With 32G | GPUs | Batch size / GPU | Throughput - FP32(sequences/sec) | Throughput - mixed precision(sequences/sec) | Throughput speedup (FP32 - mixed precision) | Weak scaling - FP32 | Weak scaling - mixed precision @@ -781,7 +869,7 @@ To achieve these same results, follow the steps in the [Quick Start Guide](#quic ##### Inference performance: NVIDIA DGX-1 (1x V100 16G) -Our results were obtained by running `scripts/run_pretraining_inference.sh` on data of sequence length 512 and `scripts/run_squad.sh` scripts in the pytorch:19.07-py3 NGC container on NVIDIA DGX-1 with (1x V100 16G) GPUs. +Our results were obtained by running the `scripts/run_pretraining_inference.sh` script on data of sequence length 512 and the `scripts/run_squad.sh` script in the pytorch:19.07-py3 NGC container on NVIDIA DGX-1 with (1x V100 16G) GPUs. ###### Pre-training inference on NVIDIA DGX-1 with 16G @@ -797,7 +885,7 @@ Our results were obtained by running `scripts/run_pretraining_inference.sh` on d ##### Inference performance: NVIDIA DGX-1 (1x V100 32G) -Our results were obtained by running `scripts/run_pretraining_inference.sh` and `scripts/run_squad.sh` scripts in the pytorch:19.07-py3 NGC container on NVIDIA DGX-1 with (1x V100 32G) GPUs. +Our results were obtained by running the `scripts/run_pretraining_inference.sh` and `scripts/run_squad.sh` scripts in the pytorch:19.07-py3 NGC container on NVIDIA DGX-1 with (1x V100 32G) GPUs. ###### Pre-training inference on NVIDIA DGX-1 with 32G @@ -813,13 +901,13 @@ Our results were obtained by running `scripts/run_pretraining_inference.sh` and ##### Inference performance: NVIDIA DGX-2 (1x V100 32G) -Our results were obtained by running `scripts/run_pretraining_inference.sh` and `scripts/run_squad.sh` scripts in the pytorch:19.07-py3 NGC container on NVIDIA DGX-2 with (1x V100 32G) GPUs. +Our results were obtained by running the `scripts/run_pretraining_inference.sh` and `scripts/run_squad.sh` scripts in the pytorch:19.07-py3 NGC container on NVIDIA DGX-2 with (1x V100 32G) GPUs. ###### Pre-training inference on NVIDIA DGX-2 with 32G |GPUs | Throughput - FP32(sequences/sec)|Throughput - Mixed Precision(sequences/sec) |---------- |---------|--------------- -| 1| 30.24 97.72 +| 1| 30.24| 97.72 ###### Fine-tuning inference on NVIDIA DGX-2 with 32G @@ -835,16 +923,20 @@ The inference performance metrics used were items/second. ### Changelog +September 2019 +- Scripts to support multi-node launch +- Update pretraining loss results based on the latest data preparation scripts + August 2019 - -- Pretraining support with LAMB optimizer - +- Pre-training support with LAMB optimizer - Updated Data download and Preprocessing July 2019 - - Initial release ### Known issues There are no known issues with this model. + + + diff --git a/PyTorch/LanguageModeling/BERT/bind_pyt.py b/PyTorch/LanguageModeling/BERT/bind_pyt.py index 9e907f47..211467aa 100755 --- a/PyTorch/LanguageModeling/BERT/bind_pyt.py +++ b/PyTorch/LanguageModeling/BERT/bind_pyt.py @@ -1,3 +1,16 @@ +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + import sys import subprocess import os diff --git a/PyTorch/LanguageModeling/BERT/configurations.yml b/PyTorch/LanguageModeling/BERT/configurations.yml new file mode 100644 index 00000000..5ae89482 --- /dev/null +++ b/PyTorch/LanguageModeling/BERT/configurations.yml @@ -0,0 +1,182 @@ +# Copyright (c) 2018-2019, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#1 DGX1 phase1 +bert--DGX1: + <<: *BERT_ON_CLUSTER + <<: *DGX1 + variables: + <<: *DGX1_VARS + NNODES: "1" + BATCHSIZE: "8192" + LR: "6e-3" + GRADIENT_STEPS: "512" + PHASE: "1" + +#4 DGX1 phase1 +bert--DGX1_4x8x16x128: + <<: *BERT_ON_CLUSTER + <<: *DGX1 + variables: + <<: *DGX1_VARS + NNODES: "4" + BATCHSIZE: "2048" + LR: "6e-3" + GRADIENT_STEPS: "128" + PHASE: "1" + +#16 DGX1 phase1 +bert--DGX1_16x8x16x32: + <<: *BERT_ON_CLUSTER + <<: *DGX1 + variables: + <<: *DGX1_VARS + NNODES: "16" + BATCHSIZE: "512" + LR: "6e-3" + GRADIENT_STEPS: "32" + PHASE: "1" + +#1 DGX2 phase1 +bert--DGX2: + <<: *BERT_ON_CLUSTER + <<: *DGX2 + variables: + <<: *DGX2_VARS + NNODES: "1" + BATCHSIZE: "4096" + LR: "6e-3" + GRADIENT_STEPS: "64" + PHASE: "1" + +#4 DGX2 phase1 +bert--DGX2_4x16x64x16: + <<: *BERT_ON_CLUSTER + <<: *DGX2 + variables: + <<: *DGX2_VARS + NNODES: "4" + BATCHSIZE: "1024" + LR: "6e-3" + GRADIENT_STEPS: "16" + PHASE: "1" + +#16 DGX2 phase1 +bert--DGX2_16x16x64x4: + <<: *BERT_ON_CLUSTER + <<: *DGX2 + variables: + <<: *DGX2_VARS + NNODES: "16" + BATCHSIZE: "256" + LR: "6e-3" + GRADIENT_STEPS: "4" + PHASE: "1" + +#64 DGX2 phase1 +bert--DGX2_64x16x64: + <<: *BERT_ON_CLUSTER + <<: *DGX2 + variables: + <<: *DGX2_VARS + NNODES: "64" + BATCHSIZE: "64" + LR: "6e-3" + GRADIENT_STEPS: "1" + PHASE: "1" + +#1 DGX1 phase2 +bert--DGX1_1x8x4x1024: + <<: *BERT_ON_CLUSTER + <<: *DGX1 + variables: + <<: *DGX1_VARS + NNODES: "1" + BATCHSIZE: "4096" + LR: "4e-3" + GRADIENT_STEPS: "1024" + PHASE: "2" + +#4 DGX1 phase2 +bert--DGX1_4x8x4x256: + <<: *BERT_ON_CLUSTER + <<: *DGX1 + variables: + <<: *DGX1_VARS + NNODES: "4" + BATCHSIZE: "1024" + LR: "4e-3" + GRADIENT_STEPS: "256" + PHASE: "2" + +#16 DGX1 phase2 +bert--DGX1_16x8x4x64: + <<: *BERT_ON_CLUSTER + <<: *DGX1 + variables: + <<: *DGX1_VARS + NNODES: "16" + BATCHSIZE: "256" + LR: "4e-3" + GRADIENT_STEPS: "64" + PHASE: "2" + +#1 DGX2 phase2 +bert--DGX2_1x16x8x256: + <<: *BERT_ON_CLUSTER + <<: *DGX2 + variables: + <<: *DGX2_VARS + NNODES: "1" + BATCHSIZE: "2048" + LR: "4e-3" + GRADIENT_STEPS: "256" + PHASE: "2" + +#4 DGX2 phase2 +bert--DGX2_4x16x8x64: + <<: *BERT_ON_CLUSTER + <<: *DGX2 + variables: + <<: *DGX2_VARS + NNODES: "4" + BATCHSIZE: "512" + LR: "4e-3" + GRADIENT_STEPS: "64" + PHASE: "2" + +#16 DGX2 phase2 +bert--DGX2_16x16x8x16: + <<: *BERT_ON_CLUSTER + <<: *DGX2 + variables: + <<: *DGX2_VARS + NNODES: "16" + BATCHSIZE: "128" + LR: "4e-3" + GRADIENT_STEPS: "16" + PHASE: "2" + +#64 DGX2 phase2 +bert--DGX2_64x16x8x4: + <<: *BERT_ON_CLUSTER + <<: *DGX2 + variables: + <<: *DGX2_VARS + NNODES: "64" + BATCHSIZE: "32" + LR: "4e-3" + GRADIENT_STEPS: "4" + PHASE: "2" + diff --git a/PyTorch/LanguageModeling/BERT/create_pretraining_data.py b/PyTorch/LanguageModeling/BERT/create_pretraining_data.py index de2bc5b5..7370d790 100755 --- a/PyTorch/LanguageModeling/BERT/create_pretraining_data.py +++ b/PyTorch/LanguageModeling/BERT/create_pretraining_data.py @@ -1,6 +1,6 @@ # coding=utf-8 -# Copyright 2018 The Google AI Language Team Authors. -# +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Copyright 2018 The Google AI Language Team Authors and The HugginFace Inc. team. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -12,6 +12,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. + """Create masked LM/next sentence masked_lm TF examples for BERT.""" from __future__ import absolute_import, division, print_function, unicode_literals diff --git a/PyTorch/LanguageModeling/BERT/data/BooksDownloader.py b/PyTorch/LanguageModeling/BERT/data/BooksDownloader.py index c79bfa1a..a10ebde0 100644 --- a/PyTorch/LanguageModeling/BERT/data/BooksDownloader.py +++ b/PyTorch/LanguageModeling/BERT/data/BooksDownloader.py @@ -1,4 +1,16 @@ # Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + import subprocess class BooksDownloader: diff --git a/PyTorch/LanguageModeling/BERT/data/BookscorpusTextFormatting.py b/PyTorch/LanguageModeling/BERT/data/BookscorpusTextFormatting.py index 71c67a9b..22e48d4b 100644 --- a/PyTorch/LanguageModeling/BERT/data/BookscorpusTextFormatting.py +++ b/PyTorch/LanguageModeling/BERT/data/BookscorpusTextFormatting.py @@ -1,4 +1,16 @@ # Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + import glob import os diff --git a/PyTorch/LanguageModeling/BERT/data/Downloader.py b/PyTorch/LanguageModeling/BERT/data/Downloader.py index d6b25f0e..ebbd43d6 100644 --- a/PyTorch/LanguageModeling/BERT/data/Downloader.py +++ b/PyTorch/LanguageModeling/BERT/data/Downloader.py @@ -1,4 +1,16 @@ # Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + from GooglePretrainedWeightDownloader import GooglePretrainedWeightDownloader from NVIDIAPretrainedWeightDownloader import NVIDIAPretrainedWeightDownloader from WikiDownloader import WikiDownloader diff --git a/PyTorch/LanguageModeling/BERT/data/GooglePretrainedWeightDownloader.py b/PyTorch/LanguageModeling/BERT/data/GooglePretrainedWeightDownloader.py index f833759a..bb0684d3 100644 --- a/PyTorch/LanguageModeling/BERT/data/GooglePretrainedWeightDownloader.py +++ b/PyTorch/LanguageModeling/BERT/data/GooglePretrainedWeightDownloader.py @@ -1,4 +1,15 @@ # Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. import hashlib import os diff --git a/PyTorch/LanguageModeling/BERT/data/MRPCDownloader.py b/PyTorch/LanguageModeling/BERT/data/MRPCDownloader.py index f20ffe2e..42dd4227 100644 --- a/PyTorch/LanguageModeling/BERT/data/MRPCDownloader.py +++ b/PyTorch/LanguageModeling/BERT/data/MRPCDownloader.py @@ -1,4 +1,15 @@ # Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. import bz2 import os diff --git a/PyTorch/LanguageModeling/BERT/data/NVIDIAPretrainedWeightDownloader.py b/PyTorch/LanguageModeling/BERT/data/NVIDIAPretrainedWeightDownloader.py index 0d4fc020..13c9a320 100644 --- a/PyTorch/LanguageModeling/BERT/data/NVIDIAPretrainedWeightDownloader.py +++ b/PyTorch/LanguageModeling/BERT/data/NVIDIAPretrainedWeightDownloader.py @@ -1,4 +1,15 @@ # Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. import os diff --git a/PyTorch/LanguageModeling/BERT/data/SquadDownloader.py b/PyTorch/LanguageModeling/BERT/data/SquadDownloader.py index 2d97fc41..6d64ffc6 100644 --- a/PyTorch/LanguageModeling/BERT/data/SquadDownloader.py +++ b/PyTorch/LanguageModeling/BERT/data/SquadDownloader.py @@ -1,4 +1,15 @@ # Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. import bz2 import os diff --git a/PyTorch/LanguageModeling/BERT/data/TextSharding.py b/PyTorch/LanguageModeling/BERT/data/TextSharding.py index e690aa3b..0753e742 100644 --- a/PyTorch/LanguageModeling/BERT/data/TextSharding.py +++ b/PyTorch/LanguageModeling/BERT/data/TextSharding.py @@ -1,4 +1,15 @@ # Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. from collections import defaultdict from itertools import islice diff --git a/PyTorch/LanguageModeling/BERT/data/WikiDownloader.py b/PyTorch/LanguageModeling/BERT/data/WikiDownloader.py index be85ac8f..505ec76c 100644 --- a/PyTorch/LanguageModeling/BERT/data/WikiDownloader.py +++ b/PyTorch/LanguageModeling/BERT/data/WikiDownloader.py @@ -1,4 +1,15 @@ # Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. import bz2 import os @@ -43,6 +54,4 @@ class WikiDownloader: subprocess.run('bzip2 -dk ' + self.save_path + '/' + filename, shell=True, check=True) else: - assert False, 'WikiDownloader not implemented for this language yet.' - - + assert False, 'WikiDownloader not implemented for this language yet.' \ No newline at end of file diff --git a/PyTorch/LanguageModeling/BERT/data/WikicorpusTextFormatting.py b/PyTorch/LanguageModeling/BERT/data/WikicorpusTextFormatting.py index 9e0c7222..9d356b13 100644 --- a/PyTorch/LanguageModeling/BERT/data/WikicorpusTextFormatting.py +++ b/PyTorch/LanguageModeling/BERT/data/WikicorpusTextFormatting.py @@ -1,4 +1,15 @@ # Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. import glob import os diff --git a/PyTorch/LanguageModeling/BERT/data/__init__.py b/PyTorch/LanguageModeling/BERT/data/__init__.py index e69de29b..98386fd4 100644 --- a/PyTorch/LanguageModeling/BERT/data/__init__.py +++ b/PyTorch/LanguageModeling/BERT/data/__init__.py @@ -0,0 +1,12 @@ +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/PyTorch/LanguageModeling/BERT/data/bertPrep.py b/PyTorch/LanguageModeling/BERT/data/bertPrep.py index 7960111c..bd7496da 100644 --- a/PyTorch/LanguageModeling/BERT/data/bertPrep.py +++ b/PyTorch/LanguageModeling/BERT/data/bertPrep.py @@ -1,4 +1,15 @@ # Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. import BookscorpusTextFormatting import Downloader @@ -70,14 +81,13 @@ def main(args): wikiextractor_command = path_to_wikiextractor_in_container + ' ' + directory_structure['download'] + '/' + args.dataset + '/wikicorpus_en.xml ' + '-b 100M --processes ' + str(args.n_processes) + ' -o ' + directory_structure['extracted'] + '/' + args.dataset print('WikiExtractor Command:', wikiextractor_command) wikiextractor_process = subprocess.run(wikiextractor_command, shell=True, check=True) + #wikiextractor_process.communicate() wiki_path = directory_structure['extracted'] + '/wikicorpus_en' output_filename = directory_structure['formatted'] + '/wikicorpus_en_one_article_per_line.txt' wiki_formatter = WikicorpusTextFormatting.WikicorpusTextFormatting(wiki_path, output_filename, recursive=True) wiki_formatter.merge() - assert os.stat(output_filename).st_size > 0, 'File glob did not pick up extracted wiki files from WikiExtractor.' - elif args.dataset == 'wikicorpus_zh': assert False, 'wikicorpus_zh not fully supported at this time. The simplified/tradition Chinese data needs to be translated and properly segmented still, and should work once this step is added.' if args.skip_wikiextractor == 0: @@ -85,6 +95,7 @@ def main(args): wikiextractor_command = path_to_wikiextractor_in_container + ' ' + directory_structure['download'] + '/' + args.dataset + '/wikicorpus_zh.xml ' + '-b 100M --processes ' + str(args.n_processes) + ' -o ' + directory_structure['extracted'] + '/' + args.dataset print('WikiExtractor Command:', wikiextractor_command) wikiextractor_process = subprocess.run(wikiextractor_command, shell=True, check=True) + #wikiextractor_process.communicate() wiki_path = directory_structure['extracted'] + '/wikicorpus_zh' output_filename = directory_structure['formatted'] + '/wikicorpus_zh_one_article_per_line.txt' diff --git a/PyTorch/LanguageModeling/BERT/data/create_datasets_from_start.sh b/PyTorch/LanguageModeling/BERT/data/create_datasets_from_start.sh index 414d8d03..756cec20 100755 --- a/PyTorch/LanguageModeling/BERT/data/create_datasets_from_start.sh +++ b/PyTorch/LanguageModeling/BERT/data/create_datasets_from_start.sh @@ -1,5 +1,18 @@ #!/bin/bash + # Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + # Download python3 /workspace/bert/data/bertPrep.py --action download --dataset bookscorpus python3 /workspace/bert/data/bertPrep.py --action download --dataset wikicorpus_en @@ -26,4 +39,4 @@ python3 /workspace/bert/data/bertPrep.py --action create_hdf5_files --dataset bo # Create HDF5 files Phase 2 python3 /workspace/bert/data/bertPrep.py --action create_hdf5_files --dataset books_wiki_en_corpus --max_seq_length 512 \ - --max_predictions_per_seq 80 --vocab_file $BERT_PREP_WORKING_DIR/download/google_pretrained_weights/uncased_L-24_H-1024_A-16/vocab.txt --do_lower_case 1 + --max_predictions_per_seq 80 --vocab_file $BERT_PREP_WORKING_DIR/download/google_pretrained_weights/uncased_L-24_H-1024_A-16/vocab.txt --do_lower_case 1 \ No newline at end of file diff --git a/PyTorch/LanguageModeling/BERT/data/glue/download_mrpc.sh b/PyTorch/LanguageModeling/BERT/data/glue/download_mrpc.sh index d6faedb4..65f3446b 100755 --- a/PyTorch/LanguageModeling/BERT/data/glue/download_mrpc.sh +++ b/PyTorch/LanguageModeling/BERT/data/glue/download_mrpc.sh @@ -1,5 +1,18 @@ #!/usr/bin/env bash +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + echo "Downloading MRPC data" wget https://gist.githubusercontent.com/W4ngatang/60c2bdb54d156a41194446737ce03e2e/raw/17b8dd0d724281ed7c3b2aeeda662b92809aadd5/download_glue_data.py diff --git a/PyTorch/LanguageModeling/BERT/data/squad/squad_download.sh b/PyTorch/LanguageModeling/BERT/data/squad/squad_download.sh index 249778f5..7aa6f268 100755 --- a/PyTorch/LanguageModeling/BERT/data/squad/squad_download.sh +++ b/PyTorch/LanguageModeling/BERT/data/squad/squad_download.sh @@ -1,5 +1,18 @@ #!/usr/bin/env bash +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + echo "Downloading dataset for squad..." # Download SQuAD diff --git a/PyTorch/LanguageModeling/BERT/extract_features.py b/PyTorch/LanguageModeling/BERT/extract_features.py index c41d4517..e26cfe94 100755 --- a/PyTorch/LanguageModeling/BERT/extract_features.py +++ b/PyTorch/LanguageModeling/BERT/extract_features.py @@ -12,6 +12,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. + """Extract pre-computed feature vectors from a PyTorch BERT model.""" from __future__ import absolute_import diff --git a/PyTorch/LanguageModeling/BERT/file_utils.py b/PyTorch/LanguageModeling/BERT/file_utils.py index b475d450..cdefb125 100755 --- a/PyTorch/LanguageModeling/BERT/file_utils.py +++ b/PyTorch/LanguageModeling/BERT/file_utils.py @@ -1,8 +1,22 @@ +# Copyright 2018 The Google AI Language Team Authors and The HugginFace Inc. team. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + """ Utilities for working with the local dataset cache. This file is adapted from the AllenNLP library at https://github.com/allenai/allennlp Copyright by the AllenNLP authors. """ + from __future__ import (absolute_import, division, print_function, unicode_literals) import json diff --git a/PyTorch/LanguageModeling/BERT/modeling.py b/PyTorch/LanguageModeling/BERT/modeling.py index 8d644821..fa19fbdc 100755 --- a/PyTorch/LanguageModeling/BERT/modeling.py +++ b/PyTorch/LanguageModeling/BERT/modeling.py @@ -1,7 +1,6 @@ # coding=utf-8 +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. # Copyright 2018 The Google AI Language Team Authors and The HugginFace Inc. team. -# Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved. -# # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -13,6 +12,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. + """PyTorch BERT model.""" from __future__ import absolute_import, division, print_function, unicode_literals diff --git a/PyTorch/LanguageModeling/BERT/optimization.py b/PyTorch/LanguageModeling/BERT/optimization.py index cdbbba84..ac5b64f9 100755 --- a/PyTorch/LanguageModeling/BERT/optimization.py +++ b/PyTorch/LanguageModeling/BERT/optimization.py @@ -13,6 +13,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. + """PyTorch optimization for BERT model.""" import math @@ -24,6 +25,7 @@ from torch.nn.utils import clip_grad_norm_ from apex.optimizers import FusedAdam from apex.multi_tensor_apply import multi_tensor_applier import amp_C + multi_tensor_l2norm = amp_C.multi_tensor_l2norm lamb_compute_update = amp_C.multi_tensor_lamb_stage1_cuda lamb_apply_update = amp_C.multi_tensor_lamb_stage2_cuda diff --git a/PyTorch/LanguageModeling/BERT/run.sub b/PyTorch/LanguageModeling/BERT/run.sub new file mode 100644 index 00000000..dd5ad17a --- /dev/null +++ b/PyTorch/LanguageModeling/BERT/run.sub @@ -0,0 +1,74 @@ +#!/bin/bash +#SBATCH --exclusive +#SBATCH --mem=0 +#SBATCH --overcommit + +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -eux + +# The following variables variables need to be set +# Base container to be used +readonly docker_image="nvcr.io/nvidia/pytorch:19.08-py3" +# Location of dataset for phase 1 +readonly datadir="/raid/datasets/bert/hdf5/shard_1472_test_split_10/seq_128_pred_20_dupe_5/training" +# Location of dataset for phase 2 +readonly datadir_phase2="/raid/datasets/bert/hdf5/shard_1472_test_split_10/seq_512_pred_80_dupe_5/training" +# Path to where trained checkpoints will be saved on the system +readonly checkpointdir="$PWD/checkpoints" + +readonly mounts=".:/workspace/bert,${datadir}:/workspace/data,${datadir_phase2}:/workspace/data_phase2,${checkpointdir}:/results" + +srun --ntasks="${SLURM_JOB_NUM_NODES}" --ntasks-per-node=1 mkdir -p "${checkpointdir}" + +PHASE1="\ + --train_batch_size=${BATCHSIZE:-16} \ + --learning_rate=${LR:-6e-3} \ + --warmup_proportion=${WARMUP_UPDATES:-0.2843} \ + --input_dir=/workspace/data \ + --max_seq_length=128 \ + --max_predictions_per_seq=20 \ + --max_steps=7038 \ + --num_steps_per_checkpoint=2500 \ + " +PHASE2="\ + --train_batch_size=${BATCHSIZE:-4096} \ + --learning_rate=${LR:-4e-3} \ + --warmup_proportion=${WARMUP_UPDATES:-0.128} \ + --input_dir=/workspace/data_phase2 \ + --phase2 \ + --max_seq_length=512 \ + --max_predictions_per_seq=80 \ + --max_steps=1563 \ + --num_steps_per_checkpoint=1000 \ + --resume_from_checkpoint --phase1_end_step=7038 \ + " +PHASES=( "$PHASE1" "$PHASE2" ) + +PHASE=${PHASE:-1} + +BERT_CMD="\ + python -u /workspace/bert/run_pretraining.py \ + --seed=42 \ + ${PHASES[$((PHASE-1))]} \ + --do_train \ + --config_file=/workspace/bert/bert_config.json \ + --output_dir=/results \ + --fp16 \ + --allreduce_post_accumulation --allreduce_post_accumulation_fp16 \ + --gradient_accumulation_steps=${GRADIENT_STEPS:-2} \ + --log_freq=1 \ + --local_rank=\${SLURM_LOCALID}" + +srun -l --container-image="${docker_image}" --container-mounts="${mounts}" sh -c "${BERT_CMD}" diff --git a/PyTorch/LanguageModeling/BERT/run_glue.py b/PyTorch/LanguageModeling/BERT/run_glue.py index 7c33a4a3..b00ab587 100755 --- a/PyTorch/LanguageModeling/BERT/run_glue.py +++ b/PyTorch/LanguageModeling/BERT/run_glue.py @@ -1,7 +1,6 @@ # coding=utf-8 +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. # Copyright 2018 The Google AI Language Team Authors and The HugginFace Inc. team. -# Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved. -# # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -13,6 +12,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. + """BERT finetuning runner.""" from __future__ import absolute_import, division, print_function diff --git a/PyTorch/LanguageModeling/BERT/run_pretraining.py b/PyTorch/LanguageModeling/BERT/run_pretraining.py index 6a2c6806..0ddd2d4b 100755 --- a/PyTorch/LanguageModeling/BERT/run_pretraining.py +++ b/PyTorch/LanguageModeling/BERT/run_pretraining.py @@ -13,6 +13,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. + """BERT finetuning runner.""" from __future__ import absolute_import @@ -65,7 +66,6 @@ def create_pretraining_dataset(input_file, max_pred_length, shared_list, args): train_dataloader = DataLoader(train_data, sampler=train_sampler, batch_size=args.train_batch_size * args.n_gpu, num_workers=4, pin_memory=True) - # shared_list["0"] = (train_dataloader, input_file) return train_dataloader, input_file class pretraining_dataset(Dataset): @@ -179,7 +179,7 @@ def parse_arguments(): type=float, default=0.0, help='Loss scaling, positive power of 2 values can improve fp16 convergence.') parser.add_argument('--log_freq', - type=float, default=50.0, + type=float, default=1.0, help='frequency of logging loss.') parser.add_argument('--checkpoint_activations', default=False, @@ -253,7 +253,7 @@ def setup_training(args): raise ValueError(" `do_train` must be True.") if not args.resume_from_checkpoint and os.path.exists(args.output_dir) and ( - os.listdir(args.output_dir) and os.listdir(args.output_dir) != ['logfile.txt']): + os.listdir(args.output_dir) and any([i.startswith('ckpt') for i in os.listdir(args.output_dir)])): raise ValueError("Output directory ({}) already exists and is not empty.".format(args.output_dir)) if not args.resume_from_checkpoint: @@ -478,8 +478,7 @@ def main(): for f_id in range(f_start_id + 1 , len(files)): - # torch.cuda.synchronize() - # f_start = time.time() + if torch.distributed.get_world_size() > num_files: data_file = files[(f_id*torch.distributed.get_world_size()+torch.distributed.get_rank() + remainder*f_id)%num_files] else: @@ -489,23 +488,10 @@ def main(): previous_file = data_file - # train_dataloader = shared_file_list["0"][0] - - # thread = multiprocessing.Process( - # name="LOAD DATA:" + str(f_id) + ":" + str(data_file), - # target=create_pretraining_dataset, - # args=(data_file, args.max_predictions_per_seq, shared_file_list, args, n_gpu) - # ) - # thread.start() dataset_future = pool.submit(create_pretraining_dataset, data_file, args.max_predictions_per_seq, shared_file_list, args) - # torch.cuda.synchronize() - # f_end = time.time() - # print('[{}] : shard overhead {}'.format(torch.distributed.get_rank(), f_end - f_start)) train_iter = tqdm(train_dataloader, desc="Iteration") if is_main_process() else train_dataloader for step, batch in enumerate(train_iter): - # torch.cuda.synchronize() - # iter_start = time.time() training_steps += 1 batch = [t.to(device) for t in batch] @@ -533,7 +519,7 @@ def main(): global_step = take_optimizer_step(args, optimizer, model, overflow_buf, global_step) if global_step >= args.max_steps: - last_num_steps = global_step % args.log_freq + last_num_steps = int(training_steps / args.gradient_accumulation_steps) % args.log_freq last_num_steps = args.log_freq if last_num_steps == 0 else last_num_steps average_loss = torch.tensor(average_loss, dtype=torch.float32).cuda() average_loss = average_loss / (last_num_steps * divisor) @@ -578,13 +564,6 @@ def main(): # thread.join() return args - - # torch.cuda.synchronize() - # iter_end = time.time() - - # if torch.distributed.get_rank() == 0: - # print('step {} : {}'.format(global_step, iter_end - iter_start)) - del train_dataloader # thread.join() # Make sure pool has finished and switch train_dataloader diff --git a/PyTorch/LanguageModeling/BERT/run_pretraining_inference.py b/PyTorch/LanguageModeling/BERT/run_pretraining_inference.py index 678e7f66..b776ce34 100755 --- a/PyTorch/LanguageModeling/BERT/run_pretraining_inference.py +++ b/PyTorch/LanguageModeling/BERT/run_pretraining_inference.py @@ -12,6 +12,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. + """BERT finetuning runner.""" from __future__ import absolute_import diff --git a/PyTorch/LanguageModeling/BERT/run_squad.py b/PyTorch/LanguageModeling/BERT/run_squad.py index 8f3ba8b4..f78fbd6c 100755 --- a/PyTorch/LanguageModeling/BERT/run_squad.py +++ b/PyTorch/LanguageModeling/BERT/run_squad.py @@ -1,7 +1,6 @@ # coding=utf-8 +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. # Copyright 2018 The Google AI Language Team Authors and The HugginFace Inc. team. -# Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved. -# # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -13,6 +12,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. + """Run BERT on SQuAD.""" from __future__ import absolute_import, division, print_function @@ -40,6 +40,7 @@ from file_utils import PYTORCH_PRETRAINED_BERT_CACHE from modeling import BertForQuestionAnswering, BertConfig, WEIGHTS_NAME, CONFIG_NAME from optimization import BertAdam, warmup_linear from tokenization import (BasicTokenizer, BertTokenizer, whitespace_tokenize) +from utils import is_main_process if sys.version_info[0] == 2: import cPickle as pickle @@ -923,9 +924,11 @@ def main(): model = BertForQuestionAnswering(config) # model = BertForQuestionAnswering.from_pretrained(args.bert_model, # cache_dir=os.path.join(str(PYTORCH_PRETRAINED_BERT_CACHE), 'distributed_{}'.format(args.local_rank))) - print("USING CHECKOINT") + if is_main_process(): + print("LOADING CHECKOINT") model.load_state_dict(torch.load(args.init_checkpoint, map_location='cpu')["model"], strict=False) - print("USED CHECKPOINT \n\n") + if is_main_process(): + print("LOADED CHECKPOINT") model.to(device) if args.fp16 and args.old: model.half() diff --git a/PyTorch/LanguageModeling/BERT/run_swag.py b/PyTorch/LanguageModeling/BERT/run_swag.py index cb8ea149..ebc608f6 100755 --- a/PyTorch/LanguageModeling/BERT/run_swag.py +++ b/PyTorch/LanguageModeling/BERT/run_swag.py @@ -1,7 +1,6 @@ # coding=utf-8 +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. # Copyright 2018 The Google AI Language Team Authors and The HugginFace Inc. team. -# Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved. -# # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -13,6 +12,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. + """BERT finetuning runner.""" import argparse diff --git a/PyTorch/LanguageModeling/BERT/schedulers.py b/PyTorch/LanguageModeling/BERT/schedulers.py index 0333bbd1..2cf38841 100755 --- a/PyTorch/LanguageModeling/BERT/schedulers.py +++ b/PyTorch/LanguageModeling/BERT/schedulers.py @@ -1,3 +1,17 @@ +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Copyright 2018 The Google AI Language Team Authors and The HugginFace Inc. team. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + import math import torch from torch.optim.optimizer import Optimizer diff --git a/PyTorch/LanguageModeling/BERT/scripts/data_download.sh b/PyTorch/LanguageModeling/BERT/scripts/data_download.sh index 36ad14e4..a66727e5 100755 --- a/PyTorch/LanguageModeling/BERT/scripts/data_download.sh +++ b/PyTorch/LanguageModeling/BERT/scripts/data_download.sh @@ -1,4 +1,18 @@ #!/usr/bin/env bash + +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + DATA_DIR=${1:-/workspace/bert/data} # Download vocab files from pretrained model diff --git a/PyTorch/LanguageModeling/BERT/scripts/run_glue.sh b/PyTorch/LanguageModeling/BERT/scripts/run_glue.sh index 5fe89e05..8a9a11c8 100755 --- a/PyTorch/LanguageModeling/BERT/scripts/run_glue.sh +++ b/PyTorch/LanguageModeling/BERT/scripts/run_glue.sh @@ -1,5 +1,18 @@ #!/bin/bash +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + MRPC_DIR=/workspace/bert/data/glue/MRPC OUT_DIR=/results/MRPC @@ -55,7 +68,8 @@ CMD+="$use_fp16" LOGFILE=$OUT_DIR/logfile $CMD |& tee $LOGFILE -sed -r 's/ |(\[A)/\n/g' $LOGFILE > $LOGFILE.edit +sed -r 's/ +|(\[A)/\n/g' $LOGFILE > $LOGFILE.edit throughput=`cat $LOGFILE.edit | grep -E 'Iteration.*[0-9.]+(s/it|it/s)' | tail -1 | egrep -o '[0-9.]+(s/it|it/s)'` diff --git a/PyTorch/LanguageModeling/BERT/scripts/run_pretraining.sh b/PyTorch/LanguageModeling/BERT/scripts/run_pretraining.sh index 4d15ded6..5502e99b 100644 --- a/PyTorch/LanguageModeling/BERT/scripts/run_pretraining.sh +++ b/PyTorch/LanguageModeling/BERT/scripts/run_pretraining.sh @@ -1,5 +1,18 @@ #!/bin/bash +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + echo "Container nvidia build = " $NVIDIA_BUILD_ID train_batch_size=${1:-8192} learning_rate=${2:-"6e-3"} diff --git a/PyTorch/LanguageModeling/BERT/scripts/run_pretraining_inference.sh b/PyTorch/LanguageModeling/BERT/scripts/run_pretraining_inference.sh index 7e98c756..6eee728e 100644 --- a/PyTorch/LanguageModeling/BERT/scripts/run_pretraining_inference.sh +++ b/PyTorch/LanguageModeling/BERT/scripts/run_pretraining_inference.sh @@ -1,5 +1,18 @@ #!/bin/bash +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + echo "Container nvidia build = " $NVIDIA_BUILD_ID DATASET=wikipedia_corpus # change this for other datasets diff --git a/PyTorch/LanguageModeling/BERT/scripts/run_squad.sh b/PyTorch/LanguageModeling/BERT/scripts/run_squad.sh index 8a99d7d7..3e71d553 100755 --- a/PyTorch/LanguageModeling/BERT/scripts/run_squad.sh +++ b/PyTorch/LanguageModeling/BERT/scripts/run_squad.sh @@ -1,7 +1,19 @@ #!/usr/bin/env bash -#OUT_DIR=/results/SQuAD +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#OUT_DIR=/results/SQuAD echo "Container nvidia build = " $NVIDIA_BUILD_ID diff --git a/PyTorch/LanguageModeling/BERT/scripts/run_swag.sh b/PyTorch/LanguageModeling/BERT/scripts/run_swag.sh index 8a854bb1..377834ee 100755 --- a/PyTorch/LanguageModeling/BERT/scripts/run_swag.sh +++ b/PyTorch/LanguageModeling/BERT/scripts/run_swag.sh @@ -1,5 +1,18 @@ #!/bin/bash +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + SWAG_DIR=/workspace/bert/data/swag OUT_DIR=/results/SWAG @@ -54,7 +67,8 @@ CMD+="$use_fp16" LOGFILE=$OUT_DIR/logfile $CMD |& tee $LOGFILE -sed -r 's/ |(\[A)/\n/g' $LOGFILE > $LOGFILE.edit +sed -r 's/ +|(\[A)/\n/g' $LOGFILE > $LOGFILE.edit throughput=`cat $LOGFILE.edit | grep -E 'Iteration.*[0-9.]+(s/it|it/s)' | tail -1 | egrep -o '[0-9.]+(s/it|it/s)'` diff --git a/PyTorch/LanguageModeling/BERT/scripts/start_pretraining.sh b/PyTorch/LanguageModeling/BERT/scripts/start_pretraining.sh index a3155bfe..6ddc2985 100644 --- a/PyTorch/LanguageModeling/BERT/scripts/start_pretraining.sh +++ b/PyTorch/LanguageModeling/BERT/scripts/start_pretraining.sh @@ -1,4 +1,18 @@ #!/bin/bash + +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + # purpose: for multinode training on slurm clusters node_type=${1:-"dgx1"} num_nodes=${2:-1} diff --git a/PyTorch/LanguageModeling/BERT/tokenization.py b/PyTorch/LanguageModeling/BERT/tokenization.py index 5f364385..c25c323e 100755 --- a/PyTorch/LanguageModeling/BERT/tokenization.py +++ b/PyTorch/LanguageModeling/BERT/tokenization.py @@ -1,6 +1,6 @@ # coding=utf-8 +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. # Copyright 2018 The Google AI Language Team Authors and The HugginFace Inc. team. -# # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -12,6 +12,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. + """Tokenization classes.""" from __future__ import absolute_import, division, print_function, unicode_literals diff --git a/PyTorch/LanguageModeling/BERT/utils.py b/PyTorch/LanguageModeling/BERT/utils.py index 4fae2889..4f8e0d86 100755 --- a/PyTorch/LanguageModeling/BERT/utils.py +++ b/PyTorch/LanguageModeling/BERT/utils.py @@ -1,3 +1,16 @@ +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + import torch import torch.distributed as dist From fd852b56a0e5c2b605368211c39a4d177536257d Mon Sep 17 00:00:00 2001 From: xjia Date: Wed, 11 Sep 2019 07:09:53 +0000 Subject: [PATCH 03/44] fix softmax max_value --- FasterTransformer/fastertransformer/cuda/open_attention.cu | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/FasterTransformer/fastertransformer/cuda/open_attention.cu b/FasterTransformer/fastertransformer/cuda/open_attention.cu index dce4b228..5ee8ec47 100644 --- a/FasterTransformer/fastertransformer/cuda/open_attention.cu +++ b/FasterTransformer/fastertransformer/cuda/open_attention.cu @@ -204,7 +204,7 @@ void softmax_kernel(T* qk_buf_, const T* attr_mask, const int batch_size, const mask_val = (1.0f - mask_val) * -10000.0f; - float tmp = threadIdx.x < seq_len ? (float)(qk * (float)scaler + mask_val): -1e-20f; + float tmp = threadIdx.x < seq_len ? (float)(qk * (float)scaler + mask_val): -1e20f; float max_val = blockReduceMax(tmp); @@ -248,7 +248,7 @@ void softmax_kernel_v2(T* qk_buf_, const T* attr_mask, const int batch_size, con mask_val = (1.0f - mask_val) * -10000.0f; - float tmp = threadIdx.x < seq_len ? (float)(qk * (float)scaler + mask_val) : -1e-20f; + float tmp = threadIdx.x < seq_len ? (float)(qk * (float)scaler + mask_val) : -1e20f; float max_val = blockReduceMax(tmp); if(threadIdx.x == 0) s_max = max_val; From 392d6bee1c01f8ec726964106f073f80fa8f1c00 Mon Sep 17 00:00:00 2001 From: xjia Date: Wed, 11 Sep 2019 07:32:50 +0000 Subject: [PATCH 04/44] refine softmax/diff --- FasterTransformer/fastertransformer/cuda/open_attention.cu | 2 +- FasterTransformer/sample/tensorflow/transformer_fp16.py | 2 +- FasterTransformer/sample/tensorflow/transformer_fp32.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/FasterTransformer/fastertransformer/cuda/open_attention.cu b/FasterTransformer/fastertransformer/cuda/open_attention.cu index 5ee8ec47..5de24922 100644 --- a/FasterTransformer/fastertransformer/cuda/open_attention.cu +++ b/FasterTransformer/fastertransformer/cuda/open_attention.cu @@ -88,7 +88,7 @@ T blockReduceMax(T val) __syncthreads(); - val = (threadIdx.x < (blockDim.x >> 5 )) ? shared[lane] : 0; + val = (threadIdx.x < (blockDim.x >> 5 )) ? shared[lane] : -1e20f; val = warpReduceMax(val); return val; diff --git a/FasterTransformer/sample/tensorflow/transformer_fp16.py b/FasterTransformer/sample/tensorflow/transformer_fp16.py index 6d3dbaf4..fd561d5c 100644 --- a/FasterTransformer/sample/tensorflow/transformer_fp16.py +++ b/FasterTransformer/sample/tensorflow/transformer_fp16.py @@ -363,7 +363,7 @@ with tf.Session(config=config) as sess: print("#################################") np_val1 = sess.run(output) np_val2 = sess.run(output_own) - print("cross_check " + str(np.allclose(np_val1, np_val2, atol = 1e-5))) + print("cross_check " + str(np.allclose(np_val1, np_val2, atol = 1e-1))) print("max diff " + str(np.fabs(np_val1 - np_val2).max())) print("min diff " + str(np.fabs(np_val1 - np_val2).min())) print np_val1 diff --git a/FasterTransformer/sample/tensorflow/transformer_fp32.py b/FasterTransformer/sample/tensorflow/transformer_fp32.py index 1d01567d..1dd10d69 100644 --- a/FasterTransformer/sample/tensorflow/transformer_fp32.py +++ b/FasterTransformer/sample/tensorflow/transformer_fp32.py @@ -361,7 +361,7 @@ with tf.Session(config=config) as sess: print("#################################") np_val1 = sess.run(output) np_val2 = sess.run(output_own) - print("cross_check " + str(np.allclose(np_val1, np_val2, atol = 1e-5))) + print("cross_check " + str(np.allclose(np_val1, np_val2, atol = 1e-4))) print("max diff " + str(np.fabs(np_val1 - np_val2).max())) print("min diff " + str(np.fabs(np_val1 - np_val2).min())) From 4cce4d88e61c916ecd4cc1755d805b1b5323ff12 Mon Sep 17 00:00:00 2001 From: Przemek Strzelczyk <41076710+nvpstr@users.noreply.github.com> Date: Thu, 12 Sep 2019 14:33:49 +0200 Subject: [PATCH 05/44] Updating SSD/PyT --- .../fastertransformer/cuda/open_attention.cu | 6 +- .../sample/tensorflow/transformer_fp16.py | 2 +- .../sample/tensorflow/transformer_fp32.py | 2 +- PyTorch/Detection/SSD/.gitignore | 1 + PyTorch/Detection/SSD/Dockerfile | 4 +- PyTorch/Detection/SSD/README.md | 66 +++++++++++------- .../SSD/examples/SSD300_inference.py | 1 - .../Detection/SSD/examples/inference.ipynb | 14 ++-- PyTorch/Detection/SSD/main.py | 3 +- PyTorch/Detection/SSD/src/coco_pipeline.py | 8 +-- .../ssd/__pycache__/argparse.cpython-36.pyc | Bin 2001 -> 0 bytes 11 files changed, 59 insertions(+), 48 deletions(-) create mode 100644 PyTorch/Detection/SSD/.gitignore delete mode 100644 PyTorch/Detection/SSD/ssd/__pycache__/argparse.cpython-36.pyc diff --git a/FasterTransformer/fastertransformer/cuda/open_attention.cu b/FasterTransformer/fastertransformer/cuda/open_attention.cu index dce4b228..5de24922 100644 --- a/FasterTransformer/fastertransformer/cuda/open_attention.cu +++ b/FasterTransformer/fastertransformer/cuda/open_attention.cu @@ -88,7 +88,7 @@ T blockReduceMax(T val) __syncthreads(); - val = (threadIdx.x < (blockDim.x >> 5 )) ? shared[lane] : 0; + val = (threadIdx.x < (blockDim.x >> 5 )) ? shared[lane] : -1e20f; val = warpReduceMax(val); return val; @@ -204,7 +204,7 @@ void softmax_kernel(T* qk_buf_, const T* attr_mask, const int batch_size, const mask_val = (1.0f - mask_val) * -10000.0f; - float tmp = threadIdx.x < seq_len ? (float)(qk * (float)scaler + mask_val): -1e-20f; + float tmp = threadIdx.x < seq_len ? (float)(qk * (float)scaler + mask_val): -1e20f; float max_val = blockReduceMax(tmp); @@ -248,7 +248,7 @@ void softmax_kernel_v2(T* qk_buf_, const T* attr_mask, const int batch_size, con mask_val = (1.0f - mask_val) * -10000.0f; - float tmp = threadIdx.x < seq_len ? (float)(qk * (float)scaler + mask_val) : -1e-20f; + float tmp = threadIdx.x < seq_len ? (float)(qk * (float)scaler + mask_val) : -1e20f; float max_val = blockReduceMax(tmp); if(threadIdx.x == 0) s_max = max_val; diff --git a/FasterTransformer/sample/tensorflow/transformer_fp16.py b/FasterTransformer/sample/tensorflow/transformer_fp16.py index 6d3dbaf4..fd561d5c 100644 --- a/FasterTransformer/sample/tensorflow/transformer_fp16.py +++ b/FasterTransformer/sample/tensorflow/transformer_fp16.py @@ -363,7 +363,7 @@ with tf.Session(config=config) as sess: print("#################################") np_val1 = sess.run(output) np_val2 = sess.run(output_own) - print("cross_check " + str(np.allclose(np_val1, np_val2, atol = 1e-5))) + print("cross_check " + str(np.allclose(np_val1, np_val2, atol = 1e-1))) print("max diff " + str(np.fabs(np_val1 - np_val2).max())) print("min diff " + str(np.fabs(np_val1 - np_val2).min())) print np_val1 diff --git a/FasterTransformer/sample/tensorflow/transformer_fp32.py b/FasterTransformer/sample/tensorflow/transformer_fp32.py index 1d01567d..1dd10d69 100644 --- a/FasterTransformer/sample/tensorflow/transformer_fp32.py +++ b/FasterTransformer/sample/tensorflow/transformer_fp32.py @@ -361,7 +361,7 @@ with tf.Session(config=config) as sess: print("#################################") np_val1 = sess.run(output) np_val2 = sess.run(output_own) - print("cross_check " + str(np.allclose(np_val1, np_val2, atol = 1e-5))) + print("cross_check " + str(np.allclose(np_val1, np_val2, atol = 1e-4))) print("max diff " + str(np.fabs(np_val1 - np_val2).max())) print("min diff " + str(np.fabs(np_val1 - np_val2).min())) diff --git a/PyTorch/Detection/SSD/.gitignore b/PyTorch/Detection/SSD/.gitignore new file mode 100644 index 00000000..eeb8a6ec --- /dev/null +++ b/PyTorch/Detection/SSD/.gitignore @@ -0,0 +1 @@ +**/__pycache__ diff --git a/PyTorch/Detection/SSD/Dockerfile b/PyTorch/Detection/SSD/Dockerfile index 32328c62..9e795b60 100755 --- a/PyTorch/Detection/SSD/Dockerfile +++ b/PyTorch/Detection/SSD/Dockerfile @@ -1,11 +1,11 @@ -FROM nvcr.io/nvidia/pytorch:19.05-py3 +FROM nvcr.io/nvidia/pytorch:19.08-py3 # Set working directory WORKDIR /workspace ENV PYTHONPATH "${PYTHONPATH}:/workspace" -RUN apt-get update && apt-get install -y python3-tk python-pip git tmux htop tree +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y python3-tk python-pip git tmux htop tree # Necessary pip packages RUN pip install --upgrade pip diff --git a/PyTorch/Detection/SSD/README.md b/PyTorch/Detection/SSD/README.md index d7457809..1ce01bdc 100644 --- a/PyTorch/Detection/SSD/README.md +++ b/PyTorch/Detection/SSD/README.md @@ -242,11 +242,11 @@ The following section lists the requirements in order to start training the SSD3 ### Requirements -This repository contains `Dockerfile` which extends the PyTorch 19.06 NGC container +This repository contains `Dockerfile` which extends the PyTorch 19.08 NGC container and encapsulates some dependencies. Aside from these dependencies, ensure you have the following software: * [NVIDIA Docker](https://github.com/NVIDIA/nvidia-docker) -* [PyTorch 19.06-py3+ NGC container](https://ngc.nvidia.com/registry/nvidia-pytorch) +* [PyTorch 19.08-py3+ NGC container](https://ngc.nvidia.com/registry/nvidia-pytorch) * [NVIDIA Volta](https://www.nvidia.com/en-us/data-center/volta-gpu-architecture/) or [Turing](https://www.nvidia.com/en-us/geforce/turing/) based GPU For more information about how to get started with NGC containers, see the @@ -256,7 +256,7 @@ Documentation: * [Accessing And Pulling From The NGC Container Registry](https://docs.nvidia.com/deeplearning/dgx/user-guide/index.html#accessing_registry) * [Running PyTorch](https://docs.nvidia.com/deeplearning/dgx/pytorch-release-notes/running.html#running) -For those unable to use the [PyTorch 19.06-py3 NGC container](https://ngc.nvidia.com/registry/nvidia-pytorch), +For those unable to use the [PyTorch 19.08-py3 NGC container](https://ngc.nvidia.com/registry/nvidia-pytorch), to set up the required environment or create your own container, see the versioned [NVIDIA Container Support Matrix](https://docs.nvidia.com/deeplearning/frameworks/support-matrix/index.html). @@ -537,9 +537,9 @@ The flag `--save` flag enables storing checkpoints after each epoch under `./mod Our scripts for SSD300 v1.1 presents two ways to run inference. To get meaningful results, you need a pre-trained model checkpoint. -One way is to run an interactive session on Jupyter notebook, as described in a [Quick Start Guide](#8-start-inferencepredictions). +One way is to run an interactive session on Jupyter notebook, as described in a 8th step of the [Quick Start Guide](#quick-start-guide). -Another way is to run a script `src/SSD300_inference.py`. It contains the logic from the notebook, wrapped into a Python script. The script contains sample usage. +Another way is to run a script `examples/SSD300_inference.py`. It contains the logic from the notebook, wrapped into a Python script. The script contains sample usage. To use the inference example script in your own code, you can call the `main` function, providing input image URIs as an argument. The result will be a list of detections for each input image. @@ -597,16 +597,18 @@ The following sections provide details on how we achieved our performance and ac ##### NVIDIA DGX-1 (8x V100 16G) Our results were obtained by running the `./examples/SSD300_FP{16,32}_{1,4,8}GPU.sh` -script in the `pytorch-19.06-py3` NGC container on NVIDIA DGX-1 with 8x +script in the `pytorch-19.08-py3` NGC container on NVIDIA DGX-1 with 8x V100 16G GPUs. Performance numbers (in items/images per second) were averaged over an entire training epoch. -| **Number of GPUs** | **Mixed precision mAP** | **Training time with mixed precision** | **FP32 mAP** | **Training time with FP32** | -|:------------------:|:------------------------:|:-------------------------------------:|:------------:|:---------------------------:| -| 1 | 0.2494 | 10h 39min | 0.2483 | 21h 40min | -| 4 | 0.2495 | 2h 53min | 0.2478 | 5h 52min | -| 8 | 0.2489 | 1h 31min | 0.2475 | 2h 54min | - +|GPUs |Batch size / GPU|Accuracy - FP32|Accuracy - mixed precision|Time to train - FP32|Time to train - mixed precision|Time to train speedup (FP32 to mixed precision)| +|-----------|----------------|---------------|---------------------------|--------------------|--------------------------------|------------------------------------------------| +|1 |32 |0.250 |0.250 |20:20:13 |10:23:46 |195.62% | +|4 |32 |0.249 |0.250 |5:11:17 |2:39:28 |195.20% | +|8 |32 |0.250 |0.250 |2:37:35 |1:25:38 |184.01% | +|1 |64 | |0.252 | |9:27:33 |215.00% | +|4 |64 | |0.251 | |2:24:43 |215.10% | +|8 |64 | |0.252 | |1:13:01 |215.85% | Here are example graphs of FP32 and FP16 training on 8 GPU configuration: @@ -620,15 +622,18 @@ Here are example graphs of FP32 and FP16 training on 8 GPU configuration: ##### NVIDIA DGX-1 (8x V100 16G) Our results were obtained by running the `main.py` script with the `--mode -benchmark-training` flag in the `pytorch-19.06-py3` NGC container on NVIDIA +benchmark-training` flag in the `pytorch-19.08-py3` NGC container on NVIDIA DGX-1 with 8x V100 16G GPUs. Performance numbers (in items/images per second) were averaged over an entire training epoch. -| **Number of GPUs** | **Batch size per GPU** | **Mixed precision img/s (median)** | **FP32 img/s (median)** | **Speed-up with mixed precision** | **Multi-gpu weak scaling with mixed precision** | **Multi-gpu weak scaling with FP32** | -|:------------------:|:----------------------:|:----------------------------------:|:-----------------------:|:---------------------------------:|:-----------------------------------------------:|:------------------------------------:| -| 1 | 32 | 217.052 | 102.495 | 2.12 | 1.00 | 1.00 | -| 4 | 32 | 838.457 | 397.797 | 2.11 | 3.86 | 3.88 | -| 8 | 32 | 1639.843 | 789.695 | 2.08 | 7.56 | 7.70 | +|GPUs |Batch size / GPU|Throughput - FP32|Throughput - mixed precision|Throughput speedup (FP32 - mixed precision)|Weak scaling - FP32 |Weak scaling - mixed precision | +|-----------|----------------|-----------------|-----------------------------|-------------------------------------------|--------------------------------|------------------------------------------------| +|1 |32 |133.67 |215.30 |161.07% |100.00% |100.00% | +|4 |32 |532.05 |828.63 |155.74% |398.04% |384.88% | +|8 |32 |1,060.33 |1,647.74 |155.40% |793.27% |765.33% | +|1 |64 | |232.22 |173.73% | |100.00% | +|4 |64 | |910.77 |171.18% | |392.20% | +|8 |64 | |1,769.48 |166.88% | |761.99% | To achieve these same results, follow the [Quick Start Guide](#quick-start-guide) outlined above. @@ -638,16 +643,16 @@ To achieve these same results, follow the [Quick Start Guide](#quick-start-guide ##### NVIDIA DGX-1 (1x V100 16G) Our results were obtained by running the `main.py` script with `--mode -benchmark-inference` flag in the pytorch-19.06-py3 NGC container on NVIDIA +benchmark-inference` flag in the pytorch-19.08-py3 NGC container on NVIDIA DGX-1 with (1x V100 16G) GPUs. -| **Batch size** | **Mixed precision img/s (median)** | **FP32 img/s (median)** | -|:--------------:|:----------------------------------:|:-----------------------:| -| 2 | 163.12 | 147.91 | -| 4 | 296.60 | 201.62 | -| 8 | 412.52 | 228.16 | -| 16 | 470.10 | 280.57 | -| 32 | 520.54 | 302.43 | +|Batch size |Throughput - FP32|Throughput - mixed precision|Throughput speedup (FP32 - mixed precision)|Weak scaling - FP32 |Weak scaling - mixed precision | +|-----------|-----------------|-----------------------------|-------------------------------------------|--------------------|--------------------------------| +|2 |148.99 |186.60 |125.24% |100.00% |100.00% | +|4 |203.35 |326.69 |160.66% |136.48% |175.08% | +|8 |227.32 |433.45 |190.68% |152.57% |232.29% | +|16 |278.02 |493.19 |177.39% |186.60% |264.31% | +|32 |299.81 |545.84 |182.06% |201.23% |292.53% | To achieve these same results, follow the [Quick Start Guide](#quick-start-guide) outlined above. @@ -655,6 +660,13 @@ To achieve these same results, follow the [Quick Start Guide](#quick-start-guide ### Changelog +August 2019 + * upgrade the PyTorch container to 19.08 + * update Results section in the README + * code updated to use DALI 0.12.0 + * checkpoint loading fix + * fixed links in the README + July 2019 * script and notebook for inference * use AMP instead of hand-crafted FP16 support @@ -666,7 +678,7 @@ July 2019 March 2019 * Initial release -### Known issues +## Known issues There are no known issues with this model. diff --git a/PyTorch/Detection/SSD/examples/SSD300_inference.py b/PyTorch/Detection/SSD/examples/SSD300_inference.py index b6f7a536..e133178b 100644 --- a/PyTorch/Detection/SSD/examples/SSD300_inference.py +++ b/PyTorch/Detection/SSD/examples/SSD300_inference.py @@ -10,7 +10,6 @@ from src.utils import dboxes300_coco, Encoder def load_checkpoint(model, model_file): cp = torch.load(model_file)['model'] - cp = { k.replace('module.1.', ''): cp[k] for k in cp } model.load_state_dict(cp) diff --git a/PyTorch/Detection/SSD/examples/inference.ipynb b/PyTorch/Detection/SSD/examples/inference.ipynb index d0278a16..efdb5da8 100644 --- a/PyTorch/Detection/SSD/examples/inference.ipynb +++ b/PyTorch/Detection/SSD/examples/inference.ipynb @@ -74,7 +74,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 3, @@ -83,7 +83,7 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -139,7 +139,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 5, @@ -148,7 +148,7 @@ }, { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQsAAAD8CAYAAABgtYFHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzsvXmUXGd95/157lZ7V/Xe6ta+WbZkC2PZBrzghcVOCDgECIQ5YbIxyTCTvG/ykuTknZzMOxkyZDJkGLJNnEwSkhACZAGHAIYYHLDBG7Zs2ZItWfvW+1rr3Z73j9+9qupWb1JXSy2rv+f0qepbz13q1n1+z2/9/pTWmlWsYhWrWAjG5b6AVaxiFVcGVoXFKlaxikVhVVisYhWrWBRWhcUqVrGKRWFVWKxiFatYFFaFxSpWsYpFYdmEhVLqPqXUK0qpV5VSv7pc51nFKlZxaaCWI89CKWUCB4G3AqeAp4EPaK33N/1kq1jFKi4JlkuzuAV4VWt9RGvtAn8LvGuZzrWKVaziEsBapuP2AScb/j8F3DrXYKXUahrpKlCAiaxgGnk4DQvCEDI5m2rJQwcQaBkX7xNG4+PX+LMa9QfcjV6t6K8WjY3hRPub0XajYT+7YawfvY+vL34fzvJ9OhUoJdertIwJomMrYBTotmSjkwDXAzsJOpATp9pgcgQMJZ8rQ8YqwMlblAZ9hjW0J+FMdf57awMeDGutO+cfOTeWS1gsCKXUh4EPX67zXy34wT09/PMz/Zf7MhYFjUzGGD7Q7sN6IF/0qAYwCeQM8ICWECZTYFTk/7QCV8uEzACngaMzzuED1wCDwK1vXc/Av5ygqOFaYMM6SHaBF028wIZKFbSCjA2GAZNFcH2oaXADsHwYn4CwAkY7PDxSP9eQhnYNt3fCG3Jw5iyMVyCbh2wrDB+DjX1QOg533AtbbkgxdKCC70HChJMaCib4CmwFyoRaDZQFlvL51N/DV5kuKHYBu3fDZ56HD0T/7wJ+C3gSji/l91kuM+Q0sK7h/7XRtnPQWj+otd6jtd6zTNewCrisgqI3s7T9NTAMvES0sgK5AiTTUEjKqp+uQQpII4LCBhJAFSjOcdwkcDvgfeME1xfgrj7o2w2pXggUKAdCO5qYGpxolvgupBxwLMiYEPrg1sAxoZgCbxxeH50/xgjwpSFQOWjJiBDLGJAMIZsCy4OsBRNFGJuoMGbBRAqKGtpzYGXkerQpwgpbrt/14BCwc8Z3e+t98P5372An0AVcU4DcZigs7acAlk9YPA1sU0ptUko5wPuBhxbaqQ+4aB1pFSsOZ0qzb08DNwJvAu4AFlotasBLZSAPOQesIpR9yBYg2wOJnrp5ESKCIo1MzNlgIBrKbW8GuxVqBuRrUCtC6IJfBiKtwQJ0CPjyWvLFVDATotkkkqCTkHHANiCXgF0OvENNP+fx09CxViZ6zhftwDPlu7kZwAG3BB2eXIuVgpIJ2gMVQMWEKVMEZjUFmSS8GdGoGnF6HA5OnGIIOAG0dMHWdtiywD1eDJYlGgKglPoB4JOIGfhnWuuPzTN21WdxFcABbgLsBFR9qET2d2x6hIiWYEbvn53nWO+8J4/9/ATVEhghlFwoAR07oP9lMUVe4vzJBLIa9wF7boBiGaoeGDY4tpgchiGvoSeaBYCpQGsxP7QWrUeF4AfiU9FAEIiZ4vvgujBpQdKHZz2Yis798ddDYliOe3YEsl3gjMO2N0BvJ0xNitkRGOCbYBpyDidynCQCIADfkmNUD8C7Xqx/t4056K7Ck55oE7/fA7d0wvEOeOu3+P5SNPll81lorb8CfGW5jr+KKwt9wO19UK3B6TFIatEADOoOv9jJWI3+f1ML+JNiv56ecbyHvjkBwI02bHCg6oqgOfQy7MjByNTsggJkYlcRsyWe9DVPzm0nxamqFISBjFcaLC0XFfgiLFTkhTWNyMmqRVso5GSM5wHjUHZglw3fK8ux/tez8B9vhdZJcKYgl4eJsyJo8CKHaVh3moYBWGb0OaBsqCTELMkE0NY1/bsdm4Jj0ftxIGwFuxectkX+UPNgNYNzFZcEQ0AqJyuzYUFNySSLoxcBMjksIK+goKBalMm7wRGNZKZ9DvCcB18sgZuCdEpMj1emzndsNsJGBEsQaQ2GETlXw7rgMrRoE6YhnwcmeBrM2HcQzWYdyHsFWIZoAGkHWtPQ0QE9CuwQ7nXEFDgL/NqT4HVAWxLSCTmXViLctIoiJ4FoTGEI2uecGVTzIRFCWkM6DS8cnP++/+cDcGRYfDBLxWWLhqzi6oKLRA+KFTB8Ua0NxGY3Ea0CwLbBycikyFoQ1GTVth1QHtxoyARybNjr1rWHZyrTz9c+z7XEYdNQy/7VEAhFG6gosGwJV2pk4sbhzzASEAr5PIwki0K+ixWKCWEpESrtljg2e0IZsLUEO8qQmoCf/w78TA7Wj0MFMKJIR9WPtBpf7pehwLXk1dZismVCKNXg69+FxAz/dSL6fiBRhZ9Ow8YW+LOXL/AHmwWvGc1iz55VubfSMTYoYckgkFVKIat8lD6Aj3j5vQoYHgTVyD9gyqqvHBEUhoaKC9sRbWMP0DvjXCPMDQ8oI5MPLccMQlnJiQWDEt+DH6n/BkxLzDAMMUVMFWkjoWxzDDBt+UsoyIaQNiFpQqEFdnRCWy/8mxb4kyn4p4Oy3fLl3CoBngEVo54vYvlyrVNaTCc/gI9/Dm5OwZcaYs0fRRyoMX4GeOB2WH89DD+1yB9pHiybg/OCLmLVwXlV4N4UTEU5ET5iCsD0JCgDWbHDyB/gh2BZIiAMLYIm1iZqjfs0HDMAziCmz2zYAOxOQ083eL78hZEpYdqiWegw8lVYYFoyxoiSrGLppiLfhWVGvgYtYy3kgkwlmhKeHEeHokEZ0UWHpgjLfc/B298Da9avZ/zlExhKjulHWoZvyLhAwV88BO/eBXYefulx+Engga2QfCNc88NQ/hyodrC3Q/oawIZxBxI+ZO9ZoQ7Oy40cdQ/0KlYGlKovzrE2oWb8BchKHxp1n4EdpUeaChIJUH7kN4jGB8jKTiBaSNWEgisTc6Zj9Nw+ZREQvi/+gXMRBzhnWgSIACCQc4pjIsow1dHEj4SCjjSNIIrwaBXtE11XqMF0IGhwnhZCCYluvx7MKRjadwKVhFQ0RgdyXB/RGFIa3tIDXX1w9mE49AFI3w/eelA7RftouRHCApgheKNyDVkf3PlUrUXiNSEsCojntxGrgmLlYbgsNrWDTMQ4BTv2F0I9JVqHkrikVKRZWJGKr2SF1QYYgeQ2KEsmaay2JzVkLHjEZ1YUAS8JlXJ9mx35BaxzEgtsUwSXH0YREA2WK0LBQCZ+nGKuonCnYwCmaBRGAOko5JmMvnRxSjIxUeAacjOsKIU9GZ2vFglHK/pe2hT/BQZsvBY6NsM9nwLzNqhmRTClCrcThlsJWq/HDjeBuQ9j5DdQVdDjkAqW/PNd+cKiJ99C/8RkU4/56C44MwFjA5Kk06rgqJZMs8NI/L7ZiCMDr2VoREDECVQpopqKSINQkXAwo6ILywArIZ/Hky4MwU7LJPKjMCaI6RBGq3rRh9YWpPhiFtzeDscn4NuDEkK91Lg+Ax/aBnZNhB9aBE9RS16G9kU4egqcyBGcVlBcCwcfgZY7YO8EOF8XZ+fYFFz7wybODR/HVgWUCvH8Wyk99xuMjQIT9RT2peCKFxZr2nNNFxZ3vSjOs27gY3fCjl3QbsKxI5Dqg098Bj4xR3bixeK1LigAWpHvmU5xLtyoI1PAcuR9EESrcxRiNYCEJbUZ5cj80FGEIv4D8CJTwlBQ8aPkpTnw5Sao5EvBvhL8P3vhf70LzBq0ZSSKorXUeSSTMDUlmk+5CMMhjPtww8PQsQW61kN3G7BTakbahzfibP5DPDtPwjDwfRtDtZK+57+i3C9hV14gOFpb8LoWwhUvLILh5al9OBj93flt6Py2CI+3bYc7roeH3AV2vsRoY85FdMUgD7S3gB9pBwQScVCRM8+IIhOGqgsRFeVvKw3VEoSRLR8LDBMgypEII69nzZekKPMKiPP9wpcubPyXAf8ADFwHWQ26rxtl3ICbquDkekkSoENNYBmYWuNkkiRqAb5bozaHSXYhWPG39J73vG3ez49MNsEYWwBDwOPAbxyEez4u2X7NxGzJRheCWFD0IpNyJeJNQCoj2gIGaDsq146iDxhi8weJaJWN/AKOLT6CZB7yKbH9bUvCkZYtJotpin8hYYsAUUjB12sN8Xz/xd8FdzcoPYDS36BGiLZtJlC4hoFiCLDxLAvaN1Ndf4tUzi0RK16z6B8YnvfzuSoLlwvtwMN3gF+Ftiz0fQt+BHgRCekducDj7WDugqfFohUYQ8KFy4U4HdtEfA0O9QpPC9Fu4mDC96NrujMl6rOjIJGDckk0CxU5EpUh9rmKtAkV+SpMWxyXlhLBkHIgmZC8BduBUhXcqpgeQZSHYfp1J6cVX/BrFJ/5O/jNj8G6Y8AkpK3vwt1dZF8pw6b3Y2Svg8o3UcVHqUWhZ92EdO8VLyz2f2e+cqLlxw3IA7gNEUyffADW3wu0gOqF387C7Q+k2XRNmft+Cnhl8cfeHb0uxl8RC4TZYCPMQruQiWN1wvF+2Nol6nkQSHr15ISsTuPAd2Y5zs1IiC5OJYivK/4/bNhm0+CsVHJeDFH/32yAVwMvLTZ5uQphNareNEQjsCwxF6yI3EY1nNBSEpLUhmQyekq+w0QowsNMQClyCoYe1CqilbhIpMEHSsuvcF5WbL4GHkbS2pOApsxJwOVvuc2EbwTwKUTbfAuiGS8VK15YNBeLizncdestPPqkpLzFNQubumDvIHTtBKMP1CYIeg3e+9/+mHT2Br7yjz/OC68sXlKkgDcgvAhDgURaZiLK5yGLEMDMJSwGkZLvNWkIknC2XyI2a6sQeFGSU1W0gSJz103kolcVnTdmoYpLv+PkKT/63CEKI5piTqhIohhArkW0gEQSThWjbEckQzMIJLW6FtTDpy511imPehjUia6jhqRFmwiDy9ro8wR11iozOk4WCK+C2PnbgR9Hyu2/CLxzK/zQm+F3vgMDB4Xk5zbgtjfCfUfhfUt0711VwuLed7+XR/7h8/OOSVkOb/2RN/Lok09hUJ80PQ/AqQfhK0/D5jHo7YOO20I6bvwhzNDmW39eFxS97QnOjMztfW5BtIBjQEcwnSylEY2ukecX+G4mYBcAA6ZGRdDYRCutAaVQwoRxduNsKEfH8ahPWI/piVQedb+Ii6RJ+yFMevWJbQBOuV5yHgDKrQtew5f3TvSnkQkeIELFjzSIRGSKWBZoSzSjceD+lPg1EskoqzMUzcKL8hSMGvSsA5pQD7HS8ZcN7x96Ffa9On0xeAl48Hsw8ZvAry/tXFddunenSjKk60HnNbkc6bYMh4/3c92Orfiez9t+5AEe/+b3ee6ZurJ+YxckB+HL/xOyd4C1FkodH8PUP48Tijv/Dz+8k//rz48tqLvcjkzcQ8AEMqEq8+6xeHwQ+EZ0jvYOoAZVC1RFzICKC2UDiiF8u2G/OxHfiZZdzpkhsTYfv6aQuovGie5ElZKBDWUPclE6pooqNE1TciBsGzw3EiaOVHHakTkSp13ncjBZEQemY0s4VCkYnxKNZhLxG00iTFBOK2QUuEryNCYBswgb18IfzaJCrWM6OexrDTs5Pw+oOvmn6PFfIrV+Yknp3is+GtJsxIIiCWzobeeHH3iAa669nlQmy7ETp1i/YQsHnt2PmZxe0/vcoEyU/hwQShgv7X8PO7SoBQE6HOfmd95D3yKuIXYO3oiwHTVLUAB8BvgpYEcfZF0JS5pTovKHShKdVCjJZY0IEAEW60Pn+BQa/s5EY8yGfRTitPRN0ZB6E5EJkpFEqmSUeWlFlZSmLeXetSiEGkY1F0kHsklxHDuROeMG8ld1RQgcAvYhQu5ZIJcEfNGaQiTzsRCAEXFSzIYd85WjXgHoRgRe9xyfH0B+n3ZEgwX47et/mvvXTyz53FeVGdKIO998B7VqlSlTgZGgq6uHhG3w0qFX0KpMwuw6b59vAp/5afjQfbD+N8C69su4wV9hOu/k/72/jxf+VWgBTy1w7hQipcvAdxEKuPK8e1wY7n8fnD4MT9rglsHJg1+KSrJDmYzrwul1E2uAfsQcqETXGNEoAMJCdQTRhEYQMptriTSOqNBJR4xQWQWFtBwsDESjsdx6WnbCkDoJXRPNw7ZFuwhCIcdJ5aQ03UxAQoNXhudrdQbt+HUQMD0RJn7kXLEqcn3FOZLmDoyIb8bk/BKB5ULM1wGiDaUR35EJDCDUgt9BODs8ZJL7QA/T/Uc29Wu3gAdnnOftSJj/WaZX3X77ODzahO9x1ZkhzcAHkHApHfCeGZHdbuQBmAstyCq5nLgG+PTPwu9/AcYnJS9kiHo9hmJ2c77ZQms5kKROu6c4/3oziGDLI4Jttv1jPos43dxm9hB8Dpm082l+vSwcsu6h7pOJiXNj4fFC9Lonuua4bqYd+GzDMd6JhKdj5nKA/w381J3wfxrtyfmxJDNkVVhcALYgP+aBecbEIcbXKpbz+8VqbqzNKGRyN07WVmSlTSJCYeZEjlfxRhKYmYhTMGIav7ly7DoRdvH5Hs57uuGb860OiDYR56aACGUP0cJi/0ncVCdLPTL0WMMxfhj5Tiby3Q3gT2acZwcL+nRXS9QvFWba+bNhJQmKOGrRyGsZr8qLrRSYjfputs8Xg9hp2pirEZeqNzrPLOrNfBqFQbph32Hk+80UFkF03Pm+X5xg5iHCZxj5fgXqVa8+oo3NpaFck4SRVnjq7DwnitCGmEwuoq3ETu1GR+uT1E2UBOen65xC7lEq+n55phfkjSGC4oboPLGwPEXzEhdXhcVrGBPIgxqr2h4iNOab3PE4qKv0UFebZ6LxWOY842aDx/maynzCp8x0s2Mul91C2fix8AQRFCDXPVt92cxzxN/RB4YXIShAeDcnEAF1lrrQbkSjYJ9N0JWoa0Q+ch9+gLqQ/WL0uoM6VWECMW/+enGXuSBWhcVrHDFnS5w7sRAax1xoYe1CgmI2rWvmtqXao0kWLjtvQ1ZjD/ENzGZWOsgKfQvwHPX7EhA5JqMeHnkWdpS+b7P0+XBLwmGhk3D2VSABX4mW/fdsAxR0+nDagWMN9sQH+2Bju0SyCgVpM5DLgFMTPovAhS/+i4z9ofdKh7a8A0EewqPw148ucIGLxNUrLK4GAgnEmfoO5MGfRFai55jbabcZUYdNAx4P4T7kNpWQCZZQ8GUtKcRb10rNRkebZI9u7oW7PwsfTEJmvZzE90GXJQejqqBgwYNn4YEU5POAKUlXjpJoiNZCWut6EinpbodPHoAPFuAr4+IgvqNVCs50Av72+PTrXwxtw+4OqA7LxI+TGh/5zXfysT96iGMTcKRUzyw9k5DU9UaYSLTldZsc9h6dvwS5FYn2VF0Jtz99GDZ0woQHLzdI5poPSQVjoSStNSKZhooHmRQUJ+V+ladAF0T7qzVIaa8sqfLDIWSL8IePLuKGLBJXXZ7FOVwFgiJG7CwvIDbxXfOMrSHayOPRkv81xO4dR5K9vhfdt1eQYi4mpNdnqhuq0UNbqsGmVqHnn6yBn5IHuharOUidRyIhDr28JQlYjgVxeksyI7RyhSh8cGBc7PKzwF+PwWf7Yd1F/obfGhazoIp07QI4lKxSKsLWzSIwY7Pg1AxB0YpoJgB+NZwz+zaGiRS8eYF83/3AwSH53o0mjpOUxDYvov9vhKWFMi+IMl8NQwRrbRJGR6ZrdHEDpFrEDj5Xav/F4OoVFheAdUjR102I1/qmaHtuzj0uPe5905vm/GwSmaNxheh8TtjTwPYf+7FzE8JBJtUA8M487I7ST04Cp4ZFkHSvA2sC/GhieQmYqEKfAa0J4YNMedClhNgFoKAlgzOw5BzpJHS1QltecjRMIJkDP1KBGlPOQSbbM/FMvwjspx62/Nzvfxg15fND799O+tq7+fe/+6v8zAdvm3W/OOUdwGrvwZ9ljDXjfckVTalUrZs+M028UlFyUkoGVGbE1m0zSmf3Zf+KF1EPRpygQaO08CXRzdL1RLpm4eo1Qy4AUZvNcyXYWSTz0kFW25WAR7773Xk/X9MJJ4bkmhdKGvubv/kbfu2X/iO/9Ynfw6UeBXpoAr7/+GPcdJuQI3wduKMMf/KIEAXFOFCF9jJsTsqK+cRRybwEzpFv7POg5QRsTYPfAbsKQqHnulK2nq5JSrofVc/lE3BrTTSfbQYkW+GvmsB4dd8t1/OFr+2leOJpvvaC5h3XHqLlrj08deLYrONjwZsEtvVm2fvi+WMaBUgLkjEbaAhr8I6sZLaeGJNCwjg8qkMoByIwxmc4QdyIBSxhQcKVTFXfkecyrEG+Idk4iIp67IgzdOn8WHWsahaLQAW5UeeKs5CVLw5HXglwi5A05HoXwyH6W5/4vVm3f/rT0/MGv1OeLihAMj3/6hB8fxD+IBIUOeAb/1AvexrXkml42oFXTsCwDxMlKWcPatCeh0InfCcKV7Q7YgKUkabBnecn2F4UjjDO8e8/xdiEpgf4xd/8OHZplM9/5/SsPCO7Nog5pwEr2Xre5zMZugpI93WtRSAUWqT/SRIxS2KEofg2Eh5MzFBXQlf8GMqVcn0dpewnQkmVrzZIhJhy0I+TNZqIJQkLpdQxpdQ+pdRepdQz0bY2pdQ3lFKHotfz7+gVhjjdtowIjjj0FnHIXhH4mwqMh0tnPf/Ug/UJ/5Nvv/7c+8li3QL/yI++HQ380wC8Y4tMuSnAWdN+TjuLQ5anx6Wi9F++BydG4Ml++NhB+OWn4bDeyuORvv73U+I/OQi8VILjTdKvU2fPsn5bK08eF2fnPe/5FX7io/8HmG4qxP0+jh6Hnnbp8vXqwf3nHS+YYeMZEWu4G4gpYWejfBMFPQ0CzzCkbH+Kuh8F4I5uSaP34jYHNXAjf0RMUVhuMENqSAVwEDOCR9ixNX0xt2f6d1nyEeBurfXrGjLDfhV4RGu9DXgk+n/R6EouPCZGauEhTUFso8YJO2VE1bwczNBLwV4uTLjlgbeYUk4/G3bd8wPn3j/2bL1C9w8+9/C598MtdR35k5/8O27a0kIjhpA+GakU/PFB+KeGmfKjv/CRaWO3R8+7B7y49LooAPq6ejHWbiGBpOr/+g2d/ObP7eTuwvRxHtK/NJWD4RKMTsIzL89+EY21aqYpJoRpSm3ORDWiAzTqZi2AVa6X+jfylvRkZHtoRpGiqAeJVmLaVF2JOMUIiUr2mf5br+1YuodtOcyQdwGfjt5/GnjgQnYevIAZ2MxqzYXQSM7SqGE0SRu+JCgjavFi6RgnkBVqZmvAGJ/4H79z7v1nfuv3+ME9d5x/jFfqBvjDn/tzNnRsm/Z5CTE9XqrADTOa99q6Z9r/r7tlA1APATcDJT/gyL6Xed99O9hzz0bW/OJ/Yd36t7LnrmumjdNAVwsMTwkD9xCQmyMU0uhKMWwp1Y+fHdMUZ6cZ1pnJAdxYTTXrYVuAnC0aiR9ICFepKCksapQMEjWK4fnC9eGGEl6N0ZO4gFV4Diz1nmvg60qp7yulPhxt69Zax7lt/cxdTbtkLF2xWjzilOT4d/ERX93gJbyGZqDI9JqDhfBE9OTeR/1+3wjcA5wequvcn/nawzzZwP8R40BDymUZeNN7fvS8MaeR+/jh/+/Hpm0/NDid0fTzj0pSxSDNS6t//uxp3nHPXbz/g7/Gr/2nP8IsjrFuz83c/tb3njf2QP/0pLXJRXgPiwZM1cD3xHk7VRVOkZqWpksxDCWNkcMZaRupJJQiflE/0k5i+gA3EGFbbdzHkv+9EMYa8sk7upfuDViqsLhda/164H7gI0qpOxs/1FKlNqvmq5T6sFLqmdjXcTEo0+BgbEJL+flQQcyORg1jZsrulQCDuTWF+PPbEc5RqKcfxyXVrQhr12y1U/NTKwt+4aO/fN62WDv7+3/46rTt+Ykys/HMelwQ1em82LNjC1uSaVSqzInTB6mpHH/9x39M165bmnL85yejPqwpSWDbfxb6x+Q5Othww3QgpkZyhlfV1PUu8w7i2DR8CVObDtQm4GCDUEgpUFFEZLiBg0DrpfMMLklYaK1PR6+DwD8i2bEDSqk1ANHrrIuv1vpBrfUerfWepUQUzkmiJtPzz0TMRxlSr1G4lGZQszDI/LH3eNU6hEQwPCS+nkCcb2PR583sU5KIAvhPvzidZfTNP/fzfOQnfgRYPvXUbzE5pEc5PfQyk2eOs7llgtrAAVrs5uguIfDwOKBgcLDuvKwx3YHqQr1xawMqntAiakO0ESzwLMlgdTV09ggnaYyTCWFIq3kw3mDSG1xGM0QplVFK5eL3wNsQRvyHgA9Fwz4ELNhKRSOT8VKaFReK+MctR+9neq2Xis2X6MvPFzZ9A/JbnEUIgqeQbMZHEK1qK6JZdCO/1x7EQTUTO4GO6BjzYWs0bn/koCvO8Ff97if+Cz/5nz8BnK/JNKs/yl23vp+TL3is7V1DMWtz6PCrtGzcxTOnZmupfPH4p+PwqAc/uln+b1fwxgYJaGQg3QLtDY7VnQmgCl1tkGmFVDuk0sJE1pKDdT3wO8+JYI/x218DZ3sr2bTFcw3be/qW7l27aD4LpdRmRJsAWXz+Rmv9MaVUO/B55Fk5DrxPaz3vQhTzWdz6+vU8+Wwzp2BzEfXHwV1o4EXgSugq9lrER/7dvXSZk2zd/ja6r7mGMHQZOX4IZVi8/2c/drkv7xySiHYXUm+klGV2PtGN0fhGbosbgBcuF5+F1voI9dYXjdtHgHsv9Hi2CceOn2THtW28fGBlTpsmdICbE20ZKJXkIbhSQrItTGcCj+n4Y8LfK8FMu3HHnRQKCTbd8AbAIhgpktreyyt7X1hw34tFErlXjTwTOcQnUaL++8eJgCnqdHpBtG+Nuat8RzjfL9WM0oQVkcHpmLB2XZr12zYxMNachg+FhYesKLxakgdgpQuKxmhh3K8jZoDyEa0r9u2kkQds5kO2khzDDx89TKFnC1YqRdY0qbYqTpbOEuSW7yqrnB/NiTkyGrXWmELQQJ6N2KEfkxDNFYyJWz40ohkemBUhLEIN+WwHXugy2gwCAAAgAElEQVTgTTWnlVQqio40oWvbaxYfXahkcgbiZj9xfxCLuq8p3haryB5R7QKzT4zLgdlcfGtJM9Q/RLk4TqZQwO8fR58cpzrQpKyvOTAzobCTeu5OjFhwxGS9qYYx85kEjU2aYjRDWKyIQrJcOsGW9s1UCoqtG/soKZeXv/UcA+Ui5UVyglkd4DeEos56Unw0WoM37IAnIgPuDa9P8sSzK339Xl68/MpB/tsvfpLf+ec/nPXzuXg2Y+9WYxex7YjtbCFl7HGYtRhtH0Me9As1LHPUWbBj4TNfWkMbUfUqc/ebne1Xv37PLtoKGdJVk6yRwPQq/OUff5KH9y1vd5GZNXDHZxkTs6vH6RgXwn86M7TcjFL1laFZoOje1Ernhh4SdoqBw0NMlqp4F0Ae6M8S5L9pnbw+0eDpaaagWObUjmXDF/7gQT7y0R+b8/NtLC5UmUR4KLp6oLcbetNSM7EzDXfm4aY8vLkNbrmIfKAp4No03JKCWxLzC4ou4DoTrjFg97qFj/3GtERyAD770KfxlcOm6zdSNEKczk5Mfzlc2HNjoUu2EKflbiQ34b6kdKW/ZY7Z28X5mcU9sw28QKwIYTFZrFKrTcFACRWWuOPWG7n15l1sn1FHMBeyzP5Fvvlqc66vF+mrsTZ67UJCiCuJz+JC8Ouf+h9sv/G6eccsQFgNyOp4zIOJEantcJKShYgFZReKriQPlS+yQUelLB3OLL/e23T7LON6HZgKYCSExxahEDR2Wjt54ASDY5NU3CLVwSF6e9p46cBivn3zMLTA5z7QvRZaHOjdCO3XwC13wDv/73dy54wVywF2bIJbrq8HlxXwxn/zg0u+zhVhhpgmFHIOr999LWOTNb734ouMu2W6ert56fDCXTaaxV48F+JmvS5iC/rUmaovlKR2paCQr3tzZlLILzY7shURKgMefCQBrS3SnlAH0rO0GkoGoj9PdL4PeGsSHqqeb6qkWoSSr5yAvrII6WPA2yz4ekNoKmHBhCu/xUITD+CVMvRGOn0u287Zl17i0yNH2LH9dbRO5vmrZ79KODDAXff/20XeiaVhMbrukxEJyf0KvAFIV2H8Ww/RtQHud6UWxA8g7UBfweTo3rrPRQM9xmLuzPxYEZqFH0DCgeNHBxk5e4aJsVEK2SRnTyxE03Jp4FHvIh57ouP/l54Xt3xYrOZzsf2DxxCBATA4BckWSVkOlJRUh1pe5ws5nwb+YhZBAdLKMF+AtmRdMI8yXVAAHCwLN8RiV74xQEchnHsfeCeeX6U2VePwwYM89tSLfHvfCcb1ymQq+epRuccjIaQS0sE+raAlIVHFsAa+DnhkhoCeevWiqyrOYUVoFgDD2iEwHfwWxfH+QVTVp2pcWPjqRgOsbfB0swoHIsTNguM+DbFWEbM7x1rHXLjUjYfinhF5ls5fsRDGkCzML5yBn+uUbMMjR8FMCuOV5188QZBtQkXDNxbwjo4BYxdICTUSLedHjxzhgbvewpEzJ5lUFl5xEO/MMV5oXZnLQA/w1Si59N9mobvPojLlc2ZE+sWmLfiLvefvV8onWWq/uRUjLF7+/j66c0NM2lX2PSsaRUv2wo7xXEjzKowaEAsIqJsgMfes4nxBETeDiXP/E1zaBKV43owhNv5MJqtmI57LR47D2k7oyMJopIIpJc2QLybt1UoKW/VyIL6cW3bfQnl8goH9z6BzndSqIbmWDqr+yjQu+5EconGkmtUp+SRsSRWo1KA4Rxm0GSw9b2RFmCEANS+gXC4TTpZZY8Pde9bT1rH4eMMFpgxcEOI4N9QLrcxo22xCIO7DGeNSCorGO1ZGOCnmqzJtBmKt6cw4tGZhLBB2JzshhC1Ow0X9xOJ81gCUTXh0mW5enEhWLk2RzNj84Nvv4dZtm+jIW/R05WnPr1yCt3EkWjVahmQ2iWXZZBzIpeHMHMLVrSw9CrhihEUQ1ggzmoMnTzLug2cGrNuwiDhYhNm00Bu2zbLxIuAyvcWeps7yHCDqfmNoyorGZKO/S4nG4tt1yLUVEA1jJ+LM3NzwfmOTzvvfP3If+4BxS0hj3VC4G8rUy64dYHzGDZmrUCEHPL6YmveLRBwa/su//TzlIGTvSRfa1tK782Zy+QI7tq/sdL4B4Ngx6B9zSec6SGpI1JhWPNaIodGll2WvCDPEBmo6yfHBUQbOFklZ8NiTS6/6e+HQwmMWA4VoB3Gf0DhnP+7EHfMNxIgrjeOkmkuNDUiSzygSQbCpUwLGfKIgArZZGtnYd74FwMY87PXrPUddoCXS6F8HjPbD9dTZvmdzu0VFT8uGrTlIRs6c0sCreKNVdFhkYtKhND7G+OgZzhyd2wxpbOt4ObEWOHksZM22BLV0xOw9B/wmOM1WhGbhJMA/dZT9e09QdWFsmbkpLhQxu7eHTP6Aen5/EZHy/Q3jNXVBYSIFV5cScTagS92nEtcZgHBE5miu6fbKC7VzRXBORFI7EZ3/SJSu2NUjpMFQ7xoeYzNwty2a2HIKCoBXp+Cp6L2yPMaCCtdd9zqcUoXOniTbN23HmZjb/lkJggKEXnBoFMLRKbxJ0ebmgt8ET/eK0CzCAI4uo8q5VMTENyZ1QeBQD6XmOL/fpY9MxgyXr3AqriGoRdcRa0Kxw7adxSVfLQano2OPTkk3rPjcFnUGrXKx7s8pA3dZMBmNTUbtC5uVMxPXUSyEiSH4yj9/if6Bg1TOTLL91mtImlmOjc1NmBj3Qb3c2IcIWVcFhN78USe7CQ/hihAWrr+yE5u8htc4bBpvm69StBb9Xa4K2JB6jsgU8pBbQNaGhAlDVWbtjXExKBH5bVwwlbA4gdyvY9GYSrXepd1H+mMkiJoNp+DbTYx8LNYvetONO3nhwEvs2rOZjm3b2Lf3UdTgGF/9xmzVGvDjD7yLAI2Ts/iLv/oHNiJ1F5tobqvAxSA2iT3tUvHAmCf5rdwEe/iiyW+aiZj85kpAY+bmYu+/hZgil4Klo4BMvljr7EauM0udxzEWelsSQin/lSaVy7y7Bfor0vQ31ojzwBOIM9VFCr3irNfYNPKQhkOXEy0p2Lx1C0n/KE8cmK7Pv64N9o7Kb3j7m24mnU2TKWRIptswDJOS7zE+OszRAwc5PXKW0fFm9gGbH7e0we4dMHYKJiZguAqmJVqaUmA7Irg39cA/vHKZyG+uVoRcuIMr9l1sod4KcDbkmd4s92JQoR4ZSkfnjhO0YtMoiK7nRA2252kaiUZhDRw9WL9HoQ2DkQrW0Q21kjTS8QMxP6rUeT4vJ+7aZvDdQyFTtWH2HhRB0U3dRDs8KhpRBjh5/EWqfkgqn6Wtu4/O1k4c08ZUHsmONN3lAnp8gLE5ztVsrFkjfVI9TxoOOUjmrGnI764i9bLUhCLa14yw+Lkfup8/+qevLjiuGfbmxezvItyW7ZxfnhyjGQwKcfYmSNm2T9RMl+k2bUxcM9ok2oYNwOExObAPfB/JtYjx2CzOkQxRS8jYNrkMuPueN9DbY7B14Cn2H5SbkTJgoEG5iLW0zbf0MnF6BMsKmRwdIWFWOXPsBdo6u8hk82StkGLKoXYJC4aStjRSLpdFSBiGZM5qW9oHaC1p4I80wRm0aoZcIiSo52fUuPRtD1MN15CkzukIYro8Ncd+VwPyyL1IZGVF1mbUgSxqftSIt+zpIww87FSOnq4ehoYHcWs1PD9AG1AePE3/oDQlPnkJvKD39UHgirDAgEqUXq8ir7xhgmvAXpF4SzJDVkTo9GpADdEuYo0/djZa1Jst0/BZs1FBIjYBMjGcWc7bTFwpXB8FItKcnKzSpoKkCQUbqunzeSAMM4dWYDsh2CYtLXnyhTzZbBrbtqhZDjtuXEvPhksTMPc9qfSNf0dDiaAwDPmzA5hq0gO1qllcBsQJXYo6R2WcJbqcSCL0bQPRa+xb6OHCupQ1A50srpy82XhdTlbZVmBTJyTyCXxT0ZbtxvdqTBQnyOfzdHR1km0rYPiQXdPH//zU3547xuad7WwvOJSKJoXWPEHooYKATCLD57+53FkidexqBacWNW2O2uXZFnhaup9hi88iE0JrB/zj6VXN4opDnIMQk6/GfxYStcgjD0BjZrSFTOylaAJVhDreRfIiWqlXzL6rWTHUReJyCAqAiSm5l215RdvGPpxMC535LhJJCyuVorO7l7WbtpBv7yTvWOQKrRSHp2cTH3lphK7OLvo6exgYGCCRSGAn0/MKis00X9vKRKuNMqKFx5BMTdOUvwTC9WGkYLIJHtdVYXEJEVPlN6r/jeXuMSFuzOLcqD3GGaGK5jF0jSBCahzoL8F7O5t04BUMH3H8jhU1uXyB1pYWfK+CmUyQyiQodLSRSKVIptKEqTyu9ujIFvjZe3ZOO85n975C97o1dLa10tnawRcf2Tfr+bbl4OYe+U1baa6J6ZXAivP4Q4mGBACRU9M0xWehXag0Id37NRMNuRIQ52XMZW7MDAjMjNbH/y8lc7cxWjKOaCsOUdl9FX6kAF8ZX95K2cuVAbkGyHVCThls37ENpWsElqa1t4fWlnZsyyTlZNGGiTZkcoTJDK7WZLZu4z/t3MV//b3PAeAdq1KxPF5+5RD//Pj0IqSdW9q46YYdDI6cZej0SYbP+lSBlCk+hDUGnA6XVjfUa4ERRGasIb6KILpmFaXJBkiY2nYktLpUrGoWVxlqM97HzNkgD4NpwU3AXcvoobxcqdKtrcL5oA1FT08viUQLmUwruVwb2jAxHRttawxboWwDwzAwTRNUgGkZ+DPuyYN/8jUOzyhTeM+77+TNb76Vs/2nyGfyaExuvvM6NFAKJPdlODy/FcCFoAUoBKAtCEwRCudakGt5byh5VQEETQq/rWoWVzEKiGbhA61pIVDRvoQPB5cx7yFJvRnRpcIaG6y0QdILueGGGwlCRTKdwzAMEnYCjBDDtAgw0IbCMAx0GOL7PpZtYoYarza/LnDdxhZSjiLwA3p6ekgaKfp6NzI4Po4J5ApQGpeEvjTik7qY9Id1CXAC0RpMhOPUMqOq6ChcGkQCw7Ig8CNhskSsRkNWAayc4qjlwu41Jvnebs6eOMOe29+I6wd0dncQegGTExOsW7cO7YcoDHxCbNPCsRSB1phKlulyrUrPlmv45Y/+93PZuDEdwEc+/C5s3yC0NFNTU7S1FBgZGSSVSjJ0qh8rpTj87AuErQVePDBOOgtjRehJg9EGZxZBN7srD+Yk2Ep8EAkHbKMeVVNEeSIqyho2wYjIYis+PF1bjYasSKykFn2LQYFLT9RzqbApCdmWPC3ZVtb2rSMESqUSoR9SKZYJvZCa61KulLEdk0zCxrEU53R3ZeD5GiuRwR8dO+eITiLUBHmgWi2DZaB1QDLpUKoVsSwLy7LJ53JU3RrrN/ahkhl2b86T1OJoTSckqWoh7DDBmxCyXk9D0ogEhBYfhanlvQ7FP2FGoTatwVXgXAo+C6XUnymlBpVSLzZsa1NKfUMpdSh6bY22K6XUp5RSryqlXlBKvX7pl3hlYjlp/pYDcen9awkmsHtdgg3XtNPS14OTTZLMphgaGMJAURwdZWJqgt51vaRthefW8MJQOEsMA08Dhokb+BhGgGnClDtBOxJ6ziHa2FseuAmzZhEaFapVlyDUBApaCwUq1Qotba0oM4XR0k5toJ9kroByYMO2HPmcRco6vykQwF3tcFNCivDSBhSSolUkTUgYUjlsKUha4uQ0LfkdHUdMECKW9bQDtSb4oBajWfwFcN+Mbb8KPKK13gY8Ev0PcD/S0Gob8GHgj5Z+iVcmrrQGRJOs/KbMF4qtnQaOaWHlUmSSKUIdYtg24+PjGIZBrVyhs7MT27YJg4AwDNFaE6IJCAnDEKUUShkEvodbqREYDlPIpByKXgtrWgmDMnjiFLVtG8MwsCwLO5HArbmUK1VGx6cIwoCWTBplKNrbC/iWoi2EtllawD06At+vSauGvR68UIVTHgz7MOoLYa/ngxuAckBZkE5L2NQyIJOBQqvUujzThPL/BR2cWutvK6U2ztj8LuCu6P2ngUeBX4m2/6UWR8gTSqmCUmqN1vrs0i/1ysKl7Wl1cdhInWvi0hVVXzp05wpUHQPDTJJIJIVlyQdLKxzHxq+6FArCNhJoEywLpRQGChMDNyjjA5ZShIZCKzDs8Lx7lVHtlFtGqWkD2xYhgTYouy7JVArfK9FaKHD08FEy2QwQ4vmaVDpNOtlCYAV4XpU81TmLCUMknF0BBhs3htRLi2diYvEkQIvBxUZDuhsEQD91/tM+JEkwxqlo23nCQin1YUT7WMVlQgfynG0HsjmYnJLVsoT4L+JkMZd68tgkkp9xKRnLLwZ7rs+TbCuQCDXBaImwJ0kwPkilOEXKh3Cixrbrt1GqVbFti3KxgpNIoAxJlwvCkFSy7sWRhDhFmz0jrcqB1qSDUXEoTZahM0utVgMFNVNjBCFmLkWWgKShaN2whacffwFXQT6TYdAewkgmSZ2tsHltmudOLV4FsFjYdIyrjZsRQVhy6FRrrS8mmqG1fhB4EFajIZcLo8iD1N0Bo5Mi9WNSmhp1G1Uh5fPLrR7GBDkJ4MASjrOzS+H7AXhgaIVO2hiuizcJUxM+gWlSrFbAUFQrFdySJsAg5WRQKOIIoa/qVroXicuZ0cPCmhw1Q+ObilJQI23m8Q2fwPVQhk2l6uJYUC7XSOXyBGFIpSohUwMT0wvJFFoojhdxHYsLaQS0WB9TkuYI94uNhgwopdYARK+xZnSa6U2h10bbVrECMQFszMGUK+XUNerMVbFWEZfVL3d/rjUIV6fF0gQFQHtrnlw2i1f1CT2NSiQx/QDX9mjvKWAFFZycQ6lWw6u5qFDjOA5KGZLQpDWWijQMNKECwzbBUFjJ6a7rda1dWL4mZYDlefhhiGmZmJaFFwT4ocatediOjacUVdc/x/xertQILZu2NV1orbH14qfjhdQINSvF/GKFxUPAh6L3HwK+1LD9x6OoyBuAiavRX3ElYBtwS16qFocm67UoMSlOPCXimpUEYq6sQypGAdYjeQY7lnAdrciKkkI6qC21e1oLkOteg+mkcSs17EyKjvYOqipk87pNjJcqZPs2sGH9DoqTFbRWhEAqlcK2RdH2tUIbkXBQBhaKtGGQsS1qpekr//rdW5isFtFOgkRPO6EKSSQT2LaF4QdYWhOEPk4qSUsmw/5jR7jtDdILvrO7g43dfUyNTJDv7MTOZtjcY5Ggzgg/l+p/Iap4k/iNFjZDlFKfRZyZHUqpU8BvAB8HPq+U+ikkJ+V90fCvAD8AvIroUz/RpOtcxSy4WIKp7UCuHSZGYUyLNlEhqoWg3vPDb3gfV8bGFbNQ7+EaIpSBHUlIBnDMkx+/sbK0BRE4SUTAZGzY59VZ08s0p0S/b02C0E5QmhzH0ZqWtlZy6RbGShPUbJPrdu+kMjyMQZlqqQKmJvRdsmGIZZpoP4wiGTaV0Mc2DDTg1nzCMKBWnJ5z2VFoRY1P4WRsMnaColshbTk4tkOlUsOrhoSGwfDQOKlUhrNnXPZsdTCBUqVEkElw8tRxWlQaM9BYbRna+idYn4v4UpVEOYIgal7ly18YyG/mB5J3UUU0w7g9hab5SXaLiYZ8YI6P7p1lrAY+stSLWi400zO8EnAxgiKFFKKNj8hkz1HvgRKbHBYy0bcY8N15knmONbzPAWt8sLTsvwYREAFRZiF11XkYGPXq4eWkBc83IcmjMwfZjgKOAVbVJ9/eztDgIN/c+zgt3UlyZpbnDg3zY++9k/Gyh1cpYVgmOmmTSCbxqjVCAxwnQS3wRH0PZA13Q49Qmxx+af+0c65NpRgYHsHwTJRpMnV2kO6teaZKRYIgxPU9ypUibk1RWFcADV/61xfZtsbCsBIMnDnD2269jRf27yf0FIUJCLuneH4g5No02NGM9wIpNfc8IbfRClJatmlPKPV8XSe+UZHk1bEtacIzS5QeV00G53qWJih2N+tCLiNyiLYQr+YggiIm4Ikp+nU0dj5BMRNTwGM+PBKtgF50jhSimcTl+fEDF7coCIBTTcoG62hLkU1nMUITy05RMyDT0sKem3cR+JrRQan68j0kh8LzqZQrOMmktHfwfUzTlOIxor62WuPrEG0qfB1w9sz0yjHDsgg1BMogNBWBaTI8MYGyLarlKkqZWGYCx0kwVa6cq4fRaA4ceJm27i7GxsbIZrMYtgV2jVQmSx7QAYRGFIkxRVDE/lWlwLIlYzNUkuZtGcJnGpemm1G9iGlIhudScdUIi6WkMr+OuUl2rxTErRcTRM416hWncVFX3IeiitiRF4tXkJh53HIg9oU0ai/xNZk0596mgXQiQT6TJQTShRY8ZaPtNPmOLm6+/iZKUdZZGIZUq0XKXhUjaWM7KXwd4AU+julgEhWSKQgxCAOFpUxs4PSp6QQBru9iWg5e4KMNRSaXY2h0BG0ZeDrE81z8wKXqhdS8uvRt7SwwcGaQZDKN1ppyqQiWwjItTDtBvkOdm+CGIRP/nCAwRFiEUTp3THZjRpR6YRjd67BOs2c1gT/xqqk63b/wkDlxALEHLyMJ9ZIRUG9fEFvdzXJ8zYZ4Sl0DuDa0WuBVIG0JIa5viN/ikcnmnG/d2gRbtl9DOpNGK5MgUChfc7b/DI/v3U+pAq+/eRtriyVKxSk8t4ZhWNhJhxAft1yBUGOaBoHvoywTLwiwvRDLDyFt4XqaTAZ2r9/MoYNHKAP9AyexdZ6ECvHLHp25FqoTRfoHBvA9n1K5hFKKgZNn6VxfDxSOTIyx4YYdZAyb8f4h2tZ0U5uq4o1nCDOastfK4PAoPU695NyvQWBJMyEVMSEpM6r/CERYhIHUimhEK8EUH4ffBLXgqhEWS0GcHHelCorLhSmixsce9ZvX2C26iQ6kodEaIyeGKOdTpLoKBNpg9OQJalMud7/5Vk4O9GMnsoRuQLlURgUhtlZ4ngtKEYYhpmMRagkaB2GIYTtozyXUIaZhEHhV3vWe+/jc332Nn/u1n+Dpx58gm8owPlQmm0jiliqk8wUyTpLT48PkW9rxPJ9SqYTrukxO1Z2j3kjIulu7mRgaZEIFrK2E2C05iuNFlJfEVGUq0W0zVSQsiArGomOEiODQOmp8bETtACLWLGVD1QfTB6sJxUpXjRmyitc2EjaUjJC23rV05NowqxXW9vWwdmM3R48dZGBoABT4oSKbzeIkLEJCCDVepUYYhAR+gOu6eJ4HfojveXhhABkH13XRYcg3vvA1jo/An/7Wn7N123WURypYRhWtLTL5LKEBuWwOM9DUPBff93Fsm1KtyuBgvX9qtQanjxzDDQM2bd3E2eFhxkYmUKaBbVvkkgmhWHQjThsdcW364svQSBTEC0RrNIzIlIxYsoxI47AAbYjGsVSsCotVvCZwdgLM0OHgSwc4ePgV0p0d2Nlukp1r2LV7D8dPVbEch46uLqqVGl4IHWs68YpVTGUTBD5euYLvemg0nudh+xov9PE9n7DmY6dTPDcK73nLLfyHX/0ZvvCnf0+hdx2GYVD1fKqGZqxSxjU17a2tuKFGY+K5molqleJUvY/dkAdnzhzn1WNHePiLX2bt+o205gu0d3RgJ1PkW3KkWxOcAioaSpHZUbPEp+RFvohAg+83cLpGDk838mdoLWXtwaUoUV/FKpaKu2+9NOeZtEJ23LSb3u5uHE+RstOEWnHo8KuYQL6Q59SJo4yOjJNOpwm0zCAVaGzbQWuouTUCNNpQFN0KmIYIDFsxOnBa2NfXbiLh2EwBZ/rPkHFyeFNTmB5Uqh7aNrGSaXzPw7BtqpUKOtJgGjNhhyuQdBxuu/MOQh9sw0GHmtCwsJJpkpm0aA0RSWpgQMITbgpLi8ZgqQbezUh7CAJxeMZe5VgzWSpWfRarWBIcIjWYuX0633oStrQn2Hnr9VTHRimPnuKxV5rPy7Xv2VfZ9+yrtOVtkqkEIwNFunpb8SoVXr/nOnTFJfA97ISNY9u05wqktMnk5BhdazsotLQwNDpKZaqEnUpSNizWmAlMZbP/mUc59cRp/v3HfoWpV1/kpf39APzjZ7/Oh3723Tjk6O8/DYksvs6RzmUYe2k/+XyeMKhRjpSKXRuzvHhMfBcTFThxdphy7UXe+MY3kk6nKA0WSZo2xbCGYWmUA/tL8HpLTImaKeaGMiJ/RdQAGSSnwor8G14UCTEMMPz6mKVgVbNYxZLgAtuyCzt/D4/UOPXsXoLhcQ4ug6BoxOiEx5n+Iq6Gk6fHGBmtsqa3m7HxMSanpih5JTzfJVCQa2nBdV2UbZNrbaWvp49MMoVXqkDVoFYJmDKqVJ84TRIYPPMqLblWrLSDFX3/wy/uJZnPkG9pQeuAyeIkWpkYoUXNNQjDOm+a2TDl/CoMj0C+o5uE5VAplXEcJ2LYSpJMpXAyohkEWqJIcYjUiJixDKmsF5PEjELTRjTeEHMkrvVZKlaFxSqWjO6Ni6P6Od7v88ih0Tofw3JdTyFBlx1lqCbAseC7//odnn7qeRwniVIKfI9UtoVUe56udWs4dfIkB15+mapXo72rk47ODjJMMOYWcZwMQ0jVbZtfw/UUHe0dbIzO99RjR8DzybXkcctT+JUKtZqL7ViMTU5xakAS3zet7yTXVmBzpyj0PQVY1+Pw5PcOcPj0cYbHRgHOOVmDIMDRhnSwCyUUamphy7K0CA0vEIHg+hExrwLXixyciAYCUSbnErFqhqxiyXhl/+I6mVyqxLbNm9voPzHEmkyGkVIZO5WkMjxF2YfyRBGzqjlbO8nUyCTJbBI7YZFKZLDzWexsilP9Z8APMNp6mHrxef76Mw8D8Na791DSacqDx3Ba13HbB+7l1c8+QhEYn3KxVZLuQhfHjp6gMunT3plj7PARpoplbrp+A6EVUvINuju7aElUMHpacfwKGT3A0ZPHsA2La7dch206OKaP42uSiSzDTOJoqJQlZ0XpullhWWJyYIq24QUiKA6n8+IAACAASURBVIyo5ieIwqrNMENWhcUqloz+S8npvwhs2b6V9d3dDAwM4WTTVCpVOrd2079vgKIOue3aG/DDKbZe9zqe338AVJLHvv0M4xUQ0rfZkejupX9oiPZ8B92dedKbChR4hHHgc3//JT74kz9MR6KPihdw+sxpglSS/5+9N4+y5DzLPH9fLHdfcl+rsvaSSipJJcnWLss2XrDwihkb0+1hGp8DDNCNe4Y+09A9032Gdk/DGHrw9GExbcAejM1igw0YG2HLkmVZu0oqSbWp9szKPe++xjZ/vBEVN7NyzyzVrXI+59y8N+NGxI3te793fd5koouORBPHjNKZyZLPFygrm2xnJ8dePY0Wh93bBzlzfpwmoGp1OgeGiMd1JmZnqRX8i6tDLE5oU3h+f1P8dgBO6DsKjB6lS26GoUm4daPYagWwhesS737PXXRFYziuQ6mUR9MUf//tV1becJMQicFDb30bdrPE3NR5splBMkmoNsBMxLk4NcHeTDffe/Z5ZiqwZ0eMbHc/Kc+k1szz7KszksNelczh202wdHFymr6WYPl/IhFoNOTdtaSHiOuXB1t+NMRx4FVvY60AtoTFFq5bfPLnf5wnnnyGZDJNT8cAX/mHRxnsijA+d/U6pHz8o+8m4Vj80V99h/vevIsIJo88uzSLxz6k/WDMAy8CCXd+zoSnhLTXMERABLkVgcNT+WngTQte3hIWW9jC6tHa6/VqYM/+PnZt70KVyzz34iiV5tK8EwnggAFND0wdPFOEhh0UmDmS3u16YQVvBN+p6fdSVUqEhePCC/aWsNjCKhCPRajVr+eeY6vHnuEuBvt6eeLF41ftGB5++E6oRMjVZ4gnErz06EvzHMAP9kNu0m8WhFScmqZoEJ4n5obtCw7PEaFgu5KtGTQbCvwXrl8zcmSDwmIrdPpDgi1BEaJWqVJqNPjww+/g3e+466ocwze+8TymNketMMnpF18i26sYGZTvDiUg79OMBSXpIAIhkUIiH365uu3XidheyKhlB+YIgAemK9GRjWJLWGzhhw5xI0IpX6CrM0NSi/NvfuETV+y3Dh5cmqH0mFdn1803MrCnl6HhLvYNDrI9CY2qDH7TD2t4HmiGn8IdkYZCehKqlmRs6kryL7QgBwPJw9DcsGZkM3T368IMySD9LNoBMVbu7HXXfYd45snDb8ThbGEBosANOwYp1mtEPEh2d3PLrbeQSaao1PNkOvr4nd/9o3Xvf6C/hw9+4P1873uPopWKHBm9PLtkBzBgwNOLMITtQzrbBxyaUb+a1DShMwnxTj+duwm5Oelj2myKIzOgLzQMKS6rO6H/wlVw1N3yWVxzeNv9d/Lo95+/2ofxQ4kYsK03g2caGKZB1bbo7uhm946dJBIJmladVDpFZybLb/3uH69p3wf7OijqNXKTDUpL5J4MIZSFCkhFwbGg6gq72Jt6oDILEQ8cJX4GA58BKwbJFHR2g2uL+VHOQa0GTZ+CTHnSVd22ZVsQIWF7En59hS1hsYU2wGq6Y7UDOoDOvgy2BhHdwFXQ3dFDsyl913r6uomYJtlsitMnzhJNpkl3d/Htbz6yaNRif38/N95ykN3be6hMjvP4iROYiRST4zM06nWKpfl65j6E8ydJC4mNCbOWCJImci1jSNGY4Ymp4ZmQjEO6x8+hAEo5KJdlR8pP0rId8VvgmyXBwGoCxzcoLLYyONsAPQjj9bWMTBLmKiuvBzAQh4mrRLNeAZJN0SY6ertJJJN4nk0q3YEZjVMol8lmM9QLeQxT4Xk2moJ77r2HUqlGJCkl5/lcnpHefs6Oj3LiwlnOnD9DvV7n5HmpRl2KgjGKdH5TCC+sA1QsMaNngTsN4a6oIlEOwxcAERPqJTDjkEpCoykaR0yDigOJKDhNaFjiiFSEnKdKQfmHvUT9WubEbMW1Lihg9YICrp6gAP95URrK1NH0CLVaDZRDvEPRqJRIJmMMDQ6hdXfT29dHoVDi/PlRJnOT9PcNMtTTyfDQARq1GqlYnMHJLpKZBKW5ac5enIDz4e8sltPxCtIY+AJwAGnX15+CbWXoMuB5G25HKkarrpgYMSTxStdAs2BuHOJJqOQk8qFr4gR1nJCYOSBfdhHn574eGNvgg7ZlhmwQHQryGzh6P6N3C4sgCdy8P01TVxi6jtmIY6oqr5/Jc9FaXx+YCLBt2xDJbJqOZBzbsnA9F0OPoZRLR28nf/cP3133Md9+z5tIVRoUrDINz6NcKDM7PUN9jbUZtyKTSC9+aBQRGnng9Cr3EUWuYQw577NbPouri8Vs9awBhVUa8NeKrX81cO+h/dSLM5TyBXJzDi7QmYbTSxS5HojA0SXSSWJAb1+aTCpDs1Yn3dFBPJHANE10XSeTyeDZNn/zyGMbPu6PffjHOXX6BE7dwdY8LoyNMpcvr7zhlcdWUtbVhKtd3pPBW0MnWsXWTVgK/ek0CSNCIqpdarG4lKCApQUFiHruaRrlRhXXc/BwicVMIpEInudh2zaasTlW+dGzZ4gnE9i6hue6eJtRH94G2HpON4A9O/pw3TBXP0BxDXaFi/hetjAfN+3fQaFRp3N4gFrdYorl81fuObRr2f1FooqUHsXEwIzHwVNUq3UJLWoapmmyI7MJfPnA4edfJBo38ZSOUgrd2owurlcfKwoLpdQfKaWmlFKvtCz7j0qpMaXUYf/1cMt3v6qUel0pdVwp9e4rdeDtgEZhbsP7cLi6hU3tikMHDtA32E9jqkwud/n3fS3kXLsGt5HsW77nXDIaJ18qoRsGMzPT6IYBHtKFzDNwTTh6brXegJVhRzuo1vPYVZuGe03HES5hNZrFnwA/usjy/+p53iH/9Q0ApdRNwE8CN/vb/K5SSl9k2+sCxYZ9KSV3C5uHj3/wYcaPv45VqXL23DmGRrovW8dsmaxzhTHGnj2y5P6SQCSVwrJt6ZCuR7AsC2VGpCt8Mobhenz7qWObdg6lcolIJMLc3ByJ5Brs0jbGisLC87zHgdVOoR8Avux5XsPzvDNIy8yrU6lzhXFjd5ZiTWjMWrFWu85AvPpbCHH4e49Tb1a5ODGJFzXYvnMHbzm0j1amz7EqpH1XQLnqcWwR7SNAA3B0j12792DqOqZpkkgk8DBwXYXreSSUualh+Ge/+zjRSJzxYo6mdX3Euzbis/glpdTLvpnS6S8bRkLIAUb9ZZdBKfWzSqnnlFLPbeAYrhpyOekU2ptJXFqWNmGJLN8l4bA0n8EPK8xMlszO7XSoBP2JLgpjM0Q9dZnP4p537eW9D+3g/n3zxe0uJNEtgAJ0V0dpHkrTUJ5HvVZDuQ6GYxPVNerW5mfsxJJxokAuf30Ii/UaU78H/DoSAv514LeAn1nLDjzP+yzwWbg2Q6dTvlRoehYRZMCX1vG8eVzqDbMFH/VklHgshjMYZcf+nRSKeZKJKNZLIaNUVwwe+dbivd7PMP/BjirIdneSm85TqRdJxKK4eDQVdGdSGK5NcmRo80+k4dDV18X41MZ9W+2AdWkWnudNep7neJ7nAn9IaGqMAdtbVt3mL7vuEEg3pbStPIlNxP0P3InnuiggFo1jGhEadQvXrpNsWW/brp3L7qe19sIyIaIglpR+YLbtEDXjuE0b04jStGx6YqtrZ7AWmNEo0ejmRFjaAesSFkqpwZZ/P4RksQJ8HfhJpVRUKbULqZt5ZmOH2N6oFxtrNj22sDRuvukmspksDgrbdiiVJEez0WxSJdQYetLZZfdTIRTojSbEzBgukEgkyWQyxKIRYqaB0nSKxTLf+fojm34ujudRyVeIXCcZCqsJnX4J+AFwg1JqVCn1CeA3lVJHlFIvA28D/jWA53mvAn8BvAZ8E/hFz9sMEvL2xVKx/57Y8qG8LVyO3ft2Uq9X2TY8jIffTTwbZWLyIk5Du5T2DPDi0eWZuluDVBGgXK4Sj8UwPZOm2yRXmCSeMJjMzWEYEZ4/f2bTz0c5FumUSbNlOkkwP68m6r8WIrPpR7NxrOiz8DzvY4ss/twy638K+NRGDupawlJkN4VmW6T3XlO45dabaeZLGEYUx3axTQdcMGyPmDF/XsuVlp+DupAOYiAU+YXiHDv37qY4M0NvZx8z+VmUUti1CpnuweV2tW6YMZNaoXqpoAukwExDKk4tZABGECHiIZGbqL9OEtGQ2gXXh350FbFQ2gazhHt9ZPi+oYjgYlVLVBpVZnKz6DUH1bSxbYsjh59d934dHSqNGp7nUGtUadTqxONJXM/Fcywiqc33VwA0LQvL84gnQm9LIDR8yolLDu4g7T/mf7YQ7o12wvWRWnYVsXB+C7Ix3Q0YX/8AvGf9m1+zsGZGOfzcEUaGBvFsh4nKFFbZ4pXza48mtJohPck0eiLOmVNnsWyLeDyK0nSquRkKuQZveXjH5p1EC+x6FUuXiEvFb6MeCAUP0Shay9hd/3sT0SraLbN3S1hsEEvFfDcSC35iA9teq4gDynVwmlAYH6dZAy8BkyUYTsLYGvXxWMvnbHcXjVqNuVyOVCxGpVEjlUxj1SwiZuKKRSzmpmdBKTQz9FIkEbM1EAqBNqERmigGIjjajatlywzZICLZ+Sqstgni9zsb38U1hwfv3s/oubPCJ9lh0jHSy/DIMF1RmNngFGvE4gz3DeI1HOxmk3q5iqEU9abLth3DTJ85uxmncBmK+RI7+rZTzOUvLaviNyxueSlkctH9d8t/5Rfu8CpjS1isA63uiMgC34S7CUkX7aZ+rhX3r2ObeEcavaMbx4F4ogezpxuV6CeV6KRhw0P3331p3SA7czm30Lzb4IEyNGJxEwwNTdPI5/PEIjGyfT08/9TT6zjilaFHFTW7iaOHw8xATI9A8wkiPE3/XSekxWs3bAmLdUCPhWqlq6+usqM1XJZYci3BtZ7ktZ7EGsc2qBcr9CTjJBoRmKuQSsY455eceuU5gphFwA735mX212pYNBp1XF1RtS0yHV3EYjFc18XVmqS7O3jhxNl1HPHK8FwHpeu4LaHTwNxwW/4PTJJIy7J29A9sCYt1IOaF1mR+dmrRdXYOzY+Ut9qfK1UKvLzO42oXrMfW/v4T56kaMeL7Oml0ORipOBNTM5e0LCvVdcmZrBA6/deW2V9rvU1hahq3YWEpGBweBjRq9SZmJsMt+w5csaS6hBlh/PQpnEbo7bbxSXQRAWEigiEYiIr21CqgPQVY26PsBFbm0oVjZy+2S9ujNx7vAr7L2grkkqk0J14/QVyDmgsH93VRz9eoITOuZjcISLI8xFGYBk4usb/WaEg2k6VULNPZkcWI6BQKeSLRKJF4DLuxUkuo9aPRbGIBqoUpq5UZLQifOoQaRqujs93QjsfU9jBbGkdeH0wFm4sZ4MfWuM3orBSJNV14623DxIngKPdSkV7Cg7sO7gZEECSByWX21yrEI9E4tWaNbdtHULZHo1EnHouhaxoXJ69c6ZJlOdhAKpokkBetQqH1f91/D/Is2hFbwmIdiLRMme1QXu63wCSNpAnrzA8dvtF4AfjrdW7rAPVCBb1sk+kZuHR9SzGX6lSdYeT8mhk4uG2YW5bQjYMHWwcmpqcYHNlJLJ2kVCoT1Qy0aJTuaIZnH7tygWo9GieaNBkYGGZosHfed4pQo0gQZnK25ly0G7aExTrwRqfgKuAgcA/StWohAk6MEtKsxkHyFtL+e+DsiyFp0B2IULmaAmUhWsvCco5HPVIkGg9dwVOPv0znHdvo7JRzHRwcoeDmyd66KF0KChmADuC4LoZh0KzWKRQKZHt6MJSGp+u8cHj5GpONwHE9jGgM27Xp6hDKl2DAech9sQl9PAEfq0Z7Dsx2PKYtLICHlPU+BVxc5TY55OHrAEaAdwNvQohhdiC1CQut9bj//RuNSGR+JuzxCwUOn2ty4fBRIOzc9fQ3n+GVnJzTS8fPE0nEqOVc3tuZvGyfM8hAHB7opDvdRTQa5dzxk8zNzmJGoyQSCaql4hVtqD05V2LX/tuYmjpLrSY6UtD8J3ByBss8Qn9F8LndsOXgvI5RIdSClnIEQhj7ryBC5raYtMgzGlC0oNiAc4QOucXQWiy1VjSbl5tzChj3JUgZ4TqIAAXCZKbaxCwRBXaXf+AtCBKa9u3eS25shuLMDFO5Crce2AuAZVmU8oUVj6179x5mT59a34kBc3PTROJRLCfMnrGR69VAzKQgSSuoFYH2MG8Xoh0F2BbWgbWYFB/aAXf6d/5QL3zoPoVNqAKP1aU/ph2FsQacAvoIH+TFMks2kjDdP3C5ZtAqlDKA0QHDN+wmQ5i8NFoGrcSiHctDciKdZDLB2OgYqVSSSCKN67rgeZw+uXJZeo95+bGtBW69QSKWZHJq6tJxuYhwCEKmQUQk0CratZdMOx7TFtaBlQKAh5BB/iOD8Lfn4EUX3rUdTk/D0096NIDbkvIAzwBPzMDxWRFCQ4Tmz37CLuAZxEQYYu1tBFsxObG8F6gBUIdzx09jAoODneze0cnuQTCHoTG99LZTuRlifZ2Mzcxw8LabiEVNOjo6cJsWMysU8Oy4717KpSK3HFwf53QXMHb+LLajUff7FwYZm63ahE0oIII8i3YkgdkSFm2KGJtbonwYERbFEjzQIbPbP14Qh2jcj/8+V4EpYK9vnM4gHb8fepsIBYCABbOCv62/zmYhtkhrhWGgMSTcmrOAnUoRa+ToyRpUytC7DH2mYzeJGSYRI0JPTzeGrsB1sZorK/oDkRSmaVIprI+bJBIRYVB3wqEfZOgEAqJJ6KMIGhoHCVvthi1h8QZipcG/HZmlO5D6hwTwIz1w9/ZlN1s1asCzZZjOw8MtfC8nmuIEDRTu1214227RMvYBX3oU7t0O//a98B/eD+/cJuuNINmomxnmqztw15375y1zgZdPw7AfHOm0Z7EVnDhmYxXg7OzS+6vaHo7t0dmVAVfhmlFMNMrFlV2bpakxxsfHuDh1bl3nYqZlyLulCtG4SMFgwAXaRRA2DYSGQq5pOzJ3bjk4NwmBKp4DdiOagYPMvgqZgZdzkw0hDrzzzK84nJiRwbIXacKyEdSAfQZM2XBxXB5IBxgAupHZrAZMA4+elnDmKHB3J7g6HDsCMzV4ws9wP7/B41kKzzx/Yt7/Z/33clWO86UzVbpi4uy8DRhfxk+ZjCSpOxapWBbbA03TKNWb2JGV58nZi7N4rkfDXh+Vf7Rh0xmBcrlAPJGgUStdqvtZKCAUcv9t5L60o4NzS1hsElzEtk4g3vsmkNKhNwuqBrE4nFqGw2WpkGgwa29UUAQ42VKldm8StAYc3AOvV2FXFm7Yo1OyNRpzFs//QH736RyXRRuuGMJM+svQWmw1Vxen6zTQCWQzUY4VL6/XTcWT5HI54qmkRBtcl6Zdp1pYpsOyD0sDpesMdA8zNzm25gFcbnq4UR2t6pAvluhGLmNQjh68FOHz4yATTTtWHivPu/otO67FviGt6ATu6oC8B0O74MRhmaFnkdlvKZ7OLawO9x/Yw5mjpygjgtgFOnsgNyM5I2Wgn8sLyxJxjWrN5a333kWpVmP3/t1MjI5RLRZolgocObd4ESDAwN5bSHoNcrMzKCOC5zTR8hVmvNUP44MD3ZydmKWhgbWErWYyvyzd8N8TrD6nZg143vO8N6134y3NYhOQA74V2A2H4ad/KgI5i+de9iiMiTAZX2b7zUQEGUBkYaywcoVru0MBztQpKgZ4dqhppRNRcjQ4R8hZuRCxSIxqrYpuRsnoOhFdp1gskDRMotkM4s5dHLsGByjMjoEGyWQSkwSZnj5mTq6+H2o8EZMq08DmWAQB0Q1wqQ7GY2Uag6uBLWFxBfC1P2tiAnf0wYMPwg/OwviF5beJIz6CSVZPyfeJ+2Dnbo1Epg8vatIRMTFMDTcZpdeIkO0bolgp0mxUeOKJF5gdg9cOw7PXkJrjAXUT6vZ81fz8+fC/oB5mIeYKVQ7dejNNyyWRSlIvVIioCGgKu758cDKqedRrImpty8I0o5Tqayu+t1yLGOChU8XBIYx2JJhfXRqYIkEKeDsWk20JiyuAQMn41hTLTV7zUGPlXAWVfRsHByf5yTteAw8SKZidcIk1Jzh7EpoFqBThzIwIniIvStEVkExDzxAcug12TcKFCvxgWh6Adibb6eqNoIwkGTPH9BJjNWJCwlq8e3c8mUQzodmscXFOBv/U5OSyocl0fwfPPf88/f1d9PcPAhqpVArLahK5sHrno9u06epM4yRiNCamLzXRDhzJKcJwaXA8QVFgO3ad2RIWbY27YWg/99/cz4P3RGnUSnzn0TzTE1Cag/HXoViDWSdM624gkZU5QueZiXQct0pw/hzs2APj/sBrZ0EBYBeaxG4epD6aY4TLIzAaLClE9u4aAV0RS8QpF+aIJKIoTaFsB3sZ+vWbd96Ao3mUchW6unrQNI1Go0EyFmffTft59bUTS24779grVZLd3eTKFVoVGXfBq0YYBdEJafbaDVvCok3wrl/5Kj3DA4x0ZXj7gQTZmE2aC1wYK9JoxBg9/jzPnznD5NQYTz0vTj0HEQQFRDiYiGqbQCpQk8hD5wBTRYgVJatw5tX2Y45eCnoTYtVxNOScF2K5HI9IPIWOQcQw0WseZFxMI4KTNPDyS4emnnr6aSJA/54buaWnm1Nff4Rt/+ztdORdvvrK8VUf+2ShTm+/hq7mGxWBgA7OR0wVeTURodGOSVk/dNGQH/3xn+abX/38ot/dbEDahmO88czKR4+8QiIS4dVXXieWTHD8tVeouDWaVpVMNkl+apJcoc65C6P801/9NU0keasTcbBm/PcmsD8Ck01RZYPiK9c/pxzw0H5481749Dfe4JNcJ+69/S6abhnPVLzw3Kur3u6hB+9FM+J4nsJuVIhoUC8XqddLvHB8eSdSnLC3h4cIXw2Z+VcraPcbOubQEJpucOTM0nUoKURwxP39mwi9wBXIY/nhi4Yc3HMH48VRZqdX6RAItstmSGSXdh2N2z4rE6IaxrlcaAQe681GDbA1k0h3F6Zpcc+PPEChUKBczHFx9DyjEzW2dyeZdArkkRuXRx7iKCIQkkAvcMw/wLP+vnsRoTISg5vjMHUCPr06TfqqQxkxXnn1JPtuGqBaWl3adZDk5Doe0YhOw7JRKOoO1D2byamlg5LdSJg7aP4TvIJEqbXUbCTTWRxNI7FCf4jgrGqIlmHTnlGs1TRG3q6UelQp9ZpS6lWl1C/7y7uUUo8opU76753+cqWU+oxS6nWl1MtKqTs284BjwO/9wWe49aH3MrBGTrtXykW++sd/suT3c0gp90XkAWkVFHEkCSiouFy+h/faEY86xFSFvTu209PVg+4YJImRyaTo6M+ixwocPzWK48u64IEq+cfZpcN99+m8+yfu544bu9ndcmenkZqOl+rwRA5WCMysG/uBX9u9ufv07Dqm2U882cHk7Ooyw7LZJAODA8zNFSmWZtFUHWXo0lAoEqMjs/TdKyP+nzyhBhFHNLPgvWfxTS/DObtJ544BdG/1nqEmIqzaMSlrNbUhNvC/ep53E0LW9ItKqZuAfwt82/O8fcC3/f9BOu/t818/C/zeRg7wzQtiYnWgU/e47y230bcnpGr59//qYxwc2M7dP/LepXe2gVK+N49k6UspevwCis22myxbw7M0LKtMs16n2iwzNjfO6dOjlOZsRgYOcPCmXSjj8pJpG3jVgT990uG3/ur7PHpslhcXMeaDMvYr1bI5DpibHvMzmasc4/i5KTxndTHfYqFCPBojlUnjKRPHM3BtheNWMCNRuruWFhbBsHaRgdtAZnyLcLZfOfdTEElncJseE1PLFK8sQDvS6QVYTRf1cfycIs/zSkqpo0gh4AeAt/qrfR4hdP7f/OVf8MQZ8pRSqkMpNejvZ834yGf+M8/+4q/NW3by1AlOvnSUWouL+T995kvyYeLKzJuPn59fgLDZDEsN26VUqVB3LDTLYWZmmu3bt9PT00OxWKRSKWK7TRJRGfIm4rMYNmHGkuOxQXprJKFage1xOF8TP0WDNyaLdPNdYDK/z4yeWjU5sq4bdHR34+GhUEQiUZp2Hc+CilOnJ710I+SgQ1hQqxF8Dk6rxuoHtBXVqU7noHx9ML2vqepUKbUTuB14GuhvEQATSMYtiCBpHbGj/rJ1Ye7C5YP/wIGbuOO++zH6ltrtxghLrgY6o0l6khn2DG9ncHCQPXuF0amUKxDRDNLpFJblEY9Kbp+FmBevWfK5jsyEp4BTFZHuz9TkxrxRKq0FuJtcLtkaFVitryga1enr6SQSiaCUwrZtHMsipsdwNI/vP7F0Z5aAjEZHrqlFyDtxyReCnyW7AmYnpzGyKVI3XpnGy280Vi0slFIp4CvAJz3PmycqfS1iTXOKUupnlVLPKaWeW/R7RLJ/479cbsW45RKFZpVabXG/dOrepd0ki2X6tQO8mI4W06g7TQxNwzQMdE9J9yzHQVcuUVNhmPNvWRPJ+gza3y2GNyp1WHF5O8eNoiMOQ5G1Oac6Egk6s0liMYNt27aRjCcwNI1K3UY5LuUVVIMgfTyo2wiYrSC8lquyaKt1KvUaOIquTNeazqEdsSphoZQyEUHxRc/zvuovnlRKDfrfDxLmKo4h1AwBtvnL5sHzvM96nvempUI5Qcz5pUW++9ZjP4BmgaangXm5JXVgmTmoHePXAImEwrYbGJ7Cc12iRpxGw0bTdNAULjoNDNDWJu5SvLE5FZsZKeoCdBuSmbUF7UZncvzZX3yN/Xt3cust+xnZMUB/fw9dIz2oFZwqAXlu0MsjEApBpmugZazW75MvVMk3HNyIe22GHluw4vEraaf0OeCo53m/3fLV14GfBv6L//61luW/pJT6MnA3UFjJX7GtN8K/fF83U/U5dMPFKVrUPcjPQXEaZi/Ak36K4jDwzLlz9Du7SKd6wQrn06/8f5/m3/35d3n27/5uyd+qA3ffcwtPP3VkpVMHJN69lENrtanSK6D1RwAAIABJREFUQRhuOSg0dN3ENGNU7TK1eplYLEql2kRpOqqpE/NMksnFnXMpwoc5S5g6HtQjtB7vlQr/uoCziSmhh958O8dOHGWgs4OTM2sPJv7u7//JvP9TwO233bTsNgnCexUwWAVqc+C7iLB6YTEUTTJaKnH/nXdgVcf5x+8dXe3htx1WI+zuBz4OHFFKHfaX/RoiJP5CKfUJhPz5I/533wAeRqgQqsC/WOkHqpUmT/7FOJoD3/Udcv/zPhgcgkIvxB3YcwHuuB+e/jbc3HuRJx77RxKJA/P289n/+gWOvbByp9DVCgqQuHuU0MYyCDth2cjALLS8B0gSsh2tJsHLtR0MpeE4TXBM0ok+8vUp8DxMXceoXGQwG+f//S1pitM66wV9JoJCpAYSmVBIODhw2mUI08CvBHTA20Q1Ju1WiRXqfK+wOcXaZeB7Ly3dITXBfN+ETVj45RI6PAOhvBrMJjV2dmT4+29959KyINP2WsM1lcHZCXzifvj09+FOHSacReybRTCU1LhYWZ0PO7iRNyVhcA/cf8c9PPDgO/jvX/wsZ16fYvK8RB7qhKzMwWQacBJEkMHamsyz0kxUyE1RnpvBTGpYDZiZLPD7v/0on/vyt2jy6KX1hpGIR4X51PxB3kXQlewiYRQkQJDteSXQhZzrFO1JNrsaJAjDozqh4AhMExOfx/SqHN2mYEMZnG0jLDqBD71dHrpnC/DY80uvbwA3AM0InNxkffpd++G9H3mYEy8d5vRzF2k2YNe+Yc5NTVG3LAYH+njiuSnqiPaw70YN13N5+rgM2KAHR+ugTBN+t5RJ8/ZbPsl0bpJaw+T16e+yMNn37m7YbkHegooD5WZIi+cikZEexPwoE/IkBMejWJ1gXS+ClOXrBRqhoA+cnIFWEURLrkGheH0IC5Ab9OF3DfHKP15kaD8YafjWEkJjABhJwTMLntAbdSALx5ahsFsKPUBfBMxOaDZkANx573a6RvawbXAvvd0Z+nq7OTuV5+UjJzn8zNOcfmmcN4+AsbOLU4fneLYoD1aaMH23zOr8Fq2IAbcYMNgLMRcuToLRC7ovHZw41Cdg1r99UVl8qbGQhk/th5hB6x3IcVYund9Ig6F2QZJQqwicmwGpbuu5Bcuv/qhZF64fYbEQvVGYXmSE7QbuuReeeQFGFdQXZBvd2g8vL9Fi+/Y9O7GVzrnJixRLNW6Mw5vfNMyNN+zg1RMXSZkJbjrQSTKbprdvJ2XHojExxdhkE8stEvXKDPYMkM7EOXv2FDfd+gA777qP1195ltHTFzA0h9/8zb/j7gOgkvCl55Z+sFKIaZAGdpgQy0C8A2iC3QQ9A9NzEIlDIQemDZEEjOfB8SSnwkNqP4JiJ5AHuoywb59e+rKvGQvpMU3mhxUB3hOHf9hIE5GrhAhhp7NWBLGTwAy5Fn0NLbg+C8lu7oF9D74LM12msWeEr/+HL1/6rjcCpSl4vQFvu28fjz45vznfVAFiEag34YYYdOyDp32f5ounznJwJMoN3Q2iNmx75/0USiVePn6Y/fuG6N22C226RG+qi3L+Ila1xLHnz5HcdyNaxeb46BFKNY3x115C9SZRqTh//pk/YKwIZEGVoD8Ojx1dmUMx4JQEGLUgPQv2LBwwwTJgYhJ29sJ0DqiIaZNuiqCoIJpKhpBxKe3vr4QIovUKil7ErGnVKhbj0V04cA76216LaCKDoTXCFfigAgKhN0J7amctra00i48B30NSPgH279E5cP/7+NoX/gaQYpOd3fBIS6r9wot7Qy9EZ8F05QaPI6mlwyNwYRyyHZDd1kPx/AzpgT5SkRS7bx3gxNMvYxfK3HT3Ley/cSeKKNVaAY0GyjDpGbiBV08cI2aadHV3MjAwyMUzR/nd/+ebJNIwtD+O5UB5osY73303VafB//Unh1kvOpBITMl/DyItFUJW6z5EdTaQgVwlLEnfiP8gIM2xF3xuxUKzagdwC9Brwh9fo9OvRth5PShFVwu+b70OyxCRrxtJQiKjK4DrzwzZc2Mv7/2pj/LaZ/8bnUno7IInXoNXW2KTn/nVn+Nsyebz/+1zaMCODFhVmLVlgLnIjbWR2XfPIEyPy809u8gx/PI77yA9ksKyS/zYOz/K8YvjxCKKM48/RkPL8YH3/zP0vn7+8r//Md9/9EXueus+zHiMqOuS7e8nmczgZuLUJ3I8+/JL/Nk/bYyiN4b4UKaQgRloC2UWd67tJ+SrWO9Y3YnEwBOE0Z7WaEDQYi/o1xmgC7iP0Cn4l+v8/auJgBMT5vcfDTgsWrucQ3hNNnv0XGHH6fUnLN63E1QKbrxRbsaX/irUNkBu2ghygxNZmCvITQzKi03kwQ5m135DcreW83neM6xjFR36+3q47S23M1XyUIk0I2mXWKTI3//xo4zmoTsCd7y1D6XrpBJpBgYGSKVSmEqjHtFIxRKM53L8H//3t9Zdk/GxN6X40nOr0w06CR/kdfh0LyFN6OALtLWgeW9Qnl3312vNG9kBvKcXxmaF7j7NtSksFkMUOf9Au4LQHLlS9TZX2Ay59oVFb1p5v/xecBVUtDh//8Uay/EhZZEHtwd5oMv+/0H2XdDKPo0MphLSt3M1WBgCPAD07IR9OxJ0JpIYqSyxaCcdHSkazTqJWJxYJomjbDqzXSRjSZKZDj7/l3/H5/926QSgjSI417s6YXQDHBVDyPkGjFCzzCeSTRImey3safqzfTCXkwz0St33m+jwZ9dgTLFd0M5mSFs4OA0NHvkGPF6E1fTjDvpruohGEcwAUSRhZj8hxVyBtaU2twqKGxTc+7YeOrrj2GVIZeLYHnT1ZvBcD9uq4yiXqEpSqTZpamUSRozSzCwf+R9/is//7b9f9e+uNQW7Cnz4AHxlA9nD25DrFeRjBNRxwed+xEm7ncWF0ewMl7riBFmu3nUiKAI/kELOrc6VzasI/B/tfPnaQlhMFFffibsPeZA9RCDEgXSX1JEEiVAbYYwbVFD34JZ+2LYjQVdXF67VYOe2ISy7imXZ2FYdHJdYNIrteZTqFWwHMCLUmg1q5SaH+lZ/2zPAzYMmPxhfnbchARzKbExQxAjNjixyTU1kZqvjs2YjZsZiuufHkuA0wPbA9g/b4doLLbb6CIIBu9CR6RIKjytlIrSWE7Qr2sIMWU26d4ZQSPQiAyYbgYmmLAtqINaL2xKwqw9GBuPE+3vRNIPu3l7MmEIng2sVfTr4BIl0klK5DLpJ06oTjUbIdnaCUpTLFTQtQjIeJbt7hPf9898BoCsNXYPbsGwHZkvMFMpXUt1cFvsRx2knIjACQpcY4o9I+J8jiPm2kDTn7UBEg4DOtO6EjX5jXD8+iwDLOR2XKzRcC4JG2iZXlH9zQ2bImshvriaKiFDIIDNeDphqhjPgRgTFIRPuuFljx/5uktuHSGW76Rvchqbr2JaHZ1WIp5Kks53oEZN60yKWTJNIJInqBrViiXKpjKkMXMsmjoHXbGLkyjz25/+GNx/oot+C3mKZgWaDfKG8rhlkzwbOMcABxDSLIwIjyPb0EMEQRXwWvYhTeTF2LQtw/HCA50Jcl/Vam+VcD4gRRkKWwmYICgi1mnYk6g3QzloPIJLbQh5EDSmi6kMeztYISRRRpwcVTPlJSysV/LxnJxy6fy+mihGNJEh0ZenOZqjmZ7Ash0QyS0dfD55rUS5ViXgN7LpFvlQl4jp4jke9WMZzHU4fO0o6FmV4ZDvnJqcpTY0T0Z4mkkly526DU03QjTyjuTC0uxZ0IBmb68VB5EHMI9eqjNz8IAsTxIcRfLecgzmCn8bugqHE56Q5oR/pesEb2eWxRnu2LGxF2wuLDkRIVBHPfcX/vDA70kTU6nOePOzL0Sp8+fO/wflXD2NaJSZLReJOHSueok9zaXpNorEkXX1pCqUqhVyJVCpFV1c3xfwUKtJkZMc2ZmZmcXUXZWhMjk/hug0cXSM3M0sklYCODC8+fRajNkMiIgxS4xfBrMnsrqfhdQUPvv89jJ+8wMtPv7LsddhIH5MbCYlndcLwskEYAuxBtDYNWLrDhaCBCIwIgAeWFdaitGMnrXbEYiHSq+8QWB5t67MYIHzAU4T9IWOs3hm6GGLAxz/wAAVXw7p4gg9+4AOYvREi+QLF5hzRpocejZPs6qDpQXUmj25qxBJxSsVZDNfB1Txc18Vu2MxOztL0HMrFOdx6Ex3oyCaIZPt47fTrVGbyzM5I0lgtBrUK4MHEDMTiMNzfx9DBQ0zX8xx+6ijPndssxVZwJ2GiloGYHzPILFbxl0UQjU0h13Yaud5LzaxvQ/wacUDXwXJC+voUIQvSFtoO136ehamU957b0hSbFeqzLpYF9TLYDlRcedBb2wkFPSHThEQ0q8FH33GQf/qnV9iLzKQXgLfeGyfbMcyF51/nJ//3nyfSN0RlfAwtotGkgVUpUsnV6BzsxXUiNOtlbKuCY9eZvjhOtVoDI8709HnMSJrSzAylgoR/e7qhI93D+GSOi3mHeANG9g9Tmxgj50A8A46lM1F06BlI8+XviaD4xP/wEOdfP8IjL0qa1QPAE2u8phnErDAR4dCNmGVBToXjXz/NX/ck4stYTXXsO/39RhUoT4SMgwifKLA0T9kWrjKufQdnVIOpYyXcCy7KAl0T1dZyRUi0CgqNkEh1LdGEKLBtz+C8pKNDCSi/VqOSdDBcqF08i2HVUREPzXVJ6BoRu0EsmyWKQSKZwGq4WFYTU9Po7MqCU8cpV7hlz25u2buHbSODROLQ19dBrgAXxmbIdiQ5ePN23nTvbvp6HMo10BQU5qDpOKRTBmOvlnjX/dsAmHrp+5cEBaw94WovYnpoiPnSSWi+mYQ3PYloBxYiKAxW90DE/XWDeSYIKQY8D1u4PtE2PgvDgamGsDmP1cQbv1idQ5z1FUn1A0dPjrETmWlv0sA1oWc7TP3gDKdnQPv8N7nlwYvs/+BHyVjTeJaFFc3SPdBD8cRZUt02sYTHxHiV46fP4CkPx3NBy/PoY6cwPDCisOPGEaqlHJ0qSn7G4tlni3z4vcM8+dhR6g1oZKArDkOxDhLpFOX6BLs/eA9OSeP2n+/kN35fSmQDwXhujeea9bctExLvBFGPwAnZiQjQCPCsv10PqzPxAj6HhAaar/kFCV3tnFS0hY2hbcyQPcigeCM80PcgUnIfYAxCTcFDP/fPee7Fp6i/9Do/8+E3sfNjn2T0yClOH/0uIwM7aXR1Up4tMTs2SqGUo1iYJRbT8WyLsbOn6O3fg0oZ6KbOzIUpSuUZHBVh755b2L53H9977B8w6k1czYWKS6Fs0bszQ7xzG4V8lD/81otrJshZiAcRv46BCFqP+cS9DmH+xADwgr9srdf8XYCpiRmiueB6IV9lEvjzDZzDFq4orv10b4c3TlBk/FccUcv3dUC+CY2aw8SFWY6dgc9/+jm+Zv0+ez/0LyidTDLnFvEu5ClWKxTreXJzMzjNMvm5EpV8DTOdYsdIPxNzOcbOX8B1k6TS23nwgfuIxBRHnjtMpGkRiRrUiyWKTchkoCOzndl6hCOnxNDaiKB4APFJpBCzLY4kqgUktGWkOrSOODNbzY61XncF4Eotj+uFpsf1Fjrdwny0hWahlPK6kSKmK4EI4uAbIGTn9hDVfD8Snh1DnHwR4Atf+QJHDj/DzliFPcMpxkoGhfEzWM1ZpsbGaTpVaqUGiVicmbFRKk0ol6Arq9CjGXbdMMzk2AVyUyXqFugxsPLih0n3wgd+4idwu/fwkZ/7jXnHuZ7y5A+OwPR5GfBBQk/CP5+ADyOI3/f7y/4JESoB+/da8T5/25gONefylgh/u459buENwbWvWWgsLyg2QmfWiQiDCDIw4oRUuLcBN0Tg0aYM1I9/9AF64ln++nd+hWa9xrF6g3/17/4X+iM10pF9VOpDdAzsx/Ya1BoWxXKJjr03Ekv3YVsuSdWgWZjm+48/jWbYWAoSnQaVnE3Xvh5S6SyRWCeF5M0Uz1/Od7FWQfEQUD0fpmkHNzOPLAvYnwJhGUHYs1KsfM2XQ0AK4zghx0XAVXn1p54tXCm0hbBYSXW1gIcfhBefhnE/62dnv5RH722K7d0KhbB/RxF120SSuFozGPYg5shYU4THV/7o/+TiyTpHTn+Fht1AKYd4dxdf+8K3eN+PPcD27UlqdZumFWVk+z5s1yFfymNXmjilcZ564lFeOHYKM9vFO3/kHcxV58jlypiOIr3PoLNzGKNvB5nhXcy9foRf+dQXNnTNuuESw3hQhZsiLAIL0q6DaEc/cBzRqnqQpi7rhYNoFbQIi9aGwlu4PtE2Zshq1/2bL36Os04DwzDYs22An3nL+zFTOufLMi/vQtTwNBJReZ7FuTCjyEAKyoJ/9V//T6QiMRwvx7a+nbi6jeUVcAoWFaeKmUyjqiVmZ6awmwU0p4myG+RnilhFj7pTpFlv4hgmjcwOenrTvPVt7yCVzFCsNRidLfDNL36eb74aJqGvl5btRxEtyUAcmEGUI0iMSiNaRYLQT3EE0TY6gY32xHq3f9yBKRMIi4AwZ8sMaVtc+2bIavHLH3gzr7/8Cnc8cBuNBjzypb8lB+zwFfhDyCyqI86+OZYmzQ1IcvqA4QwksxEUGunUCIlkHM+uYcQO0HlTkkximGp9nKnZi+w27uLpRx6lVJqmXrHRO3bRe+sInb0Z0tEUncks8f5haoUZjr50krn8Ucq5OZ78yycvhSgDrFZQtAqVdxE2L7L85YEGFXAv1BCNowfRps75/ztsXFBASIYTmCOBz8JmS7O4nnFNCYs/+Nqz/HpXiuf+sYDuKSxzlixwvCxhQxOZUc+zuua1I/hFaQacf/U42a4UlWyc7z31EtlkhnR/J/kjzzM3nqNeh46UQUO5HHr4I7zpwTtpOjaZ3hGKjSp/+nv/iZ19e7nvR3+U155+BcoN/upPPs+RnAza1lyJtdr3wXo/ATQ1sN0wazLj7y8YsElkEGcRYTmHCI9+NkdQBMdvEnJQejqYzlZC1vWOa8oMSRNyQhaQgT617BbLQ0MGkUGYJdmDCJwqIdlvwHKd9ZdnCNv1TSIDt4A4Fm3EoTrsfz7F/EjBenIpBpCq0Yi/r4CoRhFyfCQJ8yq6kPqOi4Q1NZvZtvAh5FoExxOUpuuIyfP1TfytLWwqrmy6t1Jqu1LqUaXUa0qpV5VSv+wv/49KqTGl1GH/9XDLNr+qlHpdKXVcKfXu9R5cgChwF8La1IvYyn2sfibTEFt9D1IvEcBFWgUEbf3SSHZnERkEQV/LKjIoR5GZehqJKpxBNIYqYaWr8n/nhruzHGe+oIixsqCILfj/PcCdmgiCgCLQQARShZBA1kQ0jYAqbxS5bh1sfn/TgDLgkobk34itPIvrGytqFkqpQWDQ87wXlFJpxGf4QaRretnzvE8vWP8m4EvI+B5Cwvr7PW9pdsbVaBYdyMMf1IOsNuVbJ2wSE6ATETgFRAD19UBuRgZZECXIElZmriZsuxNIK0h2wlMLkhf6CQve1hIGfg++/0GHkhP2tIgRVoYaiCMzglyfo4Sp3WdX+TtrxYPI9YH59SCB8NiqOm1bXFkHp+d548gEjOd5JaXUUUTLXgofAL7seV4DOKOUeh0RHD9Y70FC2Ji2AxkoIOr2Srb4wvZ6acTUiAP37ARDh9Kc1EQcSsH2smgRJULTIqjMrCMDNAjBZgk1hSFgwoOJFkFhIH6Rc8gAr7M6QdELvLUXZqaFB0M5cgwRf/tZQmdm2t9GRwRdjFALulK4JBz8DM6gcxds1YZcz1hT1alSaidwO/C0v+iXlFIvK6X+SCnV6S8bZn6h5CjLC5cVoSM2eZGwl8UQfp4EIjSWQqCydCMq+m5gRxxGeqFcgWYNzKgIj5NliHfJ78wS1lXcQ5jcdWNUzIwYYmIMAW/ZGWHUP+lAkPmk15xm7fUXb++AyjTENSkBD8KgFmLy6IjgSPi/kzVEiygjAm6CK2sOOPjmlS8ogqQs2HJyXs9YtbBQSqWArwCf9DyvCPweMm4OIZrHb63lh5VSP6uUek4p9dylZYus148M+HFCR95uZPCdRQZ2YZHtWhHMyD347FA1cHKQ0uHCRTg7AbfcCvv3ghsVjaEXuCspNPgXEWHTBXSnxQcQaBkKeOFsk/OEWsM+wvZ3AYJMyqBpzWL4WDd8LAVOQfbbcEXzCbgiasjnlH8saU329Yot36cR4bQcS9hmIDivIBoSRGbg+uLg3MJ8rCp0qpQyEUHxRc/zvgrged5ky/d/SMh5MoaMsQDbCH2Il+B53meBz/rbexBqAcFMNYAM1N3IQNlGyMmwW4c5/wkNnHtLoYn4FAKnZdIEx4IjExBTMNwP1WkZmGYROtNgNuB4RQZmByKUOjQoz8nA3I4IjHHmk6wmkRqThYggJstSx/mxQagXwVJgepAyfV6PRpj4FFyXKGCmoFGWtgc6oum8tMw12EwEvomA6BfCJkVbmsX1i9VEQxTwOeCo53m/3bJ8sGW1DwEBieTXgZ9USkWVUruQifaZlX5nABmUJmJeDPvvtyAzWQdiz7jArQ/voOrAzf62q1HxRxFhcREYs0CZcLAPhrf55C8OXBiDoxU4XYL+7XDDQMgqpYBjLsy4YnpM+6+FgiK14HdNwh4dSwmK/YBX9IuzNLAj0LDAbYTEMhoh63YqAb1pMXsi/vfLEexuNgLBYBGaJAG7dzuzU29hY1iNZnE/8HHgiFIqaAv+a8DHlFKHCHsN/xyA53mvKqX+AngNeY5+cblICISagYeo+8EA64pCvhGyYQcNhr70jXO4iABJIVpHJyGx78JIScDfMINILgeYsmBqKmS3PuX/dgYY6IVjp8RxGrSTixE6Oc8yfwbNIqZQxf+tXsI+JhZLOzV/YQ9U8mDp4DRlRbsmmoWlwPLkmhiELOddWZgtwOmqfBcBXl7u4l4BzCDnGPX/DzSNK23+bOHqYjXRkCdY3J3wjWW2+RTwqdUehI7M1kHmoa78NOKG+Ae6EWFQQITDbsJsxXHCTt8RQnU9yAPYRpgWnUWiG8f937shAQ0b6k0ZjNPAcAy+MR1qOEElxwhh5SqEWsIu5ldvLpXT0FpDEaBaAs8WejplgN0A3QCrJkIp4q9nAbEUZDTZR87fnwUc5o1H0NE9gURrNAO8lq5kW7g+0Rbp3nXm29u6B+8eht6dO5j+/jkJXabALIeFX8HAC9rKBRmVvf6yOjLQewgFSE8KXizLQ54DXqmKFlJDqlQt4JW6+DWGEc2lgazTi4SAgtkzgwirxWjzAx9CIHC6kEEdDKRPdIsjte6bQ1oetARkTSgU/WxIE4qW/EYmCgkTzuZE2AXZpcfXca2XwyBhg+lORJOz/eMuINdikjDFXFPSFNmywV1IarGF6w5tISwWPmcO8MgYDI2do4b4JnLlcHZOaHDWDTuJB9sEORU68nBbiF3fB+zcBqSgdixMgQ48tMrfRvOXvzUNHd0Q64XRcYgb8K2z4TFuQ7SJVkaKgGY/hQiKScI6lfMt633yENRKUPSTJWoNiCXAakKz7tddpETjyViQjAur1slJ2Z+JaBxXwkcRnE/ZP/YMYWHeIHJ9BghzPtBEUARNqRtsZXBez2gLYbHYhGQhyUzbEN+BTvjwam5I3KuQz0FpdhQZyAF9ngHceR8cflIESMLfLpjlDxDWmmSRUK0Zg4YBHWaE7d1NvvrS/DRti/m93oNy9yZipjSQARVlPv7lPpibANeGVBQqNUhEIRqBQiMUdrEYaDnoHpAIjVYULSnu7/fFVV7Xhbjx9ts49eJLS/pQHiBMga8gZe0DiNkxhB/ORQSiDcRc4bVwHXm1BVX8Fq4Y2raQrAvRCPYCpf0aY7MumbjihVGPYUI6+qC573lCf8HbTegZBjyYPCcDYIaQUm8QSVwKiGFs4KASv0E8A7kcpDrgxTlZ3wRuQlT0MyzedSso1Xa5nIH8/RHo6IeYBdEmFE1oViGZhXwJKmXoSUrrAx1wLegdhvIETFRl4Or+b3x7iWt42499AE2rcfjxx/EKm8Nmug2JIvUhPps4oQb3VMt6w8B9hE7OrXTvtsX1yWcRlFefAbInXHYDc3h0IwM4imgOCeQh7Uf8Cn06pDLiNIxkYcfNMFeB2++9j9L4NK9+9yQWYZVkYALNeWBYMDfrV2n6gsJABEoQKvW4vL4jUMsDE0gj7K79M7vBdKVhkmtCLQpuXvI76mXJII2bYJt+4pYhpofuwFg1LM56bInr1D/QgVVySJUqTE5d3DRBAWHK+MLeLa1I+ecdiUKz0cYP1BY2jLa4txqiScws8t1t+PyRBiRsSRl9HJltK8hs208YLcGRcGTJhawFcRt6OqFy+EkOH5U8i05Ck6YXcDTIuaFjr5WmT0PKwyeYzyERZGT2+8vOEhZ6bUN8Cv/2EJw+DZlBSFhQaYq67kUhYkJhQvwV0Qi4mqj1RkE0nNEZ+T0bmdmXwkyugNPwqJSbzJXW0nZpc1BHNI6oAUqBHbDgbOG6Q1uYIbpS3kLH2NsIZ30diQKkEZv5SSSDMoXM9hkkcgHQkfbzKEqyvgISHVDPQ8zP+46aMNcMk7kCx2mrL0BDfBiu/5tB+78GIlQC0yDwZXT6y0cRP8gDI9I4qdCAbAxqtqwcjcBcUQhs0lmI6OLw7MhCvBvcMpw87e8zCV9Y5fiP6VBfJm45MNDLxMT00itsEPcBexRUI/CVjfQ02MKVxLXfvnChoHgXoiVMISZBAfFLzALDvfBWZLYNWvPN4DNYKxk0iaoM5DJgZEBZfqZjE0oe5HxBEfgePC53GnYTdgaPIyHMHYQ8EgF/Z5SQayJQ29+9E2xL+rR2pgEd3AIYJjiGmB4xf0OrBjETMp3glOHiaRF2NVYvKCAQFEvfzispKEDO/RlPtIstXJ9oCzMkwHsRP0WJMLIBMniG0jBRgvPT4sew/XWyiNo/CdgeNPIyoPs1cFzLE5iTAAAQjklEQVRoFuc33glU+yji4f+m/xs3IjUdBqItBFT6UUSYJfxjCxoLFwkZtoNj/NRDcOSkbJR1xJE5V4CUB8khqM/IDvqHfJarPPR3S9Xr4VfCxLIu4E/XdQXf2MBllDCDNggP738jOkVt4aqgLcwQpZR3LzIAE8igBr9KMy5hxgv5sH9nQH0f9MNoIAN7F/Lg6jHxcWBLbwssmfmDoRTzf+MkUogFojm4/vbDyGCuI8KoRqhdWP77y4ShRIBfuBmssmgJjSboOtTrMtPG45DPg+ZANAaqJslMsRSYSjSN0SkROCXgO5t3aa8oEoQEQVu4JnDtmyFJZLY/R6jaN5DB2mPC+byslwJuMGWdOBJW9ZCTuAh8FzFNOnQwfJ3JskJhkkYGZD/wfUJBAeIDafq/kUS0jh3+cXUhJtAo4ui8CNxKqPn89H5wqxCP+mQwmkRjGg3o7QS7Lp/1BLg61P//9s49Rs7zKuO/M7dvLju73rVj13Xs3KlICw0pCqkIqQiilwjJIBBESIBQRKWSiIuEIKUShJuqIpWoCEQV1EBboEkbeomQkJpCpFaCJlDkuolbE99iexN7Y69317OzO9eXP573zTc23t2xvTszG7+PZM3MN9/ud/b1fGfOOe9znuOUNuQKUK/BwRndcF3gxovJGSOO6CiuHYxEZFEwc9ejm3gaRQ9FRNXeiW7woNOQoGgi1BvCYJswu7SCip4FRC6qoOggQd+Eh7lQmecW5GzOoPrHRM/rIFkXmJ2hMayXkfnQ7X5btKGbP+tgqa6IottVncQBpYrO6TThhj1QX4KXDnqRHNPPfWEd1nIQCJHf0qpnRYwgNn9kUUCkn0PoRq8iZ7HoXx9AUcYSciSH0Td9oCJPIOcRCo1ZFM7P+uPn/DlBzaqEdlACK/E0ak7bSjpCoHdocNgJHCPVb9gC/PG7RK7KeMpzHhU2u105gFYLlttQLIlo1QW2bFcUUpuFcln9FbaJHAWk6VrEtYWRKHB2UfoAuiFDi/o8ig4S0i7Tsj+vRLp1GbY2g+x+DvEnpkidx3+SNkktkapWTaNax3kUOQRKdQ3tuISdj6DefQK4E/jZ98D0KajmYLkLmTy4DnTaoms3GkqFSiVIslK92jYByQS8chBqNXAZnfsfm+jOK6MILnT2Rlw7GIk0JGfmiugGn0Pf2mHXoVfotog+pLme46GBK9Qkgq5EgtIYhzo+86QU7D2k3ZPh55fQh79XLTsMLcqRakb8xg8AHcjnYHlRUQRN8SiyiScm+Y6qagnaTSgUYddWaNQl4zfvFJF86UqnPQ8BRioj+IYGZ8Rmw+ZPQ4I82zFS0dnzSApvCTmGMNTmHaab/DyKHArAZAJjPka6wZ9fRVHD9+1WLSKkNuMoOjB0vIQ++C3SdveghVHxv/9V//N/8m6xK8tlWOiZstz0enJZVHvIOZjaAtkuTJRhqqwaxckjUPPqveObTH9uHK1fFLm5djESkUVi5t6KPowhL0pIdStyKErIb4V8Bc4fT9mUhhxKSF3CtPRQqMygNOMoiiZCepFBjuIGVCtp+uuFAuoWdJN/pQ4f+n5pYrqOmJfLTW2BLi2qaGlAM3gYINsSU/PG66V2VZuDV2aUojRb8OVNxnAMc03DHNWITYvN30gWJobNk87QXEb1iy66+VvA2Fl49azShNCCcBbd3Dm0FTpPKmQDImwFWb7QERp2NTqoJtIkldcHRREzwDfq8Hs/DosnoJOXoa1lyBk0m1KI6rSUZjRrYE1tn7ayUK5AvQmLs3DqFNg4dJZhahOlHpCuV3DKEdcuRsJZNEnZkiGSCErWO7cohJ9pqJ4RBGYWSKXl5tB2ZpiKnkU3fAntpiyTKleF6CF0iM6QtpaDHNA06SBjW4JKVY1etZoo292WGsKabTVQdVriVmQ9v6NShO3jMH0SznkVrG4NssvwxEYt4gYgIa1TXKotP+Lawkg4C0dKkMqh/DgwKF+bk0MItYU8iibC0J0Kcgx3owgD//5xlIpMkc7cKJBuiwZp/iDYG7gaR4B7i/Cr98DCPGTbYIlqFIWcdjk6bTmLYl7qVnmT4nbWoFSAXBGOvQrLdYnoJA7+aZN9LRsqONfof9xixJsbI+EscqiYmUMfzqA0FURhQyUelGaEkQG7x+FH3gnuLHz9gPgUYeZniFQcSkPCVl/oZA3U7UBXnkBbrwD3vg2Wz6l1PVfWeMNCRmSrDCJhZTOeT+F1KHIZqFSgUoCj/wvn62o/t4UL5feGjX6nuE+RpmZza5wbcW1gZJxFmNk5SSowE3YnCsDWCdh1E9z2dpjas43O7CzLR7t87atKG0KBM6QcJX9sGe1+7EEOIqQhQRG8jVii3/PX/933QL0NmQZUs1LgzuYUJTgnvYZcXilHYxnyBcjnFVEUE1G7Z2vqdp2v6/rPbvD6rYSbb9zOyeMzKr569OMoqqQdtxvbqxqxmTASzmKZVHDGUFEyjBqcQt/64/OwtA+OH4T9doblejokOEjjFUlH/YV5G6G7NMwVCVOzElT3yCFH8fGfh5lDfoZoXj0eiwtQSWCpqzb3dhPM73hklqCaiHRVKEDHwbF90MrAWEXNZF8cUAdmSMmKQLJjkjOnz0EOisVtNLsraVxdGmFgbVAHi4gIGAlnETZvwxbpJHISJXQDFIB8VtuVDRNFOszZHCdVlQ46lUF5K0jyV0gFdLvISQSHcspfe/oVyHvl35bTbkd1ChYXFVF0nY8cnNia5tQLkiuAleD0SzA/Jo5FNwdPXd49elWoA3uu20G3WqQ+4y/chgPfO3BZvycICDn6i0Airi2MhLMIN3Kovi+hD2uoLeSQxmNSkr7m/KJUpsIs0O1NiewGh9EhLWC20TevQwW7V5GD+a6/9kd/CmZfE4eilNHvaGWgazA/qy1Rl5ODaLdU5MxloVzV9ujcOTh1SA5jfF4Fzc+FSUQDxPHXT19VKBAm0SeoxrPJ6rERA8BIMDhDATPs52dJ6xZtdAM7B1YAl4c9u6RAVSmBK+tmToAxg2pRalk7J9N0owRMZiCpKqUJjuLhe4AFKBUhScTEbGegPg+lrJ9wlkhTI5NVETPJSyavUIFGHqZnoF2Ccw0Y2wX/sAl7tkMT3BhpkTki4mKMRGThUCgd+A+Bcr2I6hdNJBSTyUMnC/M5KFynBq3SrBSxMtv1WB6D9hzgadmurogk05UjCpPPfv8+6DSg5ox2w2E5pTflAnQrmunRbSqCaDc0BKhYlFx/sQzlLrw+A66gMYs04RNHBr5064Lr0Lr3dthGRFyMkXAWgV0ZdiiqKH+uAJM7tAOR2QaVLeBMVOpq1W9dAskYNBfFgRgrqxA5MQ6tDiwW4C1j8NGTQAN+7R2w6y3QWYRGFibHHLMNbXmePw+LLdUpCokc1FJNKUou0WQwcxqaXOpALQ9LHag6+PIQ4/ZSVaK/l4sQSYS+mFOrnx5xjWNNZ2FmRaS+n/jzn3bO/aGZ3QQ8ibhQ3wJ+yTnXNLME+AzwLrRZ8QvOuWOrXSNDqtBdIW0/76LpXZ2W0gBnmgHaTaDuFalyeShnwbyydS4DjQTcOGRr8HcngTm41eDh98FCE1oL0M5CeRled1L9XlzUFmi9rt2NUkHDf1xXU8Nyie8q7SqasGVodqB1Bv7+cld9nXEljgIulCScX0d7It6c6Kdm0QDuc869E7gDeL+Z3Q18DHjMOXcr4kM96M9/EDjnjz/mz1sVQcCmyIW6lkXANcRdqI7p235iQoOCXQvKORGl6jVIyvqWn2/BzTsgcxQ+4eW2H/pReO/bYa4p55Mp+7GAk6pzNNvaAl1YUBQzPg6NJUn5j1dhvAiVMXBZOHICCg6WnIYDPdPfOm8orqTwFHgtgewWWZoRa2HNyMKpLTXUvPKkvV73Ab/oj38aeBT4G2Cvfw7wNPBXZmZulfbWkIaEYmbgSyRAoaob2ZoqNi7OSccyqXhJvaxSkD/7pqr4AL/9YzB+C3z4rWoA69RgqanCZZJ4jcwOuPMaTJzNwumzuk42C3NnfGG0qlSk2IYDL2vbNJeTxP/Lr184wm+YuFwRmt2kxWOHdj5irSJiLfRVszCzLEo1bgX+GjGj55xz4TN2Eoli4x9PADjn2mY2jyLeMxf9zg8CH/QvayeUsvz/oWRXwJV+7BuX/zOXwDYuPSRtWFg3e06sfUo/GLX1gdGzadTsedvV/HBfzsI51wHuMLMtwJfQmI2rgnPuceDx8NrM/vtqeu3XG9Ge1TFq9sDo2TSK9lzNz19WuuucmwOeA94NbDGz4GyuRy0a+Mfd3rgcKkecvRojIyIiho81nYWZXecjCsysBPwk4jU9B/ycP+1XgK/458/41/j3/321ekVERMTmQD9pyE7g075ukQE+75z7FzM7ADxpZn+KRoV+yp//KeCzZnYIqfE/0Kctj699ykAR7Vkdo2YPjJ5Nbyp7RkKDMyIiYvQxEr0hERERo4+hOwsze7+ZHTSzQ2b2yJBsOGZm3zGzfaFibGZTZvasmb3sHyfX+j1XacMTZjZjZi/2HLukDSb8pV+z/WZ254DsedTMpv067TOz+3ve+7C356CZvW8D7NltZs+Z2QEze8nMftMfH8oarWLPUNbIzIpm9oKZfdvb80f++E1m9ry/7lNmVvDHE//6kH//xjUv4pwb2j9E3jyMpgcWUJ/X7UOw4xiw7aJjfw484p8/Anxsg224Fw07e3EtG4D7gX9FvLS7gecHZM+jwO9c4tzb/f9dgiYvHAay62zPTuBO/7yKZFtvH9YarWLPUNbI/51j/nkeeN7/3Z8HHvDHPwl8yD//deCT/vkDwFNrXWPYkcVdwCHn3BHnXBP1muwdsk0BexEzFf/40xt5Mefc11FBuB8b9gKfccI30Tb2zgHYsxL2Ak865xrOuaNoFMtd62zPa865//HPz6MduV0MaY1WsWclbOga+b9zJab10/74xesT1u1p4CfMzFa7xrCdxRtsT49eJugg4YCvmtm3PLMUYIdzLvBHT6Eh74PGSjYMc90e9mH9Ez2p2UDt8SHzD6Fvz6Gv0UX2wJDWyMyyZrYPTbh4lstgWqNewq2sgmE7i1HBPc65O4EPAA+Z2b29bzrFakPdNhoFG1Dvzy2oofA14OODNsDMxoB/Bn7LObfQ+94w1ugS9gxtjZxzHefcHYgkeRfrwLTuxbCdxRtsT49eJujA4Jyb9o8ziM5+F3A6hK3+cYCqmm9gJRuGsm7OudP+A9kF/pY0jB6IPWaWRzfmPzrnvugPD22NLmXPsNfI27AhTOthO4v/Am7zFdsCKrQMtOvbzCpmVg3PgfcCL3IhE7WXoTpIrGTDM8Av+4r/3cB8Tyi+Ybgo5/8ZtE7Bngd8hf0m4DbghXW+tiHC33edc3/R89ZQ1mgle4a1RjYIpvV6VoivsIp7P6okHwY+MoTr34yq1N8GXgo2oPzt34CXga8BUxtsx+dQ2NpCueWDK9mAKt+h+/c7wA8PyJ7P+uvt9x+2nT3nf8TbcxD4wAbYcw9KMfYD+/y/+4e1RqvYM5Q1An4QMan3Iwf1Bz2f7xdQQfULQOKPF/3rQ/79m9e6RmRwRkRE9IVhpyERERGbBNFZRERE9IXoLCIiIvpCdBYRERF9ITqLiIiIvhCdRURERF+IziIiIqIvRGcRERHRF/4POSwPML5YZEgAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] @@ -187,7 +187,7 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -229,7 +229,7 @@ "output_type": "stream", "text": [ "Downloading: \"https://download.pytorch.org/models/resnet50-19c8e357.pth\" to /root/.torch/models/resnet50-19c8e357.pth\n", - "102502400it [00:09, 10819016.16it/s]\n" + "102502400it [00:09, 10362562.63it/s]\n" ] } ], @@ -446,7 +446,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQsAAAD8CAYAAABgtYFHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzsvFesZVl63/f71lo7nHRzqnTrVlVXVVenmc6TOJHDMIPh0LRhmgRkSjBEAhZggS+GX21DtCG/+MEQRFISJIq2adEzlERrODn09ISezt3Voborp5vjiXvvtdbnh326ODRAcKz2UG2ivoeqe87dZ+999l3rW9/3D0tUlbtxN+7G3firwvyHvoG7cTfuxv8/4m6yuBt34278RHE3WdyNu3E3fqK4myzuxt24Gz9R3E0Wd+Nu3I2fKO4mi7txN+7GTxQ/tWQhIr8gIhdE5KKI/Dc/revcjbtxN/56Qn4aOgsRscBbwKeBm8CzwK+p6uv/n1/sbtyNu/HXEj+tyuIJ4KKqXlbVEvgj4PM/pWvdjbtxN/4awv2UznsEuPFjr28CT/5lBxtjtNNu4ktP5hySZWAMo8GAVmawNqGKkVFR4lxO5Ut8MWS6M0F3NCTNGgz7XQyKAkYsYhQRR5I3KYohoSzwUVFV2q0WNs2pfEU16AEKyJ/fkIKOX5rx//Jjh7i0Qd7qUJUFRX8fVSUqWJvQnJigt7cDYkgbTcpRHxGpPw+IGMSl+GKAADL+p6jC+OJCnjpEIiHUFxVARcbH1zcRQiTGUP9WwBjB3KkSlSRxKOCrQMMZRoCEgBEhtfIXvrH+P56AAKp/8T2VPz/IGIuKweNIG02CRiyKBk/USAxaf84YjAgaAxoCZVkRVOvnced0CiI0Wk2yNEMEjCiq9bMXY1GNpFmOr0o0RpSIRB0/T0FF0aj170TqFVAswVeIMYixHHSHNPMEYwXrEryvUB9RAsZaDBZQRECjIuM/eIwBYww6flBx/IxVwRq581x6vQFRIahijCVvpkzlDkGJKKIG1UDU8d/QGPr7AyammqABaxNCFIwzECuIgaTRphgMQMBaW39OPWBwWZuyv8/AC83Mcm1tHycQFWKMOGeIEYyFRiJkTri567dUdf4vm4d/Vfy0ksVfGSLym8BvAlhreP/MBPfde5of3VrnaLvBD157lUwtn/nMJ/BR2B5N0ihvc2JpmagzrO3fQna3ubh5m+MnzvG1r3ydVg6JAeMSyqrggYceRyameO5b36AykWZqOXR4nsP3PMGhlWVuXL3E1qXz5FkTphcJlUfCiK2rb5AapYoKzlKpIdV6wg4qT+kj3YMdfumXf41+f4crzzxDCF1Of/QTPP3d5zg+N8Hxc4/x9q2rbF6+yuOPPkK/N2C4dZUgKcfue5I3Xv8hS1NN0tQR/YDt7ohiGClLpdmeYjjYY3nK0swN1qa0UkcRDP39gnUfCQJKoOVaJBKYn5pgb3+Ea6Q4P6QVK+49mfDIr/w2f/S7f0Bv81WWmjnGGIwJqE2wGnEuJUSlCIFmZkEr1ENQQzRKjBFjHKNRgUZL9J6smZCIMLSC9SOUwOLyabLDp7l08Ra3igN0v88DxxZwkzNMLK/A3g2G+weYKFTSp9jfozes8NHjxBBHSoXh4OAAs7jIoROnOH34MA1zwGQq5LaFjwVF6UmzJpERWfQUqUNKJRQ9kkaHMChQC4lL6R7s8aPzF7mw5jh3pkXbKMFV/NyZFfq+z5GPfI7+5dcpV99mbukoU5NNXKtF8AWgqBEqH0AMiRFEoCgjISoBJUQwEUZFiZYV0sr4wj//Yzb6CRBoLjT59IfPsnwk42ia0e3tMio7pI1Ams8xuPo8UyunKXcPOH72HNOLRxlsXibGgBXLAYFcJojiMRjEgPcBMUOMGJ556QZP3dzi5a++zsl7p5lIEz760QdZOvMgz/3pv+HRpZssLBkWkorv3j7E3/39G9fezZz9aSWLW8CxH3t9dPzenVDV3wN+DyC1Rsu0SW93l/cvTuCyjPedOcvm7oD+oI9pTRN6ezRTyxu33qI5sUQ2t8jqW6/TO+jiKw8SCGVgFAPGBLxWHBx0mZycZOArGjZDjGVrv8+JTpuq8vRjoPIjPCXsCOIcs4uHsOsdEqkw3lP4glRB1OLShOF+QZqknOrkvPr0V/j4L/8amUk4/+y3uHHlMmdOn0C2d2lNz1O99gr/0ec/z/ruLr2NdTRGmnMzDIfbJL5ga69CXZuk8gy90mk3WZwVZk88RL874tbFH1B1Lc6V5KklaaYMqpLt/UiWWRYmmrhQMJKE+TP3sVgN2bx+mUaW0Eg6fG+r5Nv/yz9m/+Yq7z80SW7AWoVKKGOFisOrUsZ6JS99xGKoKk80QIhYlwDQaOT0e0OstQBURNpiiSmUATZuvQXXL9BqtjlpJln6yBMcWVlmb2Ob6xdeY2ZukcbsJBoK3KCJm58iHw0YHezQ7Q25tndQr+gaGV66xa1Lt9m97zSPPnIf5XDEyrziI6QTDVxUjDbxVZfEJyAeI47gA9Za1Ak+eMpQsdOFg1HJVGhT+YrcJrgJx7KZoHrzuyxMzODOrGCaGc61ibFErBAVfKgrNyMGUGKIJNYAEaMOH0eEELEiDNIENwr8wuc/y+atG7x0/hLXNrr826+e56MfeJijT2RkRYtQDknE4RTS+UlM8KTWMSrXGY1yhsajBpIgNNIFRCIxWhhXZNiA0zZVKNi+vMH72g2GJ+dJGWAbwqlH3s+JY8usPdOgJY7ZDqQNyK9W73pS/7SSxbPAaRE5QZ0k/jPg1/+yg40Y7j+7wH1njhBU2TgInF2Y4YFWkzffWmPv6gaHTi1zbNISqh7dmyOGo2sUts2R403On3+JhUzIxVIEYRQDhUZ21tc5cf/9HF88wsL8DAuLC1y6fpPpmRkw8Pwzz3AkU8QJcf9WXW4WJS5tkIolm8xQPEUxor8/wFcFwStqI+oUU/ZY21mnNb9I1plj8+pN9qqrfOADH0IaOQ0X8EWXzsw05Rt9Epswv3KO1199HudSGknGyYeeYPPmVXZuvsmoH6n6SrLUJ8knOLY0RTXyDIrIbn+IdktKgX5ZsT+CQTnkiTMLJGXgxW9/i9byMSYnZ1gbDfH7nls31pDocFJRNCcIwePwNI3gsozBaAgEvCoSAyZYVOsVNWjEBCVIqFsMk1JVkVYrQ4mgQoglkjTIg+Ctx0SH7w/woeLW977ClfNTLB1ZJjUe39vADiyVtSwcW2HOJbi4jcmOU0Xl/FMv89KFK2wMlHTaMqEpN968yK3zV8hmJ/nV//QXmcwbZFbR0QGVjWR5iiQTRB3iS0G1QoW6nc1SEhw7uyMGw4qos1Q2IVRDZDiimJrl+MoxuvsH+AgdL/jYB7FoULAGEz1I3bqiAqqUWuFcStRIVoJ3liCBJBpMhKzVYOH0A/zKqXP8o9//3wndih888xofvvdjzE5klIMhWVSiGRLE4BmiqcD43prREVRRl1CaSOIjokplBESxgE+GJMGyMjPk2uYuu/sj5qcTtIgcjEq2Rwf0g7DfjGQtZSaHaVe860n9U2FDAETkM8D/DFjgn6nqP/jLjm23mnpiZQVEGBVDTAQh4mOkDNDKhOMnTmNkxOnlOboyxdrGOv2r15k70uaVrz3PygdPsHd5FVdUSLRECRQxcPiDn6Xb3aNjlSLA4XvuZfugxxvPPsXe9VVOPfI+WhOTvPLM9xERjFfOffADXHjleSIVDUzdQycpBo+o5clPfZYrb7/O3up1APK8zcq5D+CtMNo/YP7EPbz24veZUktwkfljy7z2o+d47EM/w829Xd569htMZS2m55ZIpg9x5fUf0U4cKIToeeJzv8HzT32ZqzevkaqhMobZTo5zjiBKGj05MHXsLFGFa5degxgRUYyFVpaRZ47t7QGtZoM0sWNwxCNKPdjF0qDAUZEQSVFyAWfBpXUjbhVSE7BJyvpeRauRI6EiyQWMYFSwViBEqqpEnKPygRBBjVCSYYgkQTn2+IeYyFMOz2aYZgcfh/hSwUKMgFoUSKxDYo0nPP/9l3njwg26RGzqKNXTyNq8/wMP8olP/yx2/U18WeNJZVVRhRHNQ/fQu/0WMQqb213++DtvMIiWTrvN4dk2eQqfOtWiM9Xm8JFDlFU9zsQYrHWAjHEQQceVBdTjEcBrjfAoIBqJ46pMMahGijIQY40pFQZchNXXLvLH33mRU2fm+Pu//incYANQeoMeaWsSOxowc3SBTmuasugTcURJiKaJkRqDsNaARqx6iJFoFCHgN6/z3/+jF9mwQp42+eSv/CJtn/L9b3+VM/NrfOYxy5GWst/8eU797f/teVV97N93Tv/UMAtV/RLwpZ/oWEDwFGUFKlShIjMGQw3vjaqKy9eukSUtBr0CbzaZ8vCBB08ympmgIRkXnvoeyWSbkRY4kRrws5bXnv0+95w7QzH0dCbnCKJsvPky852U9skVYq/AzGakFqz3NU6hkVAGQogMjQE8pjL1xIiRaHKc6bC/X1D6QJoMac1eZfn0g+BhNNojrF7n5K/8BrevXGa912Pl3H1s9nt0V68xnef4suDG2jXY24VYMcQwnbd56NEP8MPzz7Jx6ypzrslBHGDF0WzNcN8D9/PUd7+LyaC0StpqkGhCwwgDXyFiCNGwUfRJANRS9nuINXSaDRIriDEEraCqGFqDkoIquQZSVRom0ilLsjSDWJG2M0ZlIElSBlWBtWCjBYRADSwaIlniKFVRanDTYQg+UhklROXQdMLy8lG8H3IwKnGa4MUjKohExNStngLeWMgSnvyFn+Hxj/Tprm3z7779DPuFp6wGPP3NH/Hamzf42M+8j+MzOZPW4H3AuRbbazeZ68wxHJTc3HibhjNIaUgaeZ1QYw3ueo0ExiCpKmEMnFqXIGN8IkZ7B+Q14++mGlEdA6HvgJUoEBGBPBViVGI0MCqpbMrCg/fx4fU9XrxwjWdefZ0n3n+ORrGHLRxpnlP0+nX1EuI46Sjg0TgkkGKMIcYIRJxxVDaAUZIInVYGsaA0OQbY2Cy40e+xVXgW/Sza6GE7u9jG9Lue0//BAM4fD1WlX1RYFYIvMdZgjIEQaNiIEUsIFVGGFJWlOdWi2SlZDV1uvbnOY/fcz4XmC/hyiLEQwzt0hqHb3eXK+fOcOHc/3nreevUFUheZnz3McK/HpYvXoDPJdJ5h/QDIWV9bJbOCV/C+QFUZjkZgDQI0XcLE3CyVRDxKMQhce/siK6ceIG1kvPLKeYgGrTy7W5tcfPk5PvrZz3D7yk1GW2ssrpxh7+AAXV+lGg5QMXSyaR7/2EcZ2Yz1L/87nE1wudCRFr6KLB06wkFvRLPZYjToUcaATxL2VrcwGmhlKV7qe25GoYoRX/h6lQxw0BsBirWOvJHWiSMIopGgAS+GQqCLpYhCw0OCZdSvQCNpluKLCieGKkRirJkrdNzfx0ispxPWODBCKoHO1AxiLf2hx6UNRj4gRgixTm5ondiDBAyCxeFMgmDwpSdp5EyuHOJXf+0X8bv73Ly5zjd/9Co7b1/kO2XF5FTOqVMrPHjPHDkl6V7JdiwpehVzE4cgbEOzSRIicVQixmFFSEyCjqkMkTqBRI3jCSGICkbinTEaRdAY63uu3wGt8Yv6E+9gCgYrilgQkxMKT18LHv/khzh93xm+8LXvsu1zPv/kcRrDLok1lFoniYi9c66oOmZSQk1xoCD1c3ZGEFWSJGV92zIMI1SalKVw0B9R7vcZVQP2Ssu3n4Nf+uAU0gq823hPJAtipJFYDIKaJkM/pIoeouKsQwyk4tDg2d3ZZmaqwaDXoDGRsPH2Na5MX+djn/0cf/rFLzDVzCCUIEIATIgc9Pvcun2L5l6LaARi4Ob6DgeDLh/56KO8ffUm7XOPUxVDejfeZnDjCu3MEjKDJIKN0MwdgwC+jOxvrDI3f4SZ9hy9g23KqExOzmOzlOHBAeuXL3Fs+RidVs7aziYzC7O8df4S11Yv4QdDnvz0/bzyxqtE5wjDHoeWVjj9sZ/nO9/7Fr2bl1mcW2Dh2DJvv/YScwuHGexuc2ttndtrtzhzcpkwO8fcoSOcf+GHuDikmWR0+0MGVSQoJCiZCIlA5iC14BmX+3iKXqR0Kdu9HdppjhpBjSEToZE5+mnOqFQ0QqVKnjrMaEgSDakVJloOixKjYlUxBpxz+OAxJqEKQlFGUiKznRxxGZcuXuK+B85QVh6JJTUcYPCEup1RB2IwzmETS4iR1CRoiKgaTBZxCwscX1zkbz/yINYY1t6+xP7ukCsvvMw3//UWIWsxfWSSj7/vBNMNJbiM+04d481b+6gIUQJq6mvqOEEEFK/hTtKrpMKYMU1J/b6IEFXr5KKxpnsBlcCYuQbq6iMiGBGMQMNEJIW2CkhkpjnNb/2dz+MGFf/iX77AL376MJOjkgpBjMWHgI8W6ssQqBBRgqkXKYMQyUg1Ugbh0o0utncTqTKmMsvidMlSOmLHr3FmMuVkJ+WReyqmMs+LW39TkoUIuan7XZsIMQAKqXOIhBpLsEqsIlaVG6td5ucTVq/v89CD5zi81OL0fefw35ikFyLtliFNLe0QuT1URkVVl3Y+MIqeNEkYFiPEpLxw4QqHjixy/eo1Vs48QGt6Bv3R1wlGsRi8F6LxlKJ4XxHVsLl2g5lDxznz/oe58PS36HRSTrzvAaJYNvY2EYWrb7/F7ocPqKohpxaPc6O7RRyNmJyeIMtyhr0RZVGSNaaZP3UPz3z1i5TdIQchMteaIPqS2dkZmu1pZLTNxNIi/Z0D8tY0jVaD4aDC+hHiU4JEpiemqfa2mTAtCi3opDlPLFRMuZQkgd1BD9UcEWWDKa6sbWEihKJCUqXXjwwEBn3H1FSLZurIsow8SZiZmSTPG4TKM+j2WN1Zx4kykRgSA1kimDIiJgUPUSJBI97lbGzt0mi2UOMY9YdEX6JRMCYSvMeiIK4u71FCkLEOo05WCjBuCcQKMQTEK1X0zB5fZnY5cuaRs3zoYI/bb6zy+ltX+NLTF3j4kdNcu3KV48cn2Rv06e3uszI3x0JLicZRmQZmLKbRsahEtK4SlAgIGuvf23FC0DtNSd2G/NgAvsNWWGJ9/wI2RuyYglYRTCakSaRIDD/76Sf44v/1ZT700fu4b3oC886gd5YYFS8BqzUFa6IiRihVsDIgas7Tr+3z5OINnnpxjcUFS97o8wv3JTx/+Wtk3pHYlEdPDbl3ucHk3CSDP/vOu5+m74Vt9dqtpj5y3zl88PjgiQJpmrGzsVWj86o1ku8cVgyFVRpJg8/9/Ce5dvllpuaOEy7+gJn7znL95VeI/SGb3Qq14GbuJU51uHnlBu1GmzKWeOqyb3ZqhlCO0ODprt1k82DI1PwSCRVmd5sqEQgBtQ4Thrg0YX8YKdRSRuX4yhke+uDj6MGQS9urXPj+D1lamOPUsRl62Qz9bsHarRscP3MW0ZLR1jppI2fp+FnWX/kettymnFimzA9z+60fEApheqrN4ZMnCa7B2689z9GTD5A0W5SDAptY0k6Cu/giL673+MiJDtI4xbDcIoueGb9DFQ3XJk4QKuGMXiELFUO1DCrDrIPGVMpGc4ptOhzJmtxeu0zamCbfus1EM1IWQr9X0h8ENspAzwujCiqXYF1NH+e5wyg46qpCJI4rvxos7TQSKj+ilQi5ATSwePIenvjgoxSjwRjAMzgZr3YqvCMTEzGosTX2IZaooV7p1YwTiBKiByIhCpiAGNAA0YLzFnWe7vYuLz//Ft3dAa92C3BtlmYTzixN8f5jMyweO0q7XWMBIUZUx6I3azCmxnFgLHYzQohxLIqzIIF6RasxCyMGJQARMQmGGvcyRIw1ECLG2BqgJCAEkAQ1HkNk43aXU/ffQ2fyKKOt8+NzSl0JiiGKYscQ60svv8W55RY2b/CVP/w6Dy83ufcRgzs2wdy9R6heuwqNHDvbIZlrg0kZWYeNkJ381+9NgPP/bRhncOKwRjgYDJidnqWcLNnb3uGdhBYqD9aCUapqxPbuPisr9yI248b8EW6tbjGxvEK29joPnZlmd9Tmu7uWThmZmZ9nY2udxFnyJCNp5ASNYOoeuR88jXbKweoqhx58EDfcwOCIISF6zwiLBkvTWYrKY6Nh+/oFXpIRUlTsbazSyQy9QZf+QYv26WkaxS02EWIBiRsw30zQvMXlm+vcuLnOR5Ya7Jc9ZNow6gcWOjmnTs7QcLBmLSuHl2nOLbFx4ybt9jQ4wVSGN9d6TGLIsg7rU3NUB9DZf5NSPYm1FNphsrpNiq8nWhkYDJVWJ6HtPZ3Diww2uwxmS3I/x7nHH2X13/wJ0aS0shr3mZ43HK2ExKQUpSdWwv6wYHs4ZKtniWmGF4ezDsVgMocPUIihVynOdbBxROqUVH6sVh/rRUWEeiGXOypUMUIcA4gqNY1mpK4m6yJcMU5IYhiv7DqGFqmrmujRNOAlIW81eeTjT3Jtc4fizS7W7zDyJY1Og2giWvVQnajZjKhEjTXWggGJoFrjCBohyh3FKCYgojUYiquxDQQVi4gjRo8gqMS679MwPhcYW1ephhQdg8peLLNLLUw5oL/xBuIEZxxg63wlgYjgEFKUk3MFrYlj9N54hf/q782Q3DNPmJxCFk5iNCc7dALNm4gmhOEIiSVpHBAG797Z8Z5IFqp1/xt9na2dc2ysb/DwY4/y/aeeqg+KAUSw1uIEgiQ898xz3P/wWe4/uczJs+d48e2bWJvzlQuv8ni6RD5/FL11iVEOu4MBqRoEwVrH7OQ0/f4AWg12drdJOnMc9fv0Zi3dbp+9vsUkjkaqJC5jytRUmjGGYS/S86GmMcsRo26XJE3p9UbMHTuKoSTfXaVXdJmYn6Uz3cBs3kZIoT3H8e4Wq0lCaZRQDXGV5/0nV2g1DNWwZDjfRoaObO44g70dytGQK7vrPP7YB7j89gVmFlc4GldpHTpBmwnS0Svk6omJsJ0u0ay6nEp7uGCIBFSUhhNC4fHthOHmPo3JWQa7IzRrcOn8JXpljh0c4BKovOC6SmXqErqsBJPkkCYYqZiOjjIKw9Ij1iAiJCEgzqECJ1swmTouHygbXiCOaIyGDIYDnLVYLFEjYVzuCzXzVbMB1PJtwJladm2MRUz8C+2ACmMmRcCAxhIZU58OQ9ps8t/+8+9g4pAHn/wY/UsbVOpoO6E86BIOL+OrP+/jram/h8HU2WeMxdRS/rH2nYgJBomKwaAmvsOngFii1BLwepymSNRaxKURZwH1lIVFTIFiCOLAKkYtUXs4SVGFoAGoK5oYgXFlg0Sm5hdoTiec+KUMs3wWn06gOJL8MVRn0MYiRqdANpDBnyDeoCPFxb9ByWJYlRiBxDmaJkVTy9Pfe5oSw0zDEgpLKQEbwUuNE4+i8r73f5hLb7zMq6+9wPK5ZVZvrfHkJz5D0e+zd2ub6akp+oMhpigQZxFj6HQ6dAd9ovfYsmAiSemlFWt2hpljR/izX7tNt5hm1CvRfiRvGPZ6jlu7Jbt9yzcuCM9dqXCuQtSz8sAKiwvz/MG/+hbh8lUeeN9hQu+Ai6u7LL/vYV547lk+dHyashzQ6F5nc7vL4qF5kD38IHDphR/wW3/3Nyh7I4bbm3zn0m3euHKBDz/2BKEcMj0zzdz+Phu3bzO9tMBSHrl4M2MwcGyvn2fz2h4rp++npyWDW1uk5RobqmAUMQ4fFaOgNuD3AvP7JQ9+pI1GwVcDVi+vU7VX2HrjBZLE0EkDTRtxzmKkIgVMKGodhBFUKlQimgvKAEGICDEaxDpKmhwIzC5NYEZ9RsOAjQoRggGDx4iSvOO5EBDRO/4ZY+qBbUQx1sL4WIioRkzixgtM5E4XbV3NVmAo44hGliNFSWymxNKzOVQWZx1Xb+7x8Gc+yf5ol2vrPXxQRmVFb1BQVVDyzuIVGI08vop4r3SHXUKMlMPam1GGmiHz3mMAM5aAU/qxF0hJM1fL+e8YSyJHlxf5xU+c5X0zOdaXaJ3pUNOmRHExojEgRgkYrAoSDYlEyomM7Ssp2fKIteII9lJFqrsMi8D8OYNd/FkMOYIS4lGqtS8yHHoY9Yl+/13P0/dEsgAIZUWapJigWGupFFp5Rm5z/KiLGLAiNX5hIRZ1S9JpZLxx/TbtqSX2dgILiyfwRHq9HqLKYFRgE1cPOmq16Nb2FiqCRciylADkjQYNlP7uBr/zhYIHlyvaTcsnH5tgbiGnaVrs7a7iOoZ7XhWe+e8GpC0Y9IaszC7xo+ee5cHjbW6uDwiSEo0nsxm3L17FxkClAZxlVJYcxAI1hjeGEwwGQ2Li2d7dpsKRT3Q42FpFfWR/f5umyRnakpSSi1evsHRogZvbG0xlLUazBt1f5VTu6Xohbl6jESJZI9JZOI1uX6XUAldZRqVH1FHEQGoje2GPYhCYmZtjM9kChEmnzDQDuVPU1iYqoPYlEAFDiJGA1KsuEURQFFcFxCb4UFCEigJoH86pMKikzM1MkCd1XZCkdrxSA+jY8GRqcZMqdoweilGEiDVCaqGKP65reAfjqO8w6jt0I/goVCrYvMGgGnHl6k1SifQHQ06fPMHvfvGrbGzsUqMLtfZEqan6aMfXFsE4i7MWIwZR0BhJ85Q0zdE4Isua2GaNrwwGA9QYTBYQDCEGAkoltb0xz3ImJzuYvRH/0+9+mb/1n3yEzzx+EvEVjdTWxQyRro84l1EWJVUFVTlioI5RVBYvvkpzpk9r8iTthoWFsxg8jcESdvqzBJNjRWowWHKSE/8xhAvYap24dx345ruao++JZCHjnnZUFdjoaCQpNhom2x2OP/B+vvO1r9BwteHMZgnFcEgiCYoQBz2SqXnY3yeJCf2yIpRDgvcszMxya32VMMa3FUVUwZhxyauoq2W6KrUjNANe3Ui5fWmVhvF8/9kdzpxoM3s05dRKzvLCPBfCDvt+E2ct7Zbja8+9xPJEzupul2YqvLNEdmMgKw44eXyaq5t95psJs23LjVsHLB6Z5vMLQ/Ym+8zkTfZ3bhBdh2EQHj+Wc3jxfipxzM6lrO5kTB4+gytW2dvaBFFk7jD5xiUebg5ZOSs8f7DN2XuG7I0Cr+/OoIdPEXevYEIKrgA8iNAEZo82MBW4jYNfAAAgAElEQVQkTdjrHjB/bIZrr62xMiOIaF2JYInyzlPzxPEKaKTWwIjWbNE7LliTm9p5O/ZvGqB3+zpZlpC6yORkTjNPxhX+uI+/4+ytXbnvwJxADTAaCxoQBV+WaI2mjq9paiBRQKk1EDDWe0SDSEJZleS5YWV5gf0b+wRVXr+9xd5eYG5+kaIKdUJIHMPekBgDha+QGEltgldALCKGxCVU3hONpYhK1HcUmwViqBOosyQuoygKKjUMRgW+8sTK45IhN1fXcc2M4Qh+758/zRe+9lqN9xjDsN8jBE9V1v6WUFVjrZfFUdEdBf7+bz/Cs392iz/6pYdJqdDOFCKLhKTCph0cNVAbTe28tYnD+kgMozuA7LuJ90SyQIQsTRmORjigGAyRtAEh8Mmf/zjf/OY3iS7W491aTIAgEaKyu39A1syRcoTNDISKW7ducXhpgb39HbJmxmgwJEsTMIYEQZwhVAFfVZioWElwSYoYSzphGRbKQJaY6d+mHEXeenOP5C3hRyJEXefcouE3H0gYjiI3Oy0K77lydZ37P3SS/sXbNNyAXW2SG09uHGmWcVBs89jKLJmr2O/1+cjRe7mycIrTwzWOyw2e2UmRsEcVAjq9zFFJmG/v8vo1x8gKb94e0m50GMmACWC2/zqj0GBiSdk4gCoYphoVrczy0sTjnO2+xNHjFVELJCZ0B45BiKxuBdr7G+zu76KHl2jEkvXbniNyQJYafOXJrMGPn28MNQqAGmLNL+JCqKXp1HohiQJJPXmT1BJ8xFnDylyDovS0sybHjszhUqh8RKNFbah1GmOsQMcaBaypDWUIBh1jAODyBFFqUJoagwy2ThSCYqKM9Qm1GS2xBmMStFKOHzvLMxdfI83abG7tc9DdZ79nUSzG1voGZwzGGiIRCUolBTbJGBYDjLF3qp00psQYSdKEYX9AUZWkaUYxqqtFg2F3d7e2kmDGrl2DKz0aA74wGFsikrKzto1SVy3vPAOrgIkYDTQbGSEYrFrancD/+A+fYTF3fOUH63z2lx/A8gbwKoGPotZQqOBEEAZAg2AMtjmNzw0y+e5Zz/dGslDFIHQaTbz3CBYtPS5P6fUHiIB4RVTwZYGESKkBl+Ts7+0x8iVzzQZFOcJmTZrtDtdu3eTEygqX3r5IIsLioWNsbm5h85rHNsbgjB07CoU0SUCExDi2NwtM1uR6ssRyWEMdDL1wdHGWDgf8rV/tEH2gkWb89v8q/NyDE2yc3yP0rvHSZINmrBjYlKlmgziZ0zewcmgBk1uq/pDp+SlKoLN+jWPtLRJGjKqKdichasIowsrpOQ7KaRaKVdzqNU4sNHhts0fRnmXU79LVJlna4CCUrDS3+O7BNF/bPsWc2aPRKlkKW6gWRK2FaZlE8sySzlp8dwNmDrNnDZ2ZJjt7e5wUS6ktUmMhcVhryZKkdp0asEmCtTUmkdjaE2LSFOcSjLU0XFa3egZWb98mz3OOnzrGKHosOS4TqrKqKxQiVkzNKtzZO6JuO1RrmrEWNgWMERJrcBas1P6N0nuChziWbqsYjInEMb1pxj6YEEusy3ju/PMkaYYaTxKUURAMY0FVrJmPGPWO7sJYR6T26cg78n+pK50qhhpjKCNBPc5a1AeiKmVZUI5Kgip51qAsRgQNY7dqinOWSAVkjLTCVRGsI3WOOAZ3PVqbGLOEYVXhY8CqxTmhYeCJQxP87j99g098aonJvVeh6JOYt2FljXR7H6aeQNJ58Fcw5SsEHdW0bSN519P0PZEsRKCoRoh1uNRRlCXNVoNBUfL1r3+Tfr9PdLU3wxdlvYHM2GAzGHbZW9sgbSQ4mxBiDyuGQ7OL7Gxu0x90yRFOnb0PSa/S6+4QYoWK0JmZoqmWYIVWewKXJDQaTZaPn+bpb3+JT52b5PjhoxgiM1OR8uCAX/iZw0yenIYsQzoT/J00Z/nes0zNvsEf/tubbH3hFrtbjuUZy4nFDhtW8CFlujUgK/rs2ZSTpxaZr7p8YG4HfAnW4ix4X2Jsg629XeL1QNje58GpbU7OWlpLls2RYZQ32MtSbm1scjDsY71ycrnDby6+wUJnAT36IKaZsH/7fmYOHUajr41NklKMSqKPjILn1R++wn5I6O4WLOYl/d6Qx598DDc9QT2PBLBjylNr/cOdxSlirCNovZmOMTUbgNSCpOPTZ4khEpMmxldUXlA/lkcL4z01pDZImfq8NW2qdyzhdf6oq4wgSqwMUX1diVhHpRXR1JVEqDxRhIBFDETvKTUQTcA5x6HFBXZ3ryJJg6Gt/SECNUh7p6qJ+OgBIRZ1NSCmbqlGCpFIJoZgDIk1DKuCNG1QaqQKFVLVfpOqCoiFYjQkAplJ7nzXd5o6oyUG8EEheHzp6woKQBTvS6rgwECItd1evTDZbODPTPHBvT0ePfsHfO2/MOz2PK5pILnE/n5FsP+M5Tm4dMXzzJtCZ6ri5ELCjbW/IW2IKrgkAWPxlSdPEoL3NKxj/dpNTIh4GUtpnSMGxdWIBYNQsXdrg0PnjtfGqWKEj5EQCvLUsNRoYEXwseThxx/jR099E1FDjIqLIHlGK0uYmJjAJAmtZpuHHriPF3/wPbABVUMwkemZWdYOdmgtzCOdBjK9SOwc5b5PfY4kXeTtN/+EP/0n/5C5Q9Mkxyco9jYgCO3mJAc9z0SaMQjQJ9ByntPTlqOnDpG0DjPY3YHtWp0Y1ZOppTkxzb33PcHBq19lOttiMrUsHmtQxDkuvfkWZTFCCnh5HUyzxX8+HWgfX0ZdQvegz8a115mYn66pfnFoFbAYyqpid3eXg51dJpcTWmmbndin0WySJlmtZBwngnqlr4VJqjVDIVIDiZF6gMt4NysxaV0haEBwpJnBWE/moDgokVBLlsOYkowx4kMkhAgCwY+nklKrNMfaC1vDFHiveBSJhv2DXSamJ8EHLLb2l2RpzSBUgdQlaCFYraX6g/0DWpMtRgh5X7C21k9oqH0xIu8Ir/58Z7QYI9ZXFKbeHStRA80UZyyVRnplhYtCfCeZaoSyxGiFU0dRRSRJEGcJIdQ4kzH17lwyTh5mbFBTJUszjDEkYqiqiljV9xVFSa0jqmdUeb7xtau8fmKBB5Y6/IOXI597okVRVry+YTj30BJnVz7E9649Rb8cMtcqONYxLN/T5J5d4KvddzVP3xvJgpraDlVFYmy9U5OJJMbQ6+7jTH2UhnrlCQoNY6l8oF9UbG/v0t2ZJG90iMEzGA6IoaS9ME270yAJnu0bN/ngx3+W8+dfg+5O3X4YQ9JqMtOZxDUyGnmTyYlJTp07xtzKKRqNVYKziK1o33uCg/Ov8/atPaaHAzoTnuYxR/PQGYxarr54jeXlBJPM8b4nP8E3/s9/RSOFwcGApJ3jRsN627egfGqmz4LdZm+rTXMYsHZE0jgKoSLGSOagt3/AlfyAw7MT0N3kxrbjzR1lt7tGHNX0XTAVrlKefRt+4wmHzXOCKGU1wOoYahQlClQa8DEQHXR3thlNN+l0ZllbuwwxIWQNqiTBqKlXag2IcWN6UmGsUYmhImvUDscgNZsQNVIUe1hj6kkhFutqL0+SQCRBqLcBVMzYsRmwIlhXt4HYZEyj1hWGNQYrhm+9eJ0KVyeUUBHCOBlsdccU6zugaL8GOscgtkscnfYMwQg7u3u4ymHzlMJGWhNZXdGMx5+Rmr24MxjlnR9rlzECmTN0Gjn7gyG5NUxPzXAwKMDULtHRoMd8u4U4S683JEZhv9sD7xGpDXzWWsJ4a0eFsTI5EkKoWRcjlFaIGu5gHSmWqiip9WLK/FST/rV1biwucf35Xb7+wj6HJwxpzPn+iz0+95k5vvTFERu9A/b7FXmjwZPHu/zj3/k56j20//3jPZEsUGXoa+pUMFQoRoTNg10OdvZJE0ck1n1hCORY+l7ITOSFN64y7Qqm5qfY39yjN+jT6x6QZznXrtyk2cgRsRz1nqef+joffughLl2/iLUJrVabxYUFkkbC7bUtjh09TIyR7gA+97nP8eXf/x84qqtMn7mXl9/skqWOe04r6fIpzMQyZfPnMaRYFT7/W7/D4cNH+PIXvsBrP/gOzYkGS4sd7pmc57svXcCmUKUpq2t9Fg/v4oeGm1uG/Y0B7WaC9z2cy2hYQVopAw289daP2G22uHxzhl53n1iUY+0BNBspg6JkaIRUlL/3f5T8+sMX+NknD3Hth6+y/PC9qLVICKhxJBYSY3F47nnwIZZHA57eKVHbxpqSRx+6lzSvN34JVhGT15vJpGNwMxYQlMQ6Bk6ww4jNPYIhtQlp0kKtUoVAKrWnQbLmHZ+Eaq3RCCEiWKz1RFxNwcZIiPU+EGmaUfgSJxZrhRLDf/3b/yXeB1Q9PgqJBV9WpFkLcbUfQ6WuMDyKhEieJXzpBxcwVmjkbWbzCHmLQy3ltRs90JJ+v4AI3lpS6p24jABRMc7Ue0mIRRRmOhnX13eZnGrV+3qGyPKJo9y+dpuBN/zLf/FPCHaIrWB6ZgbBsNc7YHdYkZmMja01HGDSvDbJOYsxFhcLTOyQpEMGlUGtp2VSbFASVQpXJ7NKhEwKGo02p44ssrW9x56DmUxR2ySbT5ibWSAx+0zOd6i0T8Ty6BNz/N4f/gGMvvqup+l7IlmICFma4cuK6FztGPW1bFZcXTLWQpeIE6ESwcWSPMnZ39zkxOI8uzsHdyTDACHU4FiNrMOoLOj2etxklc7UJJONFu3pKU6fPM1ev0d3ULK3f8Cxo8tsrW4izjCaOMRGP2C0xTf+6df5zY/P0EuFGV1HzTxJvIHKB/ExYk3B4bMn6Cy0mO5vMdGGzevXiYtKsygoGtBwwnDYw6aKlhVLWclSI+FyuUAiSuwXBGvZ8CUmZsSu5+rugOFoSGIMhY5LWSJZkqLaI3MWQXDi+OMX9piTAz72kZMwfQRf1HJiKUZ4STDiMDZBIuxu99g5UJKyRdZSNMnwHhAHrnY9qrgap9CIxoTecMBE22DKETiDxgT5v7l782jLrru+87OHM9z5vnmqUSVVaVZptoUsickMZjAOgdCB7gQaAw0LEpqGrF6QNjSQAZpAQ0hsSAILQhpoAwZsA25sbI1IsqxZpZrrVb35vfvuu8MZ99B/nCs16dUdVqj0Wlp9/rnDq3vrvXvP3mfv3+/7/XxlWKkMlUMjiLUGLTBeVkKsSZvT+coYJidXTosGb/CukntrJUEKnClRYtJtqWqPOO8wZUaeefb2erTbDZy1LCw2cd5j3zKe4dGT1qGYdCOE1wipUJRs7fQ5sXKczlbKfuKJ4hrOG0IhsV4grQMswlcCMSmqgq0pLToOObo8h5MKayqMXzIsmOl0cAf7OGO5urrFVCSJl49SupKji/PcE6TECOQtJwkV5KOEOI5QUjBOCi5tJ9wwFfDyWsIjdy9T+DHaWqyMsWWCM9W2LtYe6WLaNVCxwa7ErG0bXtmyNOqGViSZK66y88oOtzdHxNMea2J2xvs8+a9+iEurm9c9Tt8RkwUArhJjvbU0HI/HhDrEO4NSutr3UZ172mUYEXN8ocsL5zeYXVxkWHqmZ6e4dPGAQGqsKQi0Jje2MkDpyladjxNqNDl6x01YYygq9xCNRhMlBTu9XTwlWjZozKzwJ089iTuzTjLImJOOQwsjTt/0Mp3H+sjZVaw/hVSn+PRvfDdbn9+mIRSRUuwlY1IhkXnK1EyH3PSQVjNISgJRIlRIKXM+ea7G3UdibJmDcJQlWCSNuuC1N3bpdhtoV0FZXKjwAqxXOFMiVXWFQ0qk9gRC8x9ej/mO//Y4w/2Qa3KMLRUqrlSMnqoVqpSmPdclX+/j2wVx0KSJYqQNYWkx3qGVxnmJcQ6cpRyn9K6tky9OMdwYMzXXYHZpHo+pipYAVpN7CKnqToSymnS8R9qqBuI8KKGRKsebqm2qlKg6G17jvSWIIpwBqSuphRAw6o/ZHWUMB2Ok1GANJWZiLa/I2QiFcB5jTUVGd+BlRe/OceTGkYwOWJyPWTI1+ns9kAHCK5SsWrJSRFhAaYkOwHvJOCnIhMBpjXSeeqfLKE8QrqA500KKEpTk5Nw0hw/PMR47eqnBCk9XWzoqm9Q2HIvtGoGuOidznYidHc89J6fYOehxuOWxskUkJC7IaDabiFJh8xQRhEiliZCImkVaeO41Q6tdp3BbuLjLvffPMe4f5l987A8oxoJvuk3w2UtjTp/s8au/c31bEHinTBaiQrQZ7xmMx2AN43GKMQfUdUhRltWKQQiKoiAI67znlqO8tJ9wZGmepSPHydY3mY4bDBZW2F29hJATxaZSuNKyvrHO+x56Fy+98DKNhRkuXLpAXuTYs+coTU6WVsKV0jiKzBME0K4HaCtwmaQdKK5tj/jkX7Tovy655dU3YHqVn33ie6mZIXPtGC+7tBZmSEOF7jTwxT6bvV3mmh0Wmi18Z4nvufM0L5x5DSdgb+iZjguuFAEy7NEO2yghaDdXOPvGBWZbUxRFgZAKS+WI9M6hPJSlYareYFRYnC9RQhFEMWPh+aNXS95//xRnXy/I8gJbWMaZr4q1RVXxX9/uUZqcxcYN7G9u8rlEsxR4CmvwpsL5u4l209gCkw2xDkb7nlSnjLKczWu7kz1+ABiEsFipMEahvcGbaqQL9ZZM3CDCmAsbe8yvzNCdIOqkrFYeUuiqKyId0kmsNezvwtq1bdAh0+06853WBFZjGezskxrHxe0hizMtOpEk8BX6rlCKQAoMku70DDItiGRKOUomE5Oj3alXtRhhGfsa47SgsFXXoiUEUxOvS1xofFRDFxbZiMjzlLpSBGFIPaqRFtsEKiCRkrV+gUOjojqHbjjO+ivPsXRihlBVxdtYBeAdUT2GIEZHA14bOL7kwZPElCgHDku91uBHPnaFllB8zQPT3LqoiJTG+wJNHbRhXG7zwe/7u/xvP/9HhHu7fPbMDAtTGSsLHV56fZeXN1KaDc1LT69yV1fz5Mb1dUTeEZOFtZbSGHr7/cqSXFpUoGm2migkLhlRpDlaVY7Rd9+wxPnxiPNnz/LVDz3CeJTQ7nZw1hG3W5TCV8vaCQ9BRAF5XnD5zFkiqahJycbGBpEQDMsC5yymKLFFiTGWAoknpxbUWZwOyVLLTd06X33vNKpu+O3XJGU/YrRrmF9O6A8MstVARA4pW9g4gURT1xEHLqV3kHPkjpP4IGT10jqu0aUeKjpFQdEf4dOCQE5RFGOatQ7NUHGyIxjXA66lklFm6ScFQRBU5iSpGJcZodRgPDiJ1NVVuhbAh37hRV68v8uyzSgDBcZODGVVQVCGGuliprsLjE0PYoUa5RQiJbflxH3p2R8nzHQaaC8IW50qd0Rpnn56nQdPN4jqEXJiI1daY9C8cX6LlflZahFYA4jK1o4qkT5ASM9iK6BWCHRDv73FlN6j327TAjgCrVACtKeye09Umx4mORue9d0+ReHZ3UpoLNZQYQi2aqWOTYb2kkBKzq0OCEOHowWiREygjd6X5FZjPTTwSOtQWjHcHzGzPE3pLMZXnR+nA9L+HrVWm067i/WGelSjB3hj0DqAQICFphSY3g5OCTwBzhmU9BSUBIHGlZ4iGZPmlt/89Fl+8htuo3CSUBqsjDjYTXlwOubCYEReKKQNMQikCnE+RfgA4SW/++t/zk6RccsNhzi5YLjw5su084z339xClClvDAMGxjL0/z8xkhVFwe72HkGgaNTrTFGS4tntj6g3NdNTU4xCz3Kj4N133MIvf+Jx8nHK6ZO30F6cY331KstHjjLMx0xPt7hceErl0VFYKf7ykjAMef6lF7j5xpPsJWP2BiPmWg32dnvYPKtAwbLq7xsnsRTkUcY9y02mCDDRmMsbI5SAWSH47EtjMtlEtiOCsEZv7AmtRPltOouL7G71yNQYKUL6RUE+6NM5dQdbvR0aOsBJTSqgbMTYvCAb7iMtmEFBbeUIe0Edb1I6oWO65pmKY/ZzQW4KVKBQTtGshzTbITv9FKkCpNToQHLkhimeupbzX98WgpV4ITC+ZLKLxwtJrxwTR5pRmtGa6rAdGHx7Dr2/R6Mc46xirz9kcXERkzu0d7gooLCGIzMpsaiChQRl1eWwLYSzqCyjLh2uUEitAEteJjRlsyoeasmAA6K4AsNooXBv2dRtlYojncX5qnPiRSWlVlJN5N0CpKD0Fi2q1cd0O6YbB0itKGxJKBX7/QGUFqfg/NnXkViGiWHnIGGuHVeFVevQus7ado+V2TY60jRtiJfQbWoubA24YaFD7jxlVhDVIhaWDyNDRV1rSt1gmAwpvKHRbbMQNNku9lhc6dAfZqwcPUWxdoaaLxmbAmstURSQGUfgJXtjx+ev9unWHddMTqMoCGSIFiWrWwPedIa0dEhVMhiWCCHQIkZJT0TO/VMKmfa4fUbybz9zgU85w/ff0+RE16GFxBjN8a7kxVXJ5X1z3eP0HTFZxGFIVqbU4ia+yNgSkvl2i1Mtz9ZYElFw+x3LpF7w0efOEiJ46O5b6TtDkY7JTM7a+jUwlqYrqv2hkpRlQRRFWOcmaVGwsb3Nidtupyf32OntkuZjAgTGV8t7Zy2VSM+S25R2HBPVchqujgwqtqdv1hhc2qJe94z6A5RUxEEHkGSxJTICHcZYFF5VVXoxO8P6xbPINIdmUD2nJAg1ueIrcjxb+YAHVA3pwdgU6SSmlARxwGhvQGeqQzpOKfIcGwRMddqUBhIrCHRIoDWBDnFhyUgoWiLFixBpBU5IjKja1KGJScoxQoTsrPeohTWytuawLzGyhvKG00eXGY37yKhGYQXKiInOwCPiCCepioFCg00IlCIIqwIp3iNFgZNMPCS2Qk4Zz9WrexyaWsaKtBJR2QmvQigEFe8SISmtx3oorEMYg9ACaz1bW/v88E/+PDcdP8qZ85dZWFriR7/v21ldvcKHf+OjZEVBvVbja77+/XQ6Lf7lL/8Ky0tLXLx0mS9/zwMcWpjhN37vEygpadRr/MgPfBej8ZBf/He/w5sXr6CU4oP/1QeYXjnKx/70szz+3BfIS8fWzg6PPvwQH/yOv4fXmmyYILIU4yzNWoRUGfM2Z645x3jvMklpyJxiZD1p6dEqZJAbZBQgSofVEqTHSEVsa+AmSW+BIvUxvf2EUNXRUYci1pVQLRA4W6NUipveM4fQNRCWG/vPI7xk9qF3Y6lI71oELGclf/rmx8mvX8D5zpgsgjAkQDDcH9JqxVghWN3aJY473LDcYGMn4zPn1+ht7ONGfd5z+nbaC/NcuXiVQ0VKXIvJ85zACzbXNzGu4joGSqCpTjhJpRwcj8cEDiIdMkiGWGMIdICxFmsrv4iWCuE9RVYgYkXgFDaomAqB8GwOLaYEypRjNYGdmmV/eIBqB4zzginHBFpbaTl0ILl45hJBXdFWMVFUA6gKV1RjyOoYYQoWgxaD3gbKF+RKVV4KCXnmETrAKQWBInIxQRQjnKDbaWFHBVqHBEoTBRFSwmt9xwNTHjJwWlDaCXDWerJaBCZGq4CZuRrF2gWC7gq7RtIsDE569vMhUX0ekxcEeEzpJl0LjSkdZe4w1lRUcQKEKRjkQ5JRh1AohCsrJaXwJNqSm7zCzImQXm+XYBJNUEFtJM5OqGjeIZSaLNcjnDGgBJmXWFNSFIar61v8w+/6Vr7n730LP/OR3+ITn/kcTz/3Iv/kR/8hB6OcP3/iWf7kzz7FN//tv1V91tbyA9//Pcy1W/zP/+xn+F9/8oeZmZklGyf0Rhl/9BfPUnrFj/6jH2acZ/zUP/lZ/ulP/GMa7Saraxv8zE//OGGjxvd9/w/zgfd/LYuNFZTy6DCm2+nihARfMIrnsft9ZC0itZZT99zBbacOEWiBLSslLVow7PVBaeqPXyJJFLfeezvgqbsaQwV7/ZeYqhu8H3PPvbfRrVX0rDhWWJsThgHKBJjQ4S2kv/U4Ds+pu48iypJISXwc4/dL/FjSiQRvwYX/psc7YrJw1nLXF92LUhFpmnH+zFlOH5/nlfUtxm6K40cOs76xy/INR2nrE2z0+jSnc9q1iFpsifcN43FCLgS+9ARRzGg8xIcBtvBorSjLgjAIwVs21teYv+k4G5+6DIHHGgOFqcRAzmOEqUxMQrFfeuJIEpvKrWoVtJRF4Cm85JW9AdHQEccKGSQ0goC8LIjrDWo6IFdAKOn1D5jXU+SxxTqPEwInQsZFSp7lDEcFYaQ5ctNxkv4OtUbMaJxMLMeOQQnjPCffKWjUGywtrVA4h3ewcmQRd20bq4KqJ28LhISzGwP2RyEf/PLD2FyTl1UXZnNni1K22LrWZ34qIhmMyGWLozbi0ImbaYQ5Mqxx5cIqN92wBEZQuIIAg4pq7OwfcPudp5ieitDaU69pWgFMtQT/4H9c48sfvZugE4Op7OeUGU5qjDDEMsb/2VM88siDxBFVJ2fCO3W+UnEaJ7DWIkTI4PlrBGHA4SMr7A2HaDxRJFlcmOUr3vsoZ85d49777+Gzn/4MF65c47t/5CdhYnVvtpoT74ng9J13IJzjYJRy9+k7+Olf/DW+7NGHePjdD7CfHHBtfYNv/sav5bY7biQb5czNzLC6uY5RktN33kZ3dg5vHEcOrbC5vc307CydTpthb7daCbkC6nWWaw1MnpEoQTtq0HA1pBIY6/BSsr52kc7sPHk6ZHenj5OOoB5hXKVKznyBcHBuY4/l44tg0gpI5CyhVhR5gZSKMvcQh4QIjB+T6jpYiy1LhNck3hMWJc899XmSWNKse+hd3zh9Z0wW3iE9KOsIvWdudgqTGw4vzeKVRIYR9VaT0huc8NRjjUIhAkFzustnnz3HzNQMriyQWiMqAFMl5FEVUUlLTZ5lxHHI+upVWseWMbbEYCmtIwgCyrJESirnJxV0tvApIy0r4I4UKA2jzLMQCCBD5iFBK0RKiywdZW5IkyFBGBFOzFc+d5TWTsJsFFJX8JYszSqZs1J454njCOFdVUZjOD8AACAASURBVOzTlWoRUQFfhJQIB2EUEddb1NstyoMBKgrJ85Jbb7mVV954ExVq0qwyNrlScPbyFlcOjnKoo4mjimB97MgKly+u0q5DIsdkTnBzUyCVwZLjVIs/fX6V3kGfUrc4NFuHPOfcxgZTrYhzu31u3l2n01pGmyaZcEx1FcYZNlMobMl8rc5uOqRILIFuYC1YX/VYp6Y75D6loWOUK1CyhhcFYuI2Nc6jQ4UpqpySIs8YZyOS/ogoClnf3MdZR+Ql+8MEYavPdWF+nu/97u+sTioh32ZtAERRCCgKa/lb3/gB0oMeTz3zPH/3gz/IL//Ln6/8J9ZRi2Moq4JtkRYMx1mlTAUa9agqMr9lp3fVqhBvGSUlzaiOC0N0mVMmAiurldxbkJ5AK3bWtjCpoFuvkZUW4wz7e/sorRGmxHqB99DbO2Crn7CyUEd6X63InJhwXSp7vMlTjFfoQFQeoMpVByisK7FC0B/mNJsNSl8A1xdheP0l0v8Ch5SSvCjJkiE2TWnHIcO0ZGmqUyWpt9uE9Yh6LWZ+ZZkilOS2xJWGvd4+IpZo6VFYyiyr/CVhBV0traEoS7yzhLriMIwO9sn2eqhAVsBZV0nNjSmqqjWWwlmcKVmYaXPq5BI333qI225b4dZbD/HA3Ut89e0x33RnnTtWJLvDIUlekBUJziSYPKPMM1SoieMaQRCBkBRZQSOuIZTGO4tzJVlRkGYF3hW06jEmT5H46grhLB4LEpx1zEzPEIUxKo7IsqLK61CK7swi73roi4hDTWkLytJQGoOWliis8dHPnEVYiRZBlYCOZLrRQRQpoYpYrC0wSiW7oz57azvM3PV13Hfn/cRpTi25iClSxqnhznseZeHmR2nN3ciL2wGDJGBAQbNjkbnBWUV/kOFUSGZK2kJT0xHCW7R1NLBoLYnbdWIfVbJm6VGUBFrRqClqsSQOKjytDqtsj7woobQU1iACSagk27s9nnj2eQ6GGS98/gscPrzCeDzmyurqRJZu2NzYmDhQq+CfKsgIXnvlDPPLy3zg67+KbrfD3EybB+69m8888TSqPkuumuzu9ViYmWY4SnBCVnTzSafG4/HSIYKwguYgsMZSpGNil7G8cohWvU4YVEFXha0CqwpjGI+G1FsNCm/BlrRrjSo4qCiq6AUBZW442BuAlTRrVTHWCSr0JIrS+bdxAcjq+UYcVI9dJaiTKDwBw4GlXpNErcXrHqfviJWFlAqRlzhrqNVqjHPB1PIKWWIZHxyghKIWRZTOME4yAhcQhREbV3eYnm9wyx1HGV7cpYyqLU1mS5xx1KOYpMxxzpGbAiEUIZJCOl568mmQgqjZAg3CS6Q3lcFMB6h0jBYREQPKIiRqxZOZ1RMGMTfddwvKa3obB3QHY5QrGZce0+/RadQJVUQtDvFFjE8zilAx3N8nn+oQNjtYZ8lKg/WCfFwQOMvy0ixpf4/UmsrNCVW2qgWrNMZ6glCjpMY6mJpdJMkSXnnjdc6fP4eUUKRjkqTKGzVlpUjc3CtoduscDPtVOrdxiDLHiYh0W3Bpd43jy4rFfMzVPOCFD/8cP/RDP8pnn/xj/o83LeEXnsfPHeKueMgP/Q8/yMtfeJrXLlzl9a7i5A0rfP5cweX9lNdfPoeLFTsDR60jmdIRSnuu7Y351HPXKErD5fU+S/Ntppc7RHsDpmvg6jDfUkhVFTC98wTGUniDt4Z2DLrRZDmKue0vz7GxtcOpmRk+9W8+yuc3Nrh1bo7feO97OXvsBN//yU/yRJ5jnOMfPPgg3zk1w8eN4VsLw31pdWX9wB9+go/92m/ivedrjh/ni5/8Ag+JGt9z4Srf8iVfgZaS33zve/nixPBr/RHP7x3wpU89B8DP7/W54+UzPDbI/qNz+Jm1TT505cpfe65/PcDH3nj78T9+684P/sp/9O++CWB3H96E5JnX+fT/9HfQUqCsxnqHU1Di8bYglgqlNCUZzmkQGuU9goDdvX26Cx3imRPw2oX/7LH5V493xGRReZTBa0lqC5qtJtY4TByRlRm7uzvosBos5TChGUf0xiki1hyMBrjNjEuru9x3661c6m+9DRKBiR2aKiG9LEtc5hBaIU1FXq51uzgnMGWJRxJoxUFWUFMa7ySuGFOmAcJ1UGLS4qMKEjYSmsWItoJhkpGpOspBXuRk44TWdBsXBSSSCuceavb292nPz2HLAu8t0tpK4BOEFXtRgRITnoOUSFX9Laak4knrAK0004tzXF3dxGUpSlgOhgO0VhXhKUsovQRnMMoRobGFRqsInOBjL79JFIe0FhqwVUBZ4kTMbrzAYK/P+tUB//ZXfo5hIghlQqlb2MJw9o2zvPji57ncGxNiufTaZUaJ4oXXz3JyaYbxwNGcbvDG6h79ZIqTxzo8+eJZnn7xHN/4VX+Hb/72b+NnfuKfcdA/SzY2vHRhlS+6/xijvYJmWxE4i3cebxy1OETKNmOzxnqiOCIkVmqivOTcQydxf9TgXd/6Ldw/yZP5V9aiW4f4pu/7ripeUFcI/F+Sim//8R/nyf1dnp6g+B/7+9/Gw9bQnJ3nrnvu4oU8Q8iS73z4Pn7u3nvIs5QnPvc0j7ebFPNTPNTu8vFaHRUFfOgrHyMfJ3zOeWYXl7jy5msgBM+eOMxX3XCYdz96mmuvrpO7MWFY44FTM0w1qogAqIq5zgtG/V1k3Oaff+TjbA5KfvnHvpFAanxu2Rvk/Pe/9Lt02lN8xzc/zId+7ncQrkIROlW9S7U1URhKjK0CkKrM2AoT6KxBKUFaltham7mlmesepte1DRFCXBZCvCKEeFEI8fzkuWkhxKeEEOcmt399yKIQxPUGSmnq9SaZcRRFSc1BqCPOnrsEtSaxiqAcEbkxB7sHvO+e4ywtrLA4M8f7//b7CNqNKpioAIUgLXMirVChQng3yU8VxFrQigMazTpLi0u0Gk0OrRxhfm4ONMTNyq6cYikKU1mmpaJETGoXGkOIFJo3+nVOzktmmiErFgprGI1TRqMBRmuCZod4uksLhzYFu9d2KK2pkrxspTHJy4zZwysVkWrkKE3FvXa+CjayoqQeRMx1ujS6bazNuPDG64z2N0mTA4aDA0bJmF6/z8buNggoypTClGA8SZnwvf/8o2RekuNoqA4YTTqwjLMMrUouX92lRPDQjbPM9XfJyz722iZ3R5I7b5whSxM2N7f5hV/5CJ3OEa5e2OVbvu8HWbu4xdJUjX/9h0/wyKNfxRc9cBtf943fxhNPPs0bPctDD3w5i60O26NtVKvO8pEFpjt1nn71Cwx3+gy2UnwIF6+kHCQN1kYlP/zhv+Cnf/sCPX8DlzcSGo0u25lmd1wpEBNn8d5zbKFLbCpPR6wE0lefWV1rWpEGZ9BKk5VFVY/yFeVLW0OkA4bDFFUUxLWAM2cusNHr8bk/+2Oee+JxpqfrXN3dJgo0WWFoTnWIayFZMiSMQ+I4IE0TSmdweU5qPFPdNpfOrRI3NVYEtNszCGkRQmG9wwuPClvV9xyENBsB9zx0D/efmq/4LNZToDnoH6AcKG85ulQNH+erLYcxtuKgeomjksiXDhJfKU8NktxW+D/rHVmWszTT5fDJ265nqAP/ZWoWX+y9P/1Xwkv+EfDn3vubgD+fPP5PH97jrCcbpzz88MMI66nXG4yylKlumyxPaUdVp+TmG2+m2WojkpTlE0voUUm0XGft3Jtk2QHGF3Smomrf5gRplmCMpxbFaAmh8jSiEOUd7bjGM48/TVnmjJIhDokKG5SpgcLS9gOcSSjLcvJrVkTp0jqcDDAYpmuQyAZxkbIU7CKExjvIvSVAMD3dohnG9HcT9g4yHnzsAZSArCiptH2eRhQx0+3iTbXaEFJWqkcE1jgCqak3G3jhSdIxSZpgnKcsSspyEszkKqtzWZYUeYGeRN45W13J9grP5kYfMBxVA7Yu7HN2fZXpOc3Rk/PMzLYoeiNe2stYPFwnuLrO133JTdz5lQ9z860LlHs7JP0B3fXz/MknPoXNxswfv4nuYpdmq8vqxhV6ZZ9rl7b4vU/8HpI6vX1HEknKSLI5GPDMM6+ztDLP+lbKzqVNxkKTpCMCqQiiiM88d4n/5cPPMDd/I6dP38ft73qAKNTEocfkIxqtFgBLc4v8+w//C5KiJHGG1FYUtUBZGoGiEJLMVob1UAdMNVsoGZA7QeoVBkVpLUIJwjCEqMah6RZLs03uPHkXd957F9OtJkIFeFEFmHg8QaCRQZ3SlpSlZXgwoCgtqSkp8pz1/h4r3TaHFmeZbjUIIj0B39gJPEiQmf8rHlHiGZy7RG12GllWnJDc5aTjFK8kTjqaQbX4ryA9FWDnLVyx82Ly3fuqe+cmmalvWeDx1BuKbl3TrkfXPdD/vyhwfj3w65P7vw68/697gRBgjaXZ6vK5v3icNM8YJ2PKsiRWGqll9aFYxyg3bKUDfJGR5wYzq7i6NmJve0AYBJy6/yiF8SwfnqLRjJC6QRCFrO/ustdP2B4lxLUmKdDoTNFoNlm9vMHR5UV8nmKGI4TTCAUnfA9roShLbGnehsKWzmBsiTeS4wsNhtEsTpQkWY42KTZJ8MmI3sYOr7xwlieefYXO/DSPPPYwtbhNkRfVt20sgVLgIPQG7w1OV1syqTVKSiIdoBGkacJoNGQ8GjEejRmNxlUL1nuclJSmYj147yu7t7EUE/k6SGqh4MULO8QE3HHqEDfeUmdFKkYHjq21fbql5PSUR29kdGsxyyuzJPVZvNC0ohka5Zh8Z4f9tW1qARivefqpJ0ldyPbukFcef5aHTz9MU7Z59am/ZPPKFV5+9SXy3T55mtPf3OL8K8/Qrc/QbgjuuKnN1Zdf5+XnXqE0gu1RwI033cR0LUBpT+ZzpG8SBCFWBCSFo9nuApXQE2HftpPXpSAXHuMDGgqEq1aEWWlJshSHINaeuvDUooDcVLWiUFeY/mycMHfsJK35I4SHjxPFU7S6s5gsx5WeQAfk6ZhAh5RpyrA/prc/QEWaosjJraEoSiIRsDUa0TcGlMROQqCREiYk8YoVbZHeI5AcObrI7PISVmoqRJljmBeoMKLZahBOqPTO+wlzt+JwOPdWlkk1iWgJyk2gOqISIJa5QXhHWaY09fVXHK73HTzwZ6KCKH7Ye/8RYMF7vzH5+Saw8Ne9SRCGSOkpKssl3jqMMOhA4YWi0Whw7coqjXaX89eusvbGFeYXu0SjMeNeyqnleTi+zNX1DaK1lCOnlrh8aZWDvGB/P+GYbPEl73uY1z/2KW649y4uX9tjdvkQr5+9wGh/DWVzPvmxXeT0PJGWnMx3OST2ccoy9AF5XhVMtVY46yqgjHGkwDPnBix1Er4gZxEHmyTFPq+mY+abinc123jjOXXTceJuE6c1zlvS0pAVecV/KCHLDUG7RXKwQznOicIQigohZ12J8XAw3Md7T+lKtBBEeIx9K9TXked2EsgjcabEesd0u0tvcEBhBe16wAvn13nfwzfw2WdeY9c2MWIWNbQsH18iPUh4dXuXm6Yk7XCOUnrO7awR2YwjS1N8z3d+DVcuXSVLCz4wN0M83+H3f/0XWU1CyqLgV3/1l3jsscd46qULqHKPSMD+G+f47cGY3nBIOpa8ef41vuwrvoaLH7rC9t4uWnteO7/Lu0YlL20N+f4PfiuffepZdFxnb2ed3ngfvKDwmqy3z3pjm9uAojTUAkmt3kDFGabIscZTSsvVoava1cIipWamAUlvk6lGRCPSHCQlI10BlMqiZJQnHFqYp9WaQ4ch42RI1GqhlaI9Nc3goE8UhfSHY66trTPoj8B7arWYc+fOV8nx3jMejrh04XVee1Gho4hD84ucvvs0hWhSGDNx8XosBmUNxhiSsiDLBUFeJayZsgqC7g0Tgjjm2PwCwWSQO8fbMQXVmmnyNyAQtsQ7QU4F5DC2opEVg5RECNq5pd6Ir3OoX/9k8bD3fk0IMQ98Sghx5q/+0HvvxVs01v/bIYT4IPBBgGajzuLRJTauXKPIS6y3RCqsqFnaU4tCkoMh03ML7G+nzAQld9x5kqdeuci77ruX1PQQR06wf2kdqTRKh5w+dScWy+qlc8Sx4NWnX2TxjpvYH4/YXlvDO3DeEtXa5HlK6DOOz8U0Gy3s2Q0Iq1/bOwNOYCrj8ttwYS8lsrAsdATb+4YyTcmSAiyYNOPQ0jxCxyhnkNYQyIAgjJHCo40gQJKVBi0rVWJZWlQQooOAoiiQBAgpJlmvVUqVn/zfb9GrSlNWRVAv0HKyJMUh8ZTG4cYZ3VqTQTpGWI/IPCLJuPP4Ai4VbK2OaLRgfXWLwkQ0RyWdmWkOnzrCOJfojS28S7AuxuUK6QOak2T4uUiwUpNcvLzF8VqLq8+9yn949Q0iMlAxSZ5z+5zk6oVVUgoyPeDM9iY/9tTLiNFehUm00IpqNMKStfUt3njjPHPzM7x5dYsoCYjyknYc8G8+/BHqfsxeanlyu8+zn1tAe8cod1zb7FUJdb5qLwoPtVoEvoLZLM01oSzxMkBLT2Y8mzt9nBC0O10+//yNTDfq6HoT66rXpMM+M3Pz/OUTn6MsDapWx6U5o2SEcY44jiuNjJss9p0nTceEQlEUFmtzrqytIULN3PSdnJgLcdqjvWLz4iWaUR3hLXtJD4sirE5GvBRo1SIdpAjpaE/Xq+iK6sx7W7gmXLXV0GGASTyD/i5W+Iq7IQIKm8GE0macoCxGVPFJ13dc12ThvV+b3G4LIX4feADYEkIsee83hBBLwPb/y2s/AnwEYGV50YdRyOEbj7G5tY3pj9FIAgfN6WkKZ9hY71O4gqje4HwW8EWdaa71z7I4HjF/w2kO9je44V23sLq2hxsmvHLxJY4uHmaq00bLkHN7bzAY9mjIiHycMFhbR3c7FChEVEOmhoasE+sW1yLNcgpFWLEW7ORM9A5wUAqBzythTkd5ztkYk+1RUDlACT2NTgNvUupRCCqkQZVaZQToAPLCTURIEAQaAoV0AWGzxmg7weLJbYnBo2WAtRVwRSAoTFEBgt4K1nFMBkx1wkhAiko92mqEHG03WB+M0FHIWMX82dkhq1v7RFIR5wHD3pCmDKj5MdDBy5AXz5znxhsXKRKH1E2kG7Ez3qfVbpIWlubBmJlDM+Rv9ohVyZbMmS0FQRwxMnDyyCx33X+cvU/8JYVzjMuCjJL2VMQVr/AWDqTkKx67GR3XMaMha9tblXCrMDRbHY7d9yD/3Qe/nZ/++V/gkSMFf/DSmA9ducJ33TbNfF3x8lrO/vo6ShhyP4lEVHCk0yD3UBBz9/GIxm6fy1YxW5ekusGzq6uEQch0o86Xve89HJ3r0Jmax+eCVqvGK5//Sx75sq/lu55/krXhHt2ZNhcunMWYgu70LJtXLlRxgsBbGg6lKlOblLICN3nHztVV/vjjA776q+7h5qPHGI822d3bo3m0iS0nKIQowimHxU4QfoIkSdEepqabE4gwICoKmJRvcT8F1hsaTcHVCwlFOSYOBAMV0KoH5DYlKwoCHTEuqrTU6z3+xu8ghGgA0ns/nNx/L/ATwB8C/w3wTye3H/vr3ssaw9LUFDqKiOsNVs9eJAoiijzDFyVaSPaSfWqXrrB44gR33H0X21fXefRLH+LqpfO8/Po57nnwDvq9MXUPy8eOcDAY0dvdxypDq97h9rtPMdo54JVzF9DaUZgx6fYYE2oaQUzZmOH5Ny9SizRHkgEHdY9MPC4CVzqssBOMvcBnOdaOyVzA+a2CmeEW+7UmzXCF3sYaD95/J22l2b5whTBoIE3KqDPH7NFjCO2QpkRNxGLj8QELC4vMLyyzc+0yPtSIQGO8Iy8NHlld8cqKW6GFRCs/IUM7TGnxphI7qcn+Fi8J64oH7rqdwV6PxlSXQ0Gd0eY1nnnmTYrdhGI8rPb4gaIhPbPTNb7hSx7gqedepFtm3H50lpev9rn71Apnd/a4Ya7FsROHSMcFrfYUSDi0ssyP33Evz37hee56/ird6QZHb1riyOmbGY1zgrjJux4RPP3Uc6xnghqO3iDjnhPLPHtxnR/4jq8mUx12Dg6YH6zxB7/y7xk5gWrXyJzg6ac/y0OPvZe7P/0ZfuqXP8xCu/LUbB/0OX7iNs4/9RStqRpKaLLNPUSoqQlNt9kk0IrVcc7ooGBpuUWwL5iZbnN+fRetArz11JuCY4dup796hcNHWuz4lF6vR9SdZ30w5Py5i4xxXNv9Ao0wptucZnt3p+rexTF58VYdq2Jpei8wxhIFEi0lWWFopCP+4pPPsXvjFkkoed+jX8r+3g61mmV6KeapyxdYCeuIUBM4hZR19nJBTQXccWwOTDUpBbUYIaswJqWqBn6z3uD3/90n+cTL51lZmCINE37y536Pn/2pbyPc12zsvomqh+yv7tBsNf6mQ/3t43qmmwXg9yeJVBr4Le/9nwghngN+RwjxHcAVJvqS/9ThvaewjpXlQ/TzEl0LydOMZhSQWsNgmBJHEQeDhM54RFyrsZ/ucUOQcHjhENeuncWRkSQlS0tditIR1zWdVofcSsRBhotDWnN1Hpp7gJcef5aSSkKtygJjDHUFQljyQYkWJaUXaKFIjEcYx2xqJxZ2UbXBrMZknlpdsJt1UF4x7O3SrEfUWzGXhykP3n0TnpzxzgH7ezusn9kApdFBAycq12kYhdTikKwoyPMCL0FHAXmZE4gQFBhT0mhFDAajarntKmemw1dp3dJjnK2yRF1V+wltwBfOnuXk8iKHD9/IU8+/SJZmXNsbszgVsSBbIANanYi14Q7nN3b42J+/xEIt4vzLl1HesjaKqfuL6NLzypUdYmEnSfYBiIydsIbzgkbc5Z4Hg0r+jOTyc2dABOSmJJKO+0+fYO7KLjvjjFf3U5ZOwCMP3cL5s5eIXAUUbtYD1O4Bw3FJcKCp9Q74se/9XorMsL29SyQVZhL0owrL1uV18tQh2zHpIIFQI4WoFLveVeE/eA4yS+kkWV4SYHBFJXi75fAUDkgGV5maKkn3cxZm5/DdaZqNHqRDjJ+sFIXAFiWpKFA6QDhLWVby/YpEXmWVvB29KARSScCzn6SM85Lxa28AktHWDkcXpwiFITeCnV1D3h/R2ruM8gIXBOzu70LQ5MzzL3NNOb4WeOGJZ9CT9LVq0vCEUnPm8jlUKPDWI72lv7vOEx//DDpLOXNmjUx4Sq15+Y9/9zqGenX8jScL7/1F4K7/h+f3gC/9z3kvpTVxq0P/YMDRwytE1rG5vsmVy5fpXb7M5rjPyZN3cOHqNXavrFFrR8hajY1XruE6dW4+fYjtK1dRQZ1P/8kZ5qfq+FoDGyuOHDnGurlKv3fATE0RdmPKWoTJLcLnaBtVnYzB+O3siiwShA6ssowSjdCO3rW9qvouRZVbgiDPC3p9wzCPsK5gWBpuPH2MC+evkWeGf/3sKxjj0DLgvY/ey9JUnaX5ObJhn/G4x6WrI2Zm51g5vkgtiujMLYAvsWadMEsZDTOED7DGsdKtc3h+itfOrlddD+eQvjpZLWAt4BxCQiOKkNIzrWIuXrjIxfNnWVpeQkXQSz0D6+g26/R2DjgYHdAIBf19R743pnEipKYglZppUzBgmnrTku9ssbo2ptGWTMU1uo06S3FctWyRyFq9iiEUkghXBSSXEmcMsQ85fd8R/vfPnePIoQWOrcxWfFQEpkhxRlBfmCM9v0/sFLmzeJMw2MzxwhIGJQOjKIY5ADfeOI9yMcMio+kaZDi+7M5DvHR2h9W85ObDIa3mIr0rq/SSMVG8xO6oh8aTlil//xvuQ6YFO2qaxdmjxLFiauEQIHFJQTDTYndzC681pigIrMZrwWg0IM0tUoGSqlpNIAiVJgwUWZpV7dIKHIoOdNWlCjQHqcOYjIXS0g1LpIoJc0WnEdJwBY1OHZV5Chy5sbjAMtOKULbahjRkFTfgRQXwNd7hTMlukiJ1iIzAZ6IC6vR7tIRjPNrDdpbJbY9otPY3HepvH+8IBadSina7Sb3ZpNcfMEgT2lNTyI1VTD4ijjU2LQhrAaO8wGQRM/WQz71+gYfuvxGt6mRDjQ8TdvojjnW7vOveB9lL93jxjXOkg5SFw/MYazl/8QrT0x021zaqyDpR4IXHy7eFpHipSEuHLkFLR6A1SlRXCilEBafytsqfkAFFNia1gkajxtTUNK+/ucm7330n6x/fRgtFpByfefw5ilIQxXUeue8Y4/0RWZGQC8/o5ZzVq3vUmnXwhlajTq3dQo8zisEIS4kpLJEccezQHJevbmKcI6fyG0gUxlQrjOm4zuhgRGA9d37l3Xz6Tz/F7FSTOCxoxXXefde9XLq0TREZHokU69kOvYOS+w7VyPqGwhiCRpudjTUKE7GzW2c2Cgn24T2nZwnQZKXh8lqfpZmVagK15u1IAJhkmDpDKBVm8pxLHYN+zsbeDtHpRTLjUMISCMFqP6uYFY0Wzu7jXcWySPOCae2I4pj9JMUFlQpSuwicxpcFaVKZA284PEs7Unz0uVX2+o7RwQ5lUrCWG+4VilHhEFITKYEsKqp3WZRc2O9x702nkDpAW8+oJhgMh/hIsj0cUZcBpXdMt1oEgaJwIxBVBy83lUjMeEc9iAmcRUlJKATeGoRWlEWOLyuUoZJBJcs2E9uB9fgwRNtK4Su0wuYlxnjyNK3IYZNYAiOrYqp21QXNT1aYtgStJdIJpFCoMMDYSg5uCPDeoXQ4YaZc3/GOMJLhPVFYx/r/k7v3CLIsPc8zn98cd226ysyqLF9dXe3RBkAbAA0CJAHQiAAocjAkY8xCUsxEaDUxC21nxZjFMGZBBqkRRyMF5UiKIgkQJEESAMFGA2hvqqpNdZfLqspKf/1xv5vFuWgtZqVoRUwHz/ZGZNw89/z/+b/ve9/3Ubjas9RfJM0Sjp4+iZSSjoy4dvMG/VabWjoiVTMaHzLMc5h6Tm5ELC4vMtofsbiyxMbaSaJ+hFju8FNPvtacRwAAIABJREFUPs7GiaMNCLgjWVlo44ZjliJN6jydWLKoBEe14HgsOBE1cfV5DVVQyEjz4xl5syAUIBBSNcnXzjGRjoDiMM8pjGdyMGG4t8uzn3qMteVlUhnRjcBJR+lzBuMpIhL0F5bQIsLbitH+PptXr3L72k0uvvImr7/yBmmnS2txAasU+8MaZzWL3aiB7UqJqz2gqH0TSZd1WriibPB+EqbTPboLHUKcsLk1ZXdcsF1NuPfs/fSl4B98MQYd2J/C8ZUUb2sO9seEYFla6nLqSMTH22POdIcsL2mkSrEyJskizp9fa7gdLiES/gMWaCMFk7jQjDKtcgQNo9ozm0+6atc8+NZ48kIzHU45tdTm5z77MMcWl+jLhjeLaGbzdWF46t4TfOZso2YsqLFyiktSDJZ+1HA/+kd6/ORDa0wPxhTlhGGlmMkMh6I2ns7R9XlAcJMgH1qaHhH5dIapS6I0xU9LGJXYaUkaGs9FJjUqS+i2e6wsL3Py5CniVka315v/PUVR1zigNp7aB6JWB7xo0IE0PQ7rHFVVMQmCKG64LoPdbdrdhLaIMXXAeImtHbYsmxBn02xIykkiNFY0Ai2pNDgoXCCgQEV4pamspDQBKXXzPSLFzHiC+nsSqxdHEUutRUwqWFroYYRj//pd2osrvG7+Eq0NXRz5zS3uuXcDGxT9fhu1n9DtwI0Xb/PAl54hdyXGHtDe6HP76g3W7jnD93/wQ778lS/wF999DlNbvva1X+a3/4/foO1TDvfGBFcTyabJF0UC4x27JRgLiXUsJZpMBYazEiGblHGhFUEKEDHt2HImidgtRhxKxQvff4Xz506wtLxE2mqzv3XI9sE+pz5xL0+urqHjHvmtyzgDdZUj5zCdICTWWiyeTruFknCwvU9eW3ITiBZafO+1Kzx27jgLRzocXT3GxdfeoZVGyEgx2R1i6wm58MggMARe/OFFFrpdbly7TSeNGYwmDPa2+c23/pjvf+tH/LNf/5948FiblcWK7754G+cVemp48MlljFzk3VeuMdWS4c19hnlMcn1Ku+W5cOYk5fiAh86cZHkxEKcbSOEoyxoL1D5Q1zWxlJSzGVJoLl2fNDiCOCA6PV669B67N2cUfkYMvHVrtzESLi3z+Gc/wQPHMyJrmoGfVvhK8b033wPgr1/a5Jn7jhPHLWaTMY8/9RSrvYafevrjR/j3f/497t+4wN++dZsoaTObGUxRYgtDr9MhDpJaeLrdDqvHVsnSmMgKYqGQzvDGKz/it3/ndzjS7XJYTGknGdvX7lA6S5QlhO198AGhNdB4eGprUVJx/twprr3/PsPaNkpcFTf8XhFIs4TLmzvcGeacX+twrL/QpNrnnmvVPu12m9fe22ka6bYiFzXaNJvw3cmMTprgqgoICAVmHr6cSMFoOKD0Ta9mZh37eU0ZNLooyLp9Bvnfk1i9IATthQyTaHxRMdgfUxmLr2rc8iJqvI+IJLNpSTyrqVp9oigl6i0yGBaopSVuvvIuWlUsRBvs1VNmt7Z49PGH6K2u8K//3Te58MhJ7rx3h+/+8Dmibp/BzT2CCOAEtYCpaebXtQNZx3hVI1TEibUl1k+u0Wq1m7EV4QMupRJgjWU6zVk+GFFsDrixb8nHA9760YhHv/Ak48NdOh2Nv7NFKRMKdrn63g6n1pbp9yIwGi8NuEArioiTmEltmVVTFBGxlhhT8sD5ewhlzTt3dui0U6azW9x7/wlmoym3tgfUIqAEKAtaCgKeSZFz5OgySSvD1CVSaiQRb734Cp945mFavT43ru+Tz2Y4q4gjgS8dy0fWKZ1jaK9iJhMWIk03CySJRfuIK1e3Ebbi0adWUO027UyhEURVRZCNIlUphUDiRIUn5gfvPY+UsJi1efvaITeu7nOu22Y163Fxf4YOggMjyHeHvGgucvLU5zl/cgnR5Pnzwnd/yNJcsvz5R+9Bi4JUlORK8sjj51jWEhkg67Uo/uTveOf6Nh6PcRXGN5kpgyoQKTj7sftxlePFm4dcevcNnnr0aRbWFqjqgGq3Ed4x29tHdFtEVtOJJaGXcfdwSrfbYXQ4whPmpPMWaRwT1zUhBHZ2dnFIghTY2tLvtmilKc4ZZrOCOM4o8ppkYZmF5R5iNOaeJx7kjbc3+dYrlxmPcmQSyELGHz53hwvnTwCwcd/DZFohow6ZNlRVwOsW565+ncu7A9KOxNWwsnGcjXsfgspg3v47KiFZu3A/nbPHgdc/1Dr9SJQhVVnhXAWzGoLh1PGjbBxbZXm5y/rGUUrnG0hdCGzv7uBCRGvpCL1jJ6gmEx54+CFOnltBFJ72+jp+OkGe6PKX332FOE3J2ilrcYejx09x9cX36Ha76KiJihdK0G0JlroZWdxE0NY03grnPOu9hGNLGQsp9FNYSAXtyJFFhjhyOEqcLTjYHVIXJYnQzMY5eTHGlg6jLJO6JuQFZjQkC4ph7nntyhYvX9rm2sGUsQlEWYqKNMbWqEjSa6ccGsPbN7d55+YOd3a2cAk89fjHONwbkM+mvPvOJu9eu8PRjTUq75vgnCii9E2YkPCCnbt7BG8JQaAkoCTf+as/YvnoEXqrq/RLjxzaRtBkQWgPkeTNV99nfDDjyq1D3t4akxeWg4ljVFe0zASs4dt/9SOGA0NZ2IbLohXOGZANLLh2Bu8cpqzY2t1HxzHrq8tceu0dUhkoTMn+DGSaoaOIlVTRFQqZw8s/ehtbGoyzSO+45+wJ1pJGoDTevkamImQS0e+36UaC2hlyZ9i8tctykhHpmJYoaTOlKj3BB8pyRhRFc9+EJ3OC0f6IWVE1uINZTreTsbcz4cv//a9xd+eAqqxR2vPUQ/ewmMVMx1OSdobWuokT9I6iLCiKgtlsxiDP8VphvaPVSinLgslkymyW0wi4IELQSxSjw10kkpkTfPPPX2Q8tGRxmzTpIlWMrRyvvdTwPjprR0jSFt2FjNZKi42zJ7jw9DP8g1/5EktKszeouLM/5cs/9wVWNk6zcd9jBAHT2YSTp09y4tFPf+h1+pE4WQglSGPF0fUjFJXl9u4upTO0ux3uuXAP71+5ipgMkaniIDecEjlXX3mdT/zkT/Gn719n6bVXOHrvGfJK8NbFN1hfWWY0GVPmDnVXsXh8gedefI0z58+yduYIrvSILMUEuHWYk3nJvRuLtNsJIS/ZvXVIJxGcX29TiQwizZxx1CQfiYAImuA9sZdoKVjot0hzRzUuefxUlyhJuPa332VFB1RX0Usks50tdHSalhQ46YilZWf7LvubCqdtgyYEfJziDKwdW6S3tMjHn3qc/HDK3nhCdCLhyY/fR9zqsHLkBC8//xLdpTZf+NynuLG5xd72LZa0RvUWOHVigcvvbpF1UnIqjPNMcsu/+Te/x7/6w69jB3t0pOKfPrjK77y2xaH0tJTk937nT9BRw9588Pgi7VgQC00VDJUxtOIex7Tm/vt67Fx+jecnY/7xr36FlLSBQYWAFGCDQwWF947dYUWgJFayieIj4fTRNh+75yRnHznHuz94lSube1ybBO4MZhQH++hWG4zBKEdvY5kHF1vwnSt87ouf4Q++/gIyTfjkvSfQsqQMMRLHzuY2x1ZT1k6epnV5xG66BL1FlLzK3Vs3We50ONif0V1IMT6QxBmTvV1eLwasLK+TVQlf/Z//O8Jsyq1v/zlozcrJ40gLP/3Mg7z04hVKrTEZDIqSsqpQUs1doRJbNaZDKSVFXdNpt0mimNHwkCRLcc4ysjWbh0PazhKPD/n3/+oN7lmSCNEEHhlAp9BRnqgfw/s5v/ebv0d/bYGv/be/SDkNRHbK4fVXaffb/NN/9o9wweKDJlKSbhoz3L5JqXvY6Zi/+M7f8Nkn/j+Dy//i6yOxWdiqRikYDmZ4V1MWBWmsGRwcksUxrW6f2XjCqDQUXnJfIrh0ZYf+xcukGv76B2/wleWTbGysM5tscWP7kHJ/ytJqyqQYcm7tXrauXMNkFj/N0UnKkSM97CzioMiZ5Ya90Zg6tBpvjq9py4RUCkxd43wjuAEalJ+E5tUt0Ymi5Vos9SragwgfZpw5ukTU04z3dxHCI1GUTnH90FCOrpE0mUusHd1ABMPkxh57gQZVpyVPPvkob1x+n/vPnaPSgqTfJ/WK9zdvUhUTelmXqasZHe5xdGOB4cGY9bOLrK4m1MOMx+8/zo1Dw+c/+xibtw64uztu+KUecDVTLUhjz2qqGUwM//HGLlWk8AHiLKPWAoIjBoKRxElGFkFKStzRJMJDmrKzN2FtfZ3ClMyqmlarTSirBgDtfUNAozFBVaYiOIk1BuMtTsasLx3hypUdfvDGdSprWWq1WG957gwL4riFt5YsbTVBuJVBpi0A/u9vvcntrRm58rRbfQ4KRT9NwFbUoW5gR2WOcoa2jFha6rOQaRa6CRLFu1eu8MTTH8PjOHPfBXxeECrB4OCAPafxnZTVlua9/RFnjq0hRSCSmm6ni0QwKipMVRElCbauCEJSe4fWmiTNCMFTliXeOFohIJVkaWWFw4NBM03zgYtv3+bscpfpuCZVEUdWV1nutzCF4Vi/hwoVVzZvkdeNKKsjMo5mKRdfeZWHH32IPDg6uoMxNZEPaBVRW9MAooLn63/x12gK+r2M97euUR1ufeh1+pHYLISU5CiCVHgdM5rOwPp5doRk9dhRrtzdhACdRJG4mM8+8QCRdtyyU8ZRzMjPePq+s8jlB3nub57j7Kce5/b+kHJasj8ckXvDpedeJzIJIrKkzrHY7/LUQ2eYFjOubO6zuzlFeLhnscXaQky706J2Nch4zrdsGJrCSZibdpK4hXMl3hu00qRxxOrGElWZE2tY6LX52MP38Ft/fJEoFmTeU7tm49m8cZu14+ts+ZKOFgQJIlYUuWV3Z8DLvM35UxuMxgMeeOABxOtw851rRGmLo6eP0m93cKbkzcvv0YkcR4+v8sRXn2JRLlFcvkLiNZ975l7+09dfZlZ7ghY42VCxSmray+sQjbg6Nmx0YpZX+vSSmNu7U2Qc0FKiJNTWg/MsdhKklFw92GdpSVIcOio34tTGCt/69gt89Rc+RzvrMjg8bLAJvjmmC2mpvCGOMs6dXGf71g5FKNg7GDXN5Timo2ImdcWgiqhE4OrOIUo2Eue3bt7lX/6Hb9FLe/xj4O6tAVIJejrme8+/zt+9cJF7+xBKz/bBkCfOHkFIGBnP8olzVJVktRMRgqS3mPH2e7d5YFIxmA4ZDgbcd/osg8mYComrZ/i7Q3YyzcwEJJ5yMmMkNMpJPnH/SaZ5ydt7Q25PZ3OHsETTmAxtUWJsExkQxTHTsqCoSgiCKIqYTadkaYxAsVNHhEiykvWo0z5v7YwJ1ZgTR0/y7ntvsbJ6jqgcwo0R7brkpasVv3r6BG/8zffJzp3gsYceoNNtY2rDJK/RKiGSJf/6t/4lIlvgoQcuUBczOu0WJv3/33X6X+VyPrC/tUsnyamkZevmTZTSJFlKsBa8IY41adrChcALF99kYaHPUjsjixOWpGFlscUf/fBNnn7iHHdu5xTiBtPRlNUjHcqpYefOBGcsy30DM4+LJFlc0ZMRi1HCY2ePNdp+71jqtFGiIUzZomgOEfPv6mk2Nz8HBguhscGQtVskrRIZIIo1rfYCq6t9pLfoNKWTKmKhKUw1Hx2Cd4Y71zeJZcPrNN7TyVKEknS6LZTS9Ff7bG5uMzsccOz0Ka5fuUoWWWIFw7rg7D0n2TsYcO7UMgvdLpFT3K5HiG6XcjbiwXtPcueR2zx/cZtaeGIhm4QwqxkNp7SjNs4d0uq2iSNJETwyFug4xtUVaj4aDEozMwZfGIrac3cwpRW3KWtPMS3ZvbHFYDij127RSmKK0CyQBgESEYwi7mpOrrb4gQhI2WJalXRjidKCwhkWfGAlmrEpIryrkdrjjOUbf/oci9l/9kloWzc6BwJpqtBRxNXhDKqSTpaAaChsUivuHhzQLnJSCc7UjIcjjDM4Z8lHBRtrG5iyYrq3BXELawNJ0sL6gIgiZBzhQkDJgLM13eDZLSvuOX6C/fffQ2ndqDW9b/5XrTHW0ul00FohBJRlhSBQVSVRpIl1gowjZuMpaEmZaCabN0mVIg2Bly5dZKXdYXs64MSxo8D7LJw5h75xne3hiJX1IxxubVHfdwFlDFpKIhUwtqaeFcyMZ3W5jQme0jbgJuH/nugshADnPcYYQmVYyFqcOXGcrJVS5AVJEtNJYzppQq8d01YSOxozGA2Z5jV7u2MW0h5Ly23uXt3isc+cR5gKndccDCeEskIFT6IC09kMnCGRktrViEiBAq0FrSRiud9BSI+lyYUItprX4D+2Bzfy9B/P642zhABJlOGCbyA8rungnzlzkiRNyAvbTDrmm0xD6Ztj+LRulIwOaidwKNIoIk7jhg+StVlK2mze3KS3kLK80EdGisFoRHmwzd7BHp1OzOaNLZLE0k5SfFlxbLmLsQWVgZ/46afBOzQKXIRBNlLnA4OWll/55WfpxRHKC1RtKSNJ6f3cIKUQBGxtmdQVU+9oi4jYwNSWjIsxO+Ocjo6ZTHLSWFGGAE4idUwIzWREicD6Qo+PX7i3MbwJh/WahcRyrJ0SScHUlmgZCArShTZGeJ576VW6rRbtasAqTeOoK0HWJfWoxIwK8sMBmpjaK0pjscFjtSSTEV4oYhWTIrDOkRcVzluUkJRliTE1OpLce+4MG8uLtFJJp53SSlJ2dg/JS8esMMRIZuMJTilyLTioZ8QyQgWJM45u1mnub2gYJWVZks9ylhaXmsgBaJqirjmxNZJ9SVGU7Bzso7QiiRVL7YTlThsZK8rxiMPtPQDGVc7a0TXevr3D1FasLhxphINxgpRNryKJFJPJhFoleCyxbihtQvsGd/Ehr4/EyaIB4zpCFDg4GFF6i5OB/kIPJxTOWVb7XXSU4qRlbzJGmYCoDP1Whyo4fvt3/gO/+k9+lhubW0zePmTh6Dqf++Jn+PO/+DYPnDzK8uICL3zvDQ6GI7JIYmWgH8UEK3BAEgkiCVJ4cAKtYogEhfE4KQhuru6kUXpK0UxLhJK0Oi10S5PsjFjstYl1kyze7ffo9nvMKk8aNYlJbZnRlYLaNgiCqjLoeU6BlIF6OsG6ii/+xKN884+/x2w05ZV3r9KJEpIo4fxDZ3j5udd5+r7zjJxmdOc2q1mbHSbcvLrLA/e3WW21ub63y4Vjq2jpkS7hf/tffhElJd4HnBdE4seEssDd3UO8AONqvEpYDLCUBQqTMq0qahon46xu+g8yBrwnM5bxVGJnFf/rb/w6f/ov/i82Tvfm6Vwaax3eSVpRm7zy/MKnH6CMa77w8bN859WbjMsZF46tcaPMuX1QMzaOl0zNvefv47PPnOOf/8Y3SNuNSE62luduS3BC0kpT1pYjVGhwhS+/t4PLIlyQJAlESjOyNboO3Lp7h1Zec3l7zEJ3kUcfvZ92K8V4yRuXLvOpTz7O9tjR7fboxm2kc/Q7gqzXIiQaoxVOSY7ecwpROx4/fozxeMLtrV1aWhN0yv5ghHcOLCRxTJqmeG/Z3tmlrmsITdJW0IJxXdKnRWlLlIBYpwTj8aYm6aZU0xEmOHrtRaK5N3A2GbNnajpxh//0vYt86qlHiPZHtLIuS90OppiB82zeuEa7vdAERhU1k/0JaZqQF9WHX6cf+i/8V7i0lLigGc4KppMxWmquvX+L7/71cwgU9bSinUa0+zGtVode3EV4qIXgxs4BrSRlWFZcvHSFmzf32Lq5RRQsP/jWS5w/dYYXXnmXOGvz6CdPcO7MMXLvKCtLVVuctahIoxFoGriwECC8b37AJu4X4yzWe5x1eDyiAUbMrfQCnUmCDWSaudITLIHKWEpTIcWPlZaNMS0KEEtBrARJpOi2EvrdDsv9DjL2vH7xClkqWV1ZZiGK6C3GXL7yHnu7Q0qhaHWXyaRg5/Zd8hiSrMvN29tcuXmbleUWfn9GEXu8jBHKE4TCI+cuaAcEnFToCA52R9QqYuYCBMdaJ0Z4QRxpWnGEs4aiMvgAs7wEIYmTiChL6PQ0xs4ob95AqYyFZBFjHTZAcDXOW5JgEQmsr69RTC0f+9QnOLvSYm+Y8929gtdv7jKsLKM6MLTw5Z95gn/3b79DeyFlmlvKvMkhdbbJZBDB46pGRq1lRF1aHrv3GMKBdA15LXiHrDx6oUO7t4xOJc98/GE2FuGRTzyEdiCDo54e4gpLCDVVVWKmY0aH29y+tYXLZ5TWkMQadIr0giqUdDttlleP8eXPf5LHTh6npWKCtVgRUJEibaUoKamMoywrgjENZGhetiql0TrQ1xIRHEIGvKsadaa1aCGIgiDxNa5spitxt43wsNLrkCQZd3aH9FTKeDjExAoXSYKEg8EEqQMoSaQEvcUesQr48PfkZKG0wI/3uLV7wDSf0W6ljCcz4lhSjEfsbe/y/myMjxWicNx3aplrIrB/MKSlI5T1dFLBD/7ubVZPLrFzbZ+0v865J04hZItb791icanF/m7B/t0dpLOMXVMyHF3qEYxBpqr5MZEEJbE0pYY3HmMcQmucb44XIugGX0gjqbXUyErjyZALCW9c3eXRs30cMUpErCyl5HVjY24k+oogGm2/jiIQAm8sKjJ88tEnef7lN2hlHaracOfuDucfOEdtPJvv32Xz0hV0cLz54vMcv3ABrRJuvv42n/jMM9wVJT0ds71zwP7kEFceR7RLnIg+OCJ7YcgSjVAaX1lwnoPdAb6uaScpWgQiLREiJi9qXBB4qai8RwpBN8tQSiEjRagqXOE51LB/9xJpXGMxKB3hgqNyAS0Ug0nJhVNHaXe7jIdD0I5f+rUv8Uff+BveHxeEuMP/8KufY6HX587BPr/1u/8RISNG05LSWRAeXwbieSkYz12XVVXgrSSNEhYjwdPrXRbW1/F2nyxJSDsRo8EQm2WsZG0uXbqC8/AvfvfP+OovPtuwVaWl9JbV1XVm+/u0Opp2ssx49y5p1mUyLFnt9BlMDsmJWFpd4eVXr2Cl4s5wh/WjJ+gvtOiWfWajCTqKIQisb2INpZakrZTUw/rKMrouiUUAa5goQZqlqLqm3+1gXY3UiqIsG8ykjtgbjQGYjKasdlo4WfOxE8e58v4W1bOOelwTihpXGXzw7OwMEZ0uXgekVs09qsrmt/6Q10diswgBBqMB4ImjmOChnOQoqRlWBYPZEC00x4+d4s3LbxG0Zpw32YrgiLQiDpqAY3dzjyTSfP/V15mYKXdubpFpiRl7IuVRkSbICCUFtTFYW5IkTQJW82UaEo33vnEWBofwNIo9IefjwLkXIgQ8gpgOv//dN9jZntLuxrw7iKnzgqcePkkUgxQQnCVOkia52/sPqJNSNOVJEIKQZuRxY9SqzJRWK6EVa9K4zfffuARaYLwnFYLF/jJpp8O4rhEuoHTEsVMnyGLBrYO7zCaW4BKkT7DYJmDHB7RUzVnJO1qRYlo7BsMxrVgTbI1OE4xzTZMwgJYa68BjUXMbdqQVSZoww1EZz7JOmUyG6Fg3Hok5gUtKhRSBvDScO76CqfPmNnuNEYGvffnz80wIhU4UPkj++BuvUFvTRApWHqma0kmJecI1TZ9HC0EsQYqAsQ4VDKdWe7x98xonzx+jvbhKFQLdTo+b+3ucXYhoK03UdhxMJrx7+Rp1WVLmjvfee4fp7AAzqVjeWEbLmGEx42AyZrvIuTOa8eCxFdIFSaQ6PPbpTzEcDVgcrXHjxjUG+xMePLbOdSkYzPLmVBUaEFDwnixrsdptgfO0sxRbTElija0NtWvoZ0FKjBWMKg9BoWRzQiJq+h219+gQSITG2przxxfZGc1Y7LVxNKIzgKnzLKBpeQ1S4KVAyggpBR/2+kiUIc55isqgpMDXNXEcc/TYOs7W7B+OmOQlFlhYW6ItAje29xA08mgfmsSoY8dWiISkqxWxDkQysHn1DrWrMSJiOtih34oIIibPZ3hb0ooVUQxCNHLlJsKsCYKVorGPlc7izDwrwvm5DsPjvcMLwc3tCX/9wiuYgzHB1FCWdOoJe5t7jP0RBr6HEx2WFlvUrmGT+LkpTUmJ1hKtBcZ64rTNYDAmsgYdKmoraPVX2BuNWV1dodPtUzuBwXH95hZ5WeJoov/K6YRMSzrtFl2dkFcjgmrs6wFNbZuSQEhJnCZkaYr3NXGsMbVFymYTcM7hQ9NTUXqeG+kCSsbYIAiyyUXN8wrjJZ4YX3lqY+h02uAMQjRBPcxLusPRmONry1hr5pMDgUdQuQilmqmP1JJvfvslDgeHSNnoKYSS+NBYL8U8HQqgsgYhJZUJCJ1SGEcr1XTampWORsYJdTVFVJbW6eMcObaBg/mpTkJRcHB7SNxOObZ+jL29PRyW1tISu9s32HrvTd596zJJkmCqmjs7uxzMcnS6yBNf+gUefPpZnv3yVzl77By/+KVf4Be/8PP8zBd/hqcfeZzYQyIlwVqcD3Q6PeIoIqIhrcc0HpRMCRalR1lDaer5JhOwCJAK5yG3jnL+WrHWY+pAbqAwlprAu5tbCBFwOKwLeOfIhOTueJ+9fMZ4VlLWnmFeYPyH71l8JE4WPgRq6zHlhCxNsM6zt79DkIZLr10CB66q2HzzIsfX+uwPZ2RSsLTS53A8atRyRcHCQpuDaY52jlQKqrpgcWERX5cI0ePxj3+c08e2uXHtHZa6XXpLfdJ2n+HeHtY4bF0SCYPGI1B4J0A0hPWgNQKFDAKCx+uEP/vuRe7c2cdHkr6Hnzqe8NqeIXeBma/542/8FUtrS/zcZx/g57/0DJfeucGPXn0HpRXeNaIu5R0KweJ6n3YqMFs7lAGqyqF9oNtOaZ0/wcu//w0iHRFEwKuMwtQc7hwAAYcmL8acOXqUdpzROrrBD+XbeG8x841NxLKJ8QuC4TRHBMtSb5GAZXUpJgSBVopYNVbqWV0yq5pQnQB42bA2XQj4uiYKAhXqiNgcAAAgAElEQVRLhIakm/HSG9f40s9+ie3dMcZCcAJCjUhinn/5Xb76c08xLSuiKG22S68QMjT3MsCLL1/jjctX0UoTnEWqprEdQvN21pFuxHCAQzCrSrSQTPOSSCq2BhUzKxiTkk5zdu02OYHFylKMB9waznDS0U66HFmpmA1u0Vq8n9deeZ7icIo3NYtLq2g/4Eff/z7HzzxE1utz7Nxp/sdf+jxvXtzlxMYG+WxCFEdIFfHET/8kYi7IKoucJ9ePcf9nP83dty7zt8+/wPt3byOcoZct0ktjOqmgpT0lIJRiWEe0EtmknklJIjWRVGAtFQEqQ0s2Hc4kklS2Ymdvn5V2h9IaIiTpk/ch62a+VVWGn/tvfnbuiJ77l5TE4UnjjyYK4L/8ErKBrASPVIpp0Wj4q1mTHgXNsc45RxLH6DjCBMHC0gpaKpKoxaeffZallR6pEMRS0M1iOlmCdQYVKYQW7L3zFkIlZO0eKusgoi4h6tJa2cAtHmEkOwxn8GOjNcJTljXGNCYhMX9wI6m5tZ9z7dYBRYBAQjdLOXMkxicpg1ozzCWRtoxqx/jgEBkMn3j8PB9/5B6MVQQ0OI/zkrwyrB1Z4As//WmOnlhBCoWzAesNb73zJs43rNNYKRY7bbSCfFaStRVRmpFbxd7ugKkrsbJg53DG3tgR6xjvaqywCEOjDfGCECRCRIxGAyIdk8xLlLo2GGtItCDMU6Bk4INmnbUeay3eN/xV4SyRdWBmFEUg7baxXhK8I4ocutViZgLvXrtNq9em1WkjI4+PBZWoKINtAL5YNq/fJNYRzs5xBsHPWRtNOWOdI7h58TafRmmhCM5hnWHqHO/cHnDjYEbtHRKBtYLhrGI4HLO9M8T7iDhKiYRAIOlKjQjwzKcex9ae2ub86IVX6Jx8kI6u6PmapeWMwdBwdOMIcSIYj3bZ2bnN3e077A92yPMxoS6QwqNbEZ0o5eiZk6ysH23G60GQZgkLnYRYBqZBIpOM0tTEiSBOU2SkGzKECFQCbKRJkpQo08TzaYh2AeE8qiwRxiFdwFQ53W6bui4/CHFWyAbcLJqsTh8cOIkZTT/0Mv1InCyctXgCcdrGeMnw4IBgPbN6Xpr4pocQRboZXyoF1nDn7jausihqvvSzv8z7mzc4i+DwcEBdN13koq5ZWFyg8JKd0YxHH3+Q9vJ6U7sLiQkQohLsAV7kVJXFteRcHyCpjScvS/rdNj9uNDgpePnSLWoh8QScK7leaL63s8DppZi3qz1U0LSkZOYK9ieOlVWYFCWPPX4vxbTkYFxw52DEkaUeJzeO0F9eYmpKTpzbQL/0DgtZi6qastBeZvPGDaQQJFqgRKMBCVJSlxZHwpFlqGcTZsMpq4sr/PDdtxAKslaEJ0YEh9WuyXMMHpAERdNMK2qOHFnhzq0DalPPwcmQao2LHIX1GBew3hLN75miCQpOtKKjEwrj+eRnnmZQzCBI/HjM3dGUb1+6zp2dEdOy5v/853/GalvzyPE+UdZm5jXHzmygUolMFPt7kya8RammiTyfUwvR6CPiqGG5QKMoFUqg40YDkmhFO864W+c41Sw8VzukhSKfEqRiod+iNCWDPCcvFeNpwYl+ymNPfY5uR7A0vcP1t68wGxScORczLQ1uYZmdvYo//M7z/MQzn2HjnqOUkwIpA1UxRUvL9nCbrNUhjlNiGai1wqqYo0cWkHGLdpbRb6UsdBMIKabcRVvHQhITnGRaW6JI0YoyrKsxQiCVIArQyVKK2QxgDkIWJO2UqfDY2tHRGi1lA+I25gP9T2hiTvDeNvdUCK69deNDr9OPxGYhBNS1RSCpqxne1uze3eX1Ny7jvQfRvFnx8wia2tHttHjkvgvsHG7RljG//we/y8nTp9i8kmP2LM5ZVJTy6Cef4N1bm8xubzEbt3Ev/4ALDz2IQaA8FKakrmrG+2MYbbG+mGKDRaHw1tNrJ02svmtgLkJKTAjcGhyAkEjtIaTU1Ly8NeHISh8nFUpYzp5a59awwAuL9YHgHbWXPPbJC4QAW7e2GZUF3lcM97dZ6WfMRkPOnFxl884eUmoMFf3lPt1ugsMSZExVGWLVJDaHfMyZC+v86JX32fzLV0n1m5w5HrOxJPj+X36TrcMMsZjy889+HJUpjG6ANA1iIKUucx55/H4O9l7EOodzgmFeNPwWX1PXntwH/Bw1oAAXBJIa6SJmoiS3grfefI3uczNmNmd5tcdkVLNUGbRynD51hFuDMYOZY6ZnvHx9ysQ28cdNeIukt9DkPoQQUFIig0crRR2ajE7rHMk8Kau2TRljfY1WAi88LVtT+MBCFpBKE0eaSkiq2bh5KVQlewUMiglFXbOyvMzpI32uvfYDsk4XpQQbx5c4fmINpMWlPf7R177Cn377OfLK8MorL/Li6xf5J7/yFUJwKN2n0+4wy2c4Z/G1IQiI/JhMeh5/4mOoULK3fcDWwZCVdJkoWHoyI2pFtKgoigotMjoSfO0RQdLRCkzdLHQbcXLlCLBNaS3Og44zDssSEeD8xjplXhKcxXjbJICH0ICNQiCiccZa4bh6c/tDr9OPRhkSQITQRJA5x/7hgBvvXyMxzZtFySZxyLsGxoJqlHmVq4jTmBBBNRyR+JI4TpvaW2uCq3nttYsc3t3FISAohAskIiKWMUEorFc4KZDeNBkE8205CNc046RgVtY40VjksRatYjZ6HcrgQGnQDuc8BMP+4JBZZRtgzWhCKxEcWepSW98gB10T6aak4vipDR689zyP3HeBhx++gNaa0WjKTz77GA9eOEPcSnnn4jscbA9wlUGH5hSmEzh5Yo3t29ucPrvK5Xe3aEWKtpasphp5UFAdWg5nki/90j/knofv59vf/T6bb1zCz6YoI1BBogARGjxfXs6QwmEISG+JRAPxjVWjBSEohJKAxQkJQSJCIK80d0YV4WDA9mDE8LBgd2fKkY6k5xz3tD2nxQyR5xzsl7x4PedgWmGNIXMBpSXdlkJYiLRA6wb+IebTGKUlUSTBWcqiKUmVhiADzgeCaKA6B7OaLJurTY2jspairDn94EOIOCEED0oxKioiAR976Bzp4lGytI3ygSiN0EohBWiRksoYGyX89JOPoescpxO0FQjZTCekCqAESZKQpilxHDUTHKlYWV+ms9Blr3AMbUBrzbioqFzAJoJJXTJykn0X08pShBBEWiHxRHM9TIEiihKK0ByngnUEIamqgso4FlstVhd6eGeaWIB58/eDvDLR6GmU99TK0mu3PvQy/UicLJx3DIeH5LOcwd4BV1+7iJOSWXDNw+wD8Zz5qLTG+4IQAlXtSOKkGc9VOSZAv91hbXUVIQKVc7x1Z0xVNx1nLQTGOqZ5iY6jJsuwqqiLGZPJmI4M+ADKe5DN0S/IiHIyw7mAAaQSyDLni5+5j71vvsY4r+ZouTlwpnZYAXlt6CTrXLj/FJUtEHmBpHm4dNw0oIRqeiNCCILw6Chw/PgRalvy6MfO8PBDx3jx1beoy5IHzq6x0O9SODh6aoOD3QOuX9/knYs7hCCx8zHuYFYjpSAiphoGnvvzP2DBC54826ctc7I77zFtL9M+eZY6WCIEygfOnjvKW5dvsdhPcaZinM9wwTdv89qjRUMCl7L5XCi4fZATa8l9WnD9zoihdRAF1nbhyt0x48pigsYEx739iJ1JxWGRc6Hf4qfOL/D1ywMWWo5+Irlaxzhr8HM9RzOXCo3GRUp0ognzd1tpPJGmCcatPZ5ALkBkPbyZ4SpDSDqkKmXrvfepqynOKs7fd5qv/ewzXLq6y4n1kyz0O+gkwUvI4g7eNaS4NE1otdvEWYrwp3n42Z/g1//330Innt/8f/4tv/prX2XZWwYHg0apGRwiBLIo4U+/85dsbe0iZNOIlUrjhcRITS0k0ho63UWUc3Riw0HuiZIMU1ZIrVCJJBMxiJjd0pHPRgDErTYhwLT2JNqzN865794Nito1m76gwWBKgQuuiVRQGoenV6d8+gtP8Jvf+sGHWqcfic0ihMBg/4Bbt25xsLP7wWw9QpEH16AiBYTQWJ+7sSVVAcab2NgzMglHkh4ah9CCfr9LwFEPR3Ta7TmouCFKR1GCmbMom7GgwdSGupwSt8UcMgvQ7OQqkth5mIUIIDwYFMpVPPvwKb7x8o159z58IOoiSGQw9E8sEQtHlnYQoml4SK3mzMv/zKwUBLxsPusv9JEhYIJDxW0unDnJ7t0xDz/6GDpKMN6yv7nF2bUOf/OdATLyJJFAIFA0uaBaKEpKUDDaBtmxHF6XnOhnUB6gym1OyQ5HThzDSItzgU9+8n7MeMqNfctiEuFrKELTS9KxogwRkRQk3lIYh5ZtnC0wsmYYJDPtKVzCbCQYt2piJRm7mKArlI7ZrhUii+mnCVNf8SeXdllI4cjSKt+7sU3WFigtSaOUMs/xAbTS8xrc4bwjipsyRIZALOWPKS6oILCuZjCesJxKklgRXIXKPDsHI0xRk6qAc1BNA6vHjpO1FsgWunjnGp6ukiAj2nFMu9NBadU0F+OYOp+wrg1bImUpi3j15ct85QtP47RkMBnS63UJAZ5//ocMh1NUHDUj6LJCuJqnHn+Ye8+uMR7sc/WNi/gg6XRaxLOCSWKw3hNpibeBJOtgYkdZW7SQVNOmZ+E8jfZHgbQwnE6JASc8za/fmI58UEjZPIsSD7KBMlfF3xOdhTWWdy69zeGdbagaWbXwNA25H6duCzXXJigOp4Gdw6a5F+EYj6fUVYW1TZmiI4FzNVorBnv7OGNQonmLO+9x3uGsw9aG0tbkRYF0MyDgjMch8KIJNPHB42xDglKigbwIKqSKOXN8CV9UjTLSewK+ydR0NXUI9BbbmFTgpGxKo6iBHUslEKKRVgvhIYT5sVHgvMPMa3JlNEJE3D3cp6pKvCtBwrHzRxnWEhnP2SdCfLCZSikIwpIICVaSxYG4iihKuLw95MpuRR4lvPvSqxR11dDrbWA6szz7Mz/J8mLUBLwmCjsXQslA45VRksJUWBUzshYjFSOruFqBy1bZywtGlDzSVzyYWk5msC4jlozgRORYkorzHcF+pZjEkmtF4M72gM7/y92bBVmWXed5357OcKecaq6uKjQaPQHdmAkQaJAECZIQR3CAQRGGTUqUqYkPUkgOMxR28MUPCofCNh2MsII2JZliWCIZEimQBgWSmOcG0Ohu9IjuruquuSrHm3c6w957+WGfe6sAUSQEMOwOnYiMzLyVWXnvuXuvvda//vX/ZGTOYVRyVjNKdWQ16cyTNErbZY+KQeFwphNQBoISyrxAx0DrPcFYbFHQBqHIHaA5bANrayMihpLIojkgzwuKPE/4gDVYZyh6ZaL/O4fYnCCRXlbwgf/q/QyqBRWe585f4InrOwzWhvTLkl7R40Mf/ghfefr55CDX+ZO+5U0P8l++/6d4/Wvvpw2Wor/FXfe9hq31kszCflSoLMdmOaApyoLoI8Y5gtW0mWN9veOc4PEqUIdA44WtrQGhbdASQQKdkFzC4Dv/krSmknRkK+Hb3qcvi8xiOp2xpSwmRpRWzD1UInijCF4SmSZ6yrxMng0YgqtpY+T6fmQNISsEox1iUiprVHKlvvPcnRy2NduXLyXJ/6aiXlQsphPqxYTdG9cJswl+Ebh0uIfWoMSTa83Rra0kU1c1hKhQyqBVgxWXZj9E8/fe/w4ODhf80WeeoglCruD7vucBNo4fpWka2grQgYuHh/SKgqr1KLfG7u4u49mMEEISAVayKkls56CeOct8tuDGtOHFnTnDfsvaoOT8hX3+6COPJEqwArEGaVO7UIWQqOQaMqVpJOK0YqepUGL4uZ/4CT72x3/IkVyoFvu44ZGUxmpN9BU//EMP8dwzF3j8iRdZTBq0EZzN0G3NYVVTieOdP/g6/s2//QKLeYUyhhg8xxmnTS2RL++2nO1p7uwtT7sk66eAtq75wJ0Zsxj408tC/87TZNd3Gc8CD9x/lktXLmJEaFE4pdESyLPUtaoWibJc+xYlisxlKJ1OE60NZ9ZH7E8qvvzcNTIFV6ucO7SgYsvxE6d555vfQjYakKHZOrIFeEQL5XBAkZeJJGeypPyt0kkq1hGAbHOTf/iP/j7/0//262RK+Mjv/RGv/4d/m52dbf75v/wdRDm0KxgNSt79ru/m5PEjzOZT5pMx88kML4Ircsz6JmdPnklr8rOf4epehSMnKgUmY6IUygutVxyOD1Bt6upNAsxqz6z1HNlY5wMf+CuJN6NjN8+kkI7yh9ApowtRDGIkua5/m9fLIlgAtDFlD6k/HBJ9VQSnFI7kWr1oWgqfs1Z4vCSD4J1JTpQZJ7ci2uRIqMiLHG8dzeGC65cu0Ov1uXu9R54ZZjde5NLeS52mZ8AqjZM0HhycQRuN9y0+Gq5uTygzMFJz+eouViusM1hjacWDgX7mwAo/+Pb7sSanbiMXd2teOLxO3u9z+eoNdCN4rSjLkhgC65slN25O2dm5Tmg9sbMyTGxmWY3BxxhIuw0uffgLWKNx1lK6jFaSn0mMkbZpEjdDupS0o6IvszIvQgyKXpnxxw9/GaJl0TZUz58ne8MGMVpQGQqL0nDyFWc4fddZfv/Dj3Ps2JBCQ69QfPzRi/z0d7+J/+W3/h/KmFp5IQQUwpVqjlYZ+EhphLUsZx4rgljqRjEqHNHP2W8Ucy9kCA+sKZ554SJz7SiC5+bhjPX1La5UN5CYRr21SZ6ypdaYwgDzFFh1alurrl0YRSgzQ780lIUwKjJevBg4c+5O9nd3+Z7veRvFoMT7gHWGwWBI3VSgFC7LEtfHaNCyCsKq634l5qsiaphNKsoyxxXrfORPPsWXv/w0LncIDYc3J/ztX/x79IuMvZ2blEXJDM2pc2d54elnaULEuYL5wQzXL3nlA69l/LlHuLSYkWHQTUPrNErfWv++m0iOEtEatFO876feRSEBjEJUyq50FyCWkUKRxKWJyQgpPf7tXS+LYCHAwncREaGNdC8w1fR5oWkWcxYxlSyFcczbFiYzYoDLVcumZIzqmpvbY/b29phN58wXC9ZKRz9r2Chtp8od00gwQhtMotcioJK3hFM69RZbQaQlqIxJC+pwDyUt2jtenAjH1/pkucUcH5D3+1jT0ITIjVnDlx57jCNHtxgMR+xc2+b06VP0R2vcuHGDQb9HCJHQCioYtKT6UpTpZioE8bJyPVNKdRujxcdkH1jXC3KVdBTQgEn+FsH7RFiyBtVZGWpj0/+pDKFtefr5C5w5NuJUphnULS51pClyhdXpG60is1nNiWOa/f1dDuKIJqsplbDYv4FpA60RnFE0IaBQeKXQMdIoYb0omNQLLi4Uh22DBo77wLpVHOkZ+llBkMhxUzHvNzw1DqhsxLPPXeD+e+4iREHFrjOldHpNJK4NkNzlUSzdZ43SyUh6FrHKMcxLCq2xRcXhbIz3wukTR9AuGQkdP34iYTsuT5mcMV0HJlHxlyUhkv5msq0UYohs9SNTMdRhwpNPPkPeL5EwozQl7/2FH0nlUYxJ/EY5RsN1ZlWFUoqiHNBMJtzY2+XY6BzZxgZ333031z//MGOl0U3EZJEsS7T7gXO0dSeUhJApzU/8Fz/I2kBhYueoztL8KlEJJdXsSLeDtDZIXB5B39718ggWKQAm1l2M+AixM1MxWpM7h1WaViKTtqHXP8bhrGI69wTARcVTz17ihWevYEXjjcdaA0QssAgaRURrT9HLyH2TxqydZVI1ECOXtyc0XtNUDWc21zmxnrF2ss9nr07Y2Q7Mbx4wAk4e3+KFq1e4dEXzwKvvgoMxRd0wX8wpy5xRkfGdb3oNMpuhyz5Pf23Mq/I7efapJ3HOcu74UY6c2OLK1ZfIet1iCGCr1KoVUXgajFG0TapFFYl1qZUixKR/IcZQxcCRI0epq4rJ3j6Zs1hr0LElRDBapRFopTAE6ghFqbFRs35kizEV+x//BGweZb6RU1ct80XDotFoVVEHw0BrWn8dmWvOjApuXLuBJYAXjDYURidJmlaRlwpqYdHWtMbgq8CRUrNVwLky40gZaNrI5fmEXPXRuWEjanrOE+0cK4Ynnz7P2c01tIvUTZPA2qpF7NLdDLRKxk+QsKIokSYqvFQYFdk9iFil6OmC2c4eP/OjD9HvbZAP+kzHkyRdGBp6/R4SJZHu1taQKOlElvRZGdWBqHRcH89/+yu/wr/8J7/Kq7eOc23vGsdPbfChR3b4u7/8S+ioEJ08U/r9NebzGaP1NWaHU+66/z72r12nd+oUjUqDc7NxzYnX3MP73vwg//RXf4M2egbaQufV2ix8MrAByEp+8a//GLqeoYPCS5NEhTqmoIh0ymTp8ItyK+Aplaj+3+71sggWkE5B0WkKM7NJ1DSkVjbKC9F4vASUOBZtgw+CM5bCKGJMtF9BMXcR5w1Nk1LIhfL0ew4TBRFFqIUrbYOKHiWKXuEweca5E+vQNqwVm4yGOVErlLNcuX6VPDNkopj5mvPXrmGwNNIybwKvPnEKrRX5yTvIioKmqXhV0cdmmoe/dpkQDI898SyDUR9tNFXVsrt7gFY2ieREIFZgDComOrlWluAlOWd1J0KIsQP5HMYY6s7v9OaNm2iJFHmWjHNjICDd1FSn7iWSOjraEMSzXy944tqCN29q1tZGzDNLUZQYlxEzi4qKEAuOKNUBoBatAtRztC6wRpIhkdH4GHAmTZFuZJZpG4jGMXQ5NwZJTq7QGh0bFpUmaI2vMubRM8g1SgsnS8Pzi0hmkx3fXALr1uA9+NhCZ0QsnUt83QQMyfcTwBhLRKiUQvuGYyeP0rdw5cIBd991itMnTpPlOXlWooepC9U0LWUp+KZFYro/0QeKIsesRBS7SyliiGjriIuKk2sGX2r6pWM63eX7Hno73rdkNgci1hoa36C1RmtNkWXM2wVr62scBDh+9DiHszH9so+zGW3QyKzC5pbGRwxC8JH5wiMxcUv+mw98P3E+QVlHlKR5kd7fNAC5bDcjQohpbGI5SR2ImG8/VvzFwUIp9c+AHwVuisgD3WObwG8DrwBeBN4nIvsqhbVfBX4YmAM/LyKPfDNPpAIKNFalDoROf4fcObw1acEjNCFQ7e3htMKokNJmDF4nD1IdFS63FE7TLyzH1kYMejnDzR7aGZREDAFEIZKosFHBbLxPM3eMG08OjEZDcpfz/h94A7v7Bzz65GUOo0ZlQxbNFKUsX33uRd7w4F1MZzOyxYzjJ05y/fp18rNnyO2Qj370MwyLnEZB0zRYY7h+8ybVxYtY52jbBG62rU8ajt3MgzIGCJ1Qje6IaSkdzzKbZOE0DIs8zUx0GzeR1roTWGIKwF1N37e2a9UavARuzgwcNzgJ9BTgG6LoNHSGwWG6cXSLNQoliklrib7GuxJVtcRugcYmUY2twJn1HlcP52zkhtm44sh6j+gbpqIYDi3nxxUnSoMHdjz0laNvFVtG43NBQsV73vV6nvnaJV64dAMrlmgVIjENXJFKUxQYkspZGkYTnM7YURnjFw7QFv7G3/kFjm1uUpQZruwneYIYmE1nWGtpFgsa79nY2MBqWARPlOwWYNjduxAjWqWOVRMqyq1NJjcu0esVzG/ucs+7H0QFjbgW38pyD1MWBYu6Ii9LFqFF5YZwc5uiP4JqzvpWCb5FYsPf/K/fy1Nf+hJNBqO1IVtH1njVXWdpmhr+h/8Dp8BkWdIDTTPS6TzoGK9C4lokKUTbdceEEME5TS3xP9x0/4nXN5NZ/Avg14DfvO2xXwY+IiL/WCn1y933/x3wQ8Dd3cdbgf+9+/znXqpDnnWiciJRko8mmkjA+0DP5GSYpCWhLUoCRoFzin7pOLoxopcb+r2CXt4Dkyb5oixPVkFCwCqFNS6Bf1YnnYaok6HsZMqwV7I+HDDaGOJcSRk9p7YGnD17iqcuXOXhJ17CmeRp2R8OKPOcyaJlb3/MyTtKIhnWFeS9ESiLIGks2SXqLcD6+jpVVRFC2szGJN0HEYhBEmVXJa0Ouk27vJakJRUC0XvyPMN7IQbf5SDp3klIP5daaclS0OoECutoCCamrGHRUh511EpTNQHfBajYRqJLpsZoQ6kEMywJdURCqpFDiKuNK1iqaBiKZ6OvUcHgioJGWrRLKf04NAxyxfUWFq1QZpr1ssXGdEggilecXMeHKQ/ec4Rr13a5MmlwhcLiUMnMkChxRdCCNO4yq2uCDjz0wDmaesHDz1xnc7SGURqdWZxNJDxlDNV0ynA4JLSe/qCfBIljN+F6WydhlcIrle5vBJVZGjPgSzembPYcZb7OG4YFMmshZmkta01cttGNWR0I0QeiJNq6UoayLJjNPGXQ2FMnOHvXWSbNPlEi1XzCk48/i7KpDLl+cx9rNFmWkRubWvmZSRibTkI3QMJMlvquLnm66qD4zX/76W9iq//5118YLETkk0qpV3zDw+8B3tl9/X8BHycFi/cAvylpdX9eKbWulDopItf+or9jSJFbAJtnOJOGxmadLVwVa4wxDK3h2Eaf4aDPYFBybKuPUUJA0YRUuvjYdKa9EUviLixpblHHxNnQugMRU6CyWYazlmFuGOQO23VllFEQDGUmvObes3z12aSRYTRsrI0waBbTmivX9ih6F4howmLMtDS4XFM1LUWWpZPXGWIU2tbjfUBrTds0KOmEXVQS0pAuiGitE025u7S2BN8iMdI3hhiTEKvRDomqC7DdzKzWyUCXrp41XZu1izuLyvPKc3dwUDVMokLGC2ZVm4ST4yIJ3WTdhlSaSPJ3VdFh24DLc5q2QnfObT0VkGipvbDpAoWq2Swsa1owHaOw0rBlNccMZMOMr+zV6H7Ofgj0M5VkCUcDqEEM/NB33cf589f58oUxk2YO3bh2Qyq3lADO4aPn2NZR3vb6E5QRPAOkv0k/K/BGobTFWpsyrg4bM8Z0ZUfRrfN0zzrKCpqED8VufXSCGigtLOfftsgAACAASURBVFqo3QbXDzxnHnwAR482X6SZGb18HxRtCFjniLGhKAoO9g/IshxIpYJzDmdzonbE6CmPHOXg6QuAwStF4xconbboC08+R2YMiqUlhaC7TglKYfMcrcBYR54VaGvRTpFrTa0N97/+bj76yFf/om34517fKmZx/LYAcB043n19Grh0289d7h77D4KFUuoXgV+E9ObUaFovaCUc6xWcPDbk2PENQgCtFdYsAZuIdS6BfBJBBaQbNc6MoFFEyRKVW4P2EZVZEhlaE6Km0brDCgLWGGqJSOuTQpESfBOQtqZnDVFlxELAa9Yazfu/9038iz/+FEqBwbO3s0NvraTYLnnxxQvc96p7+O0/+jzf991vA4TC2VsnFApjNEZbYqxABzLnaNoWjUWi6vgWHYHsdt1EEXQM6d80WBxkgo2WNlSsD0aICPOqYe5bdJTO4KjrHCwi5ILTCh+h1IbexoCYH+XO0VGydUtde+adC3vmynRkdwCmkgBNS93W/NK5Df7n3/o0a6VFWkVrArEJFE6zVig2cgc+cqRp2OzBepYzaYW6aTnIHSZ6hsqAM+zFnMJ5nploXnv/aV51x4jx/BBFyQc/d5GbUyEvhuxMxoneDUzEpagXPOIjjQ/sTW9wcX9GUzf8zZ9/Lz/27vuwZYEVkEWLDCxSzfBNjYsgtWfz2Bat92ijaZsWY+0qKEQRrM1Wtz/NMypKY9jdH6NEUYlw+liP0hqUN7R1C70subIBXgsqCjpzZCSn+2J9g6sXLxOUkGeOmUkGy3bq2Th5jtmFJwnWYGwk+CRhCHDHiRGIkEUhKJ2o4U1Da9TqOYtKpWwMFdGDWngqMdgiwuxl4BsiIqKU+k+GT0Tk14FfB9BKiVKCMhpjLSbLEK2YVxUS0qi4LnJQgjWWzBoIAa2TLkGSV0hpLEqRO0uUiA8BrzUxJKZjwjfSU1U6bcjluR0VzJuGkS4RtcDZLaIovGqJlcWIotEVva0+QkakxRYZ2/tTBlsW5RSLOrK7v0frPXv7uzibFtBSZ7N73YQYMdZ0+EJYtUcTnT2JzaBIwWP5fDuiEIC1mjtOH+fa9nVEKzLXS6/Ve0QCKgZ0F3BS68+gXYsER6MjEuGVa5ZFpVGbJYOtHot6xnQ+RZRNKup07L+Y7l1d11x96SLGWKqqQhuHb1Oqm9tIVgiNKC4uIq3NKKxirV/gVcOOZIiKRAV1EBZBExqLj57rs5bcCqfuOsk73/UWQmw4oxxffvJFbhxWtBKZHR5Q5muJqdi2XXdCoW1K+21uadpIXdcQI3fdeWdqsy4V2a1GhUCoSb6nStF4Dwq8b5PWBwpnvh7ajOrWd3EFFpN4LaRuXTns41WajG1ioK81PsakvaHSqIDRnrb12KxARGi9p1kG/iDk/ZymaghGUyE4aZGYgUqaIkD3fgrBqcSdiJ7GabR03KTUH0V3rWZlNSoqohKslBj37SOc3yrd+4ZS6iRA9/lm9/gV4MxtP3dH99if/yS0SmYtVqO0ppFAEyOzqsL7QF23LFrPoqppmgQGWmOSqpAySExeDE5rMpuhUPTLgtxYUkdJo7raX3XTo0scIEhETEr/bUdy2lsI1668SBMqRGkkC9jcMF9o/t2Hv4yg0dbx0qVr7B1O8cGnicGyj3KOKCGluZ0M31KYRGAVKHq9fqqhlUabZEaT1mPktjXaZRnpbRLohH4VD73l7sT+jAmA8zGkjocSDGlRW2PIswytoImGJnhCSEI2rz+3QT0Ysb61RR0qxpMpQWmUswnnSU36Lv4qrNIUWc58MSP4lJz/0DsfZFYtGC8iWZZhM0t/2KN2jiorMWt9mqCIHnyuyTcGRBQhy9grHa7n2NYLntpv+f4feAvzdoYWw6/9q4/y6PlDmgjeWzLTR1S9rEJQKqX62hq01RijcM5S9ApOHj9CWebkWUb0MVk4GIuKkaADvUGBFo/JDG1ItH863Ag6GQK5hYhI96G6Mk7bVL6YFGlYK/roCE6BjiHR47XujKhSCzP4mNaDolP5FqaHE9rWI9pQDvppH6DI1o+hNSsHvKA7JEqpVIYFMCKYCEoMUSJxCY4nEYsE+Pp06PggmAzy/P+/1ukHgZ8D/nH3+d/d9vgvKaX+NQnYHH8zeAVdP1iCom1bVJERWsErzbTp7OB2DzFGsTEakNshWgnWaVzmsJmhyB1F5pjPKhYixLql53K0MSwWdfoTyhEkEiQSvU9YhU2LRseuY2FHfOzpK/zIW+/HmgIJEdsK//S3P87dx3Lu2Vzn0sE+BE3wit3xmHIyoK0DJ45ssLs3wTcBgyZ3Gd4vVsEphIBzOUYrqrrqZkqS5mcbu0G02yKFUrIi0yxNjmKMKGup6oo3ve7VfP7hJxjqrDspE6EoBb2vD4rKg2CIJvCe77iT17zhDJunXplala2gshEmdN0lLehOR0J1OIhxhhOnj3NEtvBNIHv4Kvfdd45/9MA9WFqefvoSz1+8wuWb+9zcrmhbT7CWYVBsZp6r2w2jwlHmoIqSUg1463e+hmOn1nGFxYSWWS382u98iPG0hes3cNphjScK5CajjbfmG5TWib3aNiilMdZw6sQx3v/enyTvD2nEE5oW208eHl6EjbUNtvd2yYZrrK9t0tQVdLlbtnQWk5RFaKVT9tLtsTSlrwlty2Q6S8zJTLF2YoPaN0nef9BDkOREJhB9m+6jCM46cpdxZfsGZ86c4ebONv1BD60U9aIm7/UQEY7d90YmL30NIxPqaka2HFFHdYEnsJDELRFfpyHLGJN+rIDvgnsywVKIKPbqgJhvfwzsm2md/isSmHlEKXUZ+BVSkPgdpdQvAC8B7+t+/EOktunzpNbpX/umnoV0PHwlKKMwVuG9J4gwm89pfTqNXVQ0TUAC+Nidoi6dGpNZRds0jAZD5geHBK2YNZ7hWp+N4YjdvX2cy5guqiQUsiTfdH8bY8DkTJvA686dJHfpDRCjuTa3vPUVR8lzw2R6gIhGSG+Y94rJeM68bljr2p1tSCeMhIARkBi7jZuAtVQ+dS9cUkdhmXnIigbUFUjdzIgIq759UCASeOiN9+BrePTJpyidJUjE+7B839DaJFc1IBeDtw01Gd/x4N3kdxylWjRUjUdFT4tGi0JC7KZiuxF9SZmfaJNo+AIai5Y0xiVhgRC5954zvOGNr8KK52B3TuuFKzevk5Uj2lBzbNjHWofNeqwNCzLjuTFfID6iF4Y2U/zG//0hGlOipSGYHt5XWGNTCn57oFCpq6M6oFIbg0jgHW97K6PhEDGGdl5hRMjLkszlVE1F0Iqjx4/SzucoWnzjQQsSIVtyFbpOlNYaL3EVpEOXEYSmoWlbYp5jnKVXlKiqxjiN0yl7czopfrXeE3zS3JjPK6xzTCZTTm1usT4cJYq/sxweHpArl8DXMqPcOsVaPsMQWL7qOx+8PxWWMSBRIzHi8WnQMQZ8VRN8ROpA09SIROqqIgZB+8Ak/n8gqyciP/sf+ad3/Rk/K8Df/VaeiFaWpcHPdO5pM1nxBIwxyRkMy8G8opxOKYqMvAXRLYinyEraoLm5fwA6Se7WOpLXAU3L0WMnKLQwmc+5eGMncQQk0LaRViWgsG7nKNNnDaGtalTW0Lg7+N3f+11+/t1vYefGDXztsNQ0JJxhUddkmePGzQP2bmxDVqJEsGWO18lNC2uTypHTeO9pvenG3jUojRBWegQpMMTVol0Sq5bgXnpME1pDNR/z6leW3H/mXv7kc9tcuH6T4UAzCIHaKmpSCpyZjIm03Hlki/f9+HfSFDnV9SlKp+wnhlRuxI5LoHVgrhUbWY9L29s8/tVLfPSRZxAfQRnKsmRS1/yP/+eHoIlsHhnw137yIQYxbWxtMgaZ4pV3J+xgySBUOmFK86ZmEYVc9yBrsLnjv/9fP8jm1hH2rt7AZSql2tZ16yoSlPq6rMvoNNJtugzgp3/8h3nlK8+S9QqMSsB23iuZz2ZcuP4Ceb8k1xlXrlzldW96HVUbCL5JWJHVWGuT/qeis4CIGFiNVASJ6ZS+uU2DEJoF66MNRtYyjXNUTC3WZjpjsJlT1w0SEz7V+obgoVgbQu159ImnOH3yGEobppMJd91xlhvb20iAogYZ9Ll+c8LRtaS1CRDrBmVtNy+UwBgrCmUdRIv0c+Jt+Ja6bc6oexD+zWPfytZcXS8TBqd0UzsJqKlbTxCThnxcKh2iJKXpVjTzJuksRGex2uCsA0mDM9padEzklEi34cSwubHFeLJPUY4Yjlr2D8YJlPIepzS1zIlas32wYHey4Mgso8gr9mY7vOeNr+TV587yxfmEajZDdb4imnRyF0WB70oMcRYfIov5IrUpTZogBbrZBkEkA1QyYtbmFl8BbmuVqq46S3/LapOyChEkeLyvCbGgUI5KCt77k2/muQs3efrZy1y7sYdrVWL56QA28qNvfyMPPngmyXBKGgEXHxJtWCdFsBBrtIDWPTK14Nd+80+5fPkKUVk2ihyja/q5YUciOnpGoyPk2tPfn/LPfuMP2Ritcecrz/Jd73gNMbQoMThjO37Dss1HmrmQZFIgEQ6nUwZrm9zc3iHLDSqGRFfWXUuTbgPcWi2p46DSTI/CsL4+pFf20iSqaLSxBAUuyzl16jQ7+3ssFvOkMxGS34gKCQQviv4KWzLOdC1rWTEiV1iRCNNJ0towzlKUZQdMp9JFaUVUinlVY43BV3XKUpQBo6jblhgTkC7Azs4Og61NFosFWZYlPE57nMsoeiNEdlegNmqJfa2w8i6jimkORHX6Ht1aI8a0hjreyF/G9TIJFnQTk2mUNoZARGGtSdlFCGkKESFaTbXwKWX2SQRHCZgiAYsSI6XJ6OUZdfRoa1MrUGpQnmo2JzQVi/mMoszIspJ5Hbh8s+bGTst0fpPWK164LrRhmwdOH+Ghh97GvG5ZH60z2dnr1nsCw1ofcNbiRRitrdOotPH6vX5S+VKp5QassqQYY3Inuy3tvXUtswm57TMrn8/084bYeq5d26aa1wwyjb++zX1njnHnyS0uX7lEW3ukFfqjko2tEesba0gdMToSVU5UEec0QSJohWpbpEPWvTR89tPPc2YjZ/+yIi+ERT3n3LnTtNWYy3st1hoyVRKbCU7D/QXoMGXv2Sf54HiX7/3ut9IrwGSmE11ORkpAmoEhokwaGHv4C89TuMRCJfhuHqZTndXpfgi3cJvl/dJaIWiapmI0GuGMIXcZArgiT2Pu2lH0ck5lORfOX2C2mHckvZY2enSWYYxLwssSyVS26rakQJHeI510Ejg8nJLbjKig1+8RYkiSjxLRypDlObPFnNFolNZriEQJ+GjQHX9GolD2CqaTKevHj4MIbdNAdyAoY8l7PXS9t3r/tdbderkVMiXG1C7VqVfyjQdOd/6me/eXEDFeFsEiCrQ+Vexp4i9FawmSHMHotCeVhTbiRgm5zqxlUh9yONGUu4e86tQWxmisieRGkduM/cmMGwdTvvrCFS7tzTgcHyYnbZEkstP9fdVt6rSQIDeKSGDTGHbGE6oA64MB9o4zxPO7aJ3hfcuiSe5Z+wdjqih87fnn8W2bpiTbGk1yOLPWJBwgChhDvz9gUc07p/ZbwGaq5GR1ekjXR/XRp9pdQDT8/ie/SlQarS2KsGqhaSNdlyiN3xujMJqUfelU548GJZbIIM+xzhJD5OiRAXlhMUQ++4Xz7M0bvETWMktmDD/w0F0cOXWC3/mDT3BPadleeGY7l0AJh21k2loGpSOjpdy+zsd/74O888e/n61yg2Ch0AWxbXHaIFqISpNpxePPXOOzT11nvqjIdNcCNBaJMc24SEBjiFqzNNVSgMsyQtuitMJllrXRBhtbRzo1LUUUhYrCZDrh4vUbtG3NydN3MNrYoG0aQvDpNLYGIRLaNvFhdJoaTezfiA4KHQWcJgQhyzQ/8sPvZnf7KlUUprNDNHlSPG8jvSzHVw3T6YwYEgCLUszGY2RtxKKaMxz1mdcL1o8fJVMmGUQN+/jaE8gQ19DmBbOZY9AxOBUk0Widpnzpht5Ul6mlfdJxj7raQ1RiMUuM+L+E7OJlESxSan7LE8JYizMuUaBJMw7OWvIsIyscmVLkOrWrpo3l0SevkEnDXWeO0krL05fGbE9mHM4813fGmBDoD4e0bYvLHW1MrlsJvIvdya9X/AZnHUFFiqi5Utf8849/kVcc3eSeM8cpCk2eO+oZnYoyyXKx6x7MZnN8FKq6WlHNQwQrkaYJDIdrnDh5iuuXLicWp0ovesnrXyLZdODi8t4oVDdqrFLbTqfnH6JP5CmV0HAiVCrNd6Q2se9wg6Y7nYTLO1NUXmLinEVTY5TGNw2i0oj6WllggyeimCJghI8+dp75Z5/g6PoaV8Zj5q1iUKQ2tTaRSrs0+CTJEMjYjN/68Be491UPUIuwfzhhvphRzSaoTofhxOYRzl94kVOnX8XVC08yqSNRLG5RYQuFuDy1jQWsBd8uR9TTe6W1IXSZ2WwxYzGe0RYO1y+IoliMx4QmcOe5s4xnU7TJsCbStslExcCKxyAi3dRvWgQigtKJz5OsKxUSPfe++l6efOpZvuN73s6VS5fJrKOat2TGEpoWVxQ4Y5lUc/K8JEZL0zSEEKibJpU61hLnLaPTA6rZjIrIqBV0nvgWKlpq1dJ6S7gtWECXLayI/aA656WU2dC1frtRdZ30bVVM2dy3e71MgkWXXgMsay6S+It1Gmt04lFYhdOKXmGxJqKNkCkHeHCOjz/8NHUTmbQtISSRE+ccYt0K4Z7NFp1n5hLlTsWx1t0NRmFoqBBmSvjBt72VP/7E53jpxj7XdsYUztH45KIVJaXMO7u7aBT7ewddLW04mM5Te0sUutPGNMbQNBWT8Zhev98tntCll11btPtadWnvqkSRlHIvv00pZ6qTE1D69UeHui0IKQXWCJD4H0YblHhCCBROYbWhNQ4lMHQ5MKMKaf6iVZqDOmJ8IKiCZtpQ5j2UChzEZPYcBXy1SDU0gvJpcw9tyZMXbrC5tcXFl24wmU6oqmqF+byor4IWZrNn+Bs/+2NMJ4dMJjP25p5rV68nILrrEQWfkmmAuq4RhDwvscbQNi3WWBolDIcjMmuYzyaMRgOC9+wd7LJoWtY2SqIosiyJA0vHsQg+ZWFRpfY2HVcidpwc7dJ8h4hw/smvsPOZj/PIM09x/0/8DO2iShO5ZElpXkGeZUwXM0IMnW5m6pK0sxnaGKqqwruMyf4BWVmwsbnBeHsPk2UordBoMms4VBltWHS7gdQZi6xwDCF2pa5K2TisDpZbylk6KcTdNl/0rV4vCw1OIE03WrtqX/kQCFHoZTmZc0SlmCwqbuwd8JmnXuRjX73Inzz6Ep/+6vnEK5DAzemcQ9+QGUu/V1K4jNI6DJp5VaVho457IB1zMnZReMVHUIqgczKxaKX55MNf4ep8hraacjgAp9MJL0nuTFDUiwqlNRcuvJQ2sU5ga6KcyyoASKfupSVy7NjR9Pty681fAmtLLGP5O8tgoLpuRQosHY8idkBcil7pNZBEbo0K5E7TK1KwTOxXCz5QGEO/zNno9ygLl8olhMwEtLd4SapcPqQ0+tyRo9x1+hiVgle84e28+4d/DB/o9EqhN+ilUf2sQKFom4ZzZ4/ys3/1R7nnjq1EyydgM4MxmsIZMBpFxqKt+NLjz3H0yFGOHl1HhQVHNtdRssy8NE1cAsQw7A8QzwqEVNqwP6nRYti9uc3u/g6u38NkfWxvyLETp9jfPkAbQ6/fx7eJu9Eb9AlNKu9EIrFtV5lGCAEdZUV6kpC0MS997k957Xv/Fm95/8/z1L//XYrhKOE8IaX6VdsSNPSKkiAdPyIItfc0dUuhDB/96Me4NjlkMtln72Cf55/5GqO1dYq8oOz1MNZS5DluuM5hnSjnbQeOew0eWXU+osgKOIeE34ladm+6ta74zytYJNAvrBZEFEGUZny44OBwxt7hjP1ZzWEVEAwqWqwk2z2lITOpdDGiOs+IitC2OGNYNDXzNuKDIvoObpTbSVBqdXIIYCSpMMUoXNnbS3qYWjGfTJnPFmmIpxsZFxSnT5xIL6KL8MTAdHKYipsuACxfF2gODg4oyvzrALvbwc7bAc9bQQxuYRlqxTWQGL8u2C0xDwBrUgiwqrMd0OnksdaATuBm27aEtgYSDRySB6lRSXhWGUcM8OzuLk9d3qGNlkcfe5yr2zepmjYF9N6A6aIFmyW+iooYK3zt2ed47NHn+L4ffB3WlcSoaOtAU3saD+IVRafZ8fTFS3zxay/ysS8+y6e//Dyf/NKTKJfo0b08S6XXMquSJP+fddmQyTI+8vFPU2vhyKkTDPsDTFBY7RBgb28PkzuKIudwvM9iUeGcW204pFOUkhQklu5fTfAp8EskalhMD+mdvpditIExmvFLLzCZTnAmJzQNKkDrI6JV0r4IAaUNvk0TrdF78rUBey9c4Ytf/BJzn7omZ8+dTWM4nVeKqMQQts4hnU8JHd3fxm6gmpRRaJU4vkpYHRbLDDW9tiQkfftA4rd6vUzKkO6Fd+Kry43QtqGjRN/iG4gEEAMdeg2JSNSqZPobY8Rah0LhUexMD9FKMShyJAYGvZLjWwNGwwFlWTAariVH8dDi25a2bahD5MJLl9jb2yMTMEYxHk8ojUURGSjNnICxGh01F65cReluNFmShcAjjz9PURQdwJmqq5QZCE0bePyxJ9LppTW+8V25oFbUcNXB2LdjGNCdruq2EmS5SJaBp6uwrNY0bZvk9qoarS0+Jsk2qw2TatEpQ6WNMhrk5GWPftPyPW+6lz/47JeZtU2aR5CkFt2KJzYN3td8/uEvcvzYEf7Wz70PiR5VWD704U+yszdnf+8A5yzWZrz2tffy6OOX+Qd/569z9PQxfLWgXRzyiU9/gZPHj/OhD/0JT164xv7ulI994mGUMmRZxnBUMJnMaNuWia4YDPqJswJUdQ1a0QZPorEpnn36Kf7B3/9l3vV97+Ad7/gurDUsZnP6wyGhbTl56g6kTYeRMxqjNb2swImirhf0R1sUec58saBtGoy1tEozcAatDNtXX+Tw0c/zHX/1F2n2brK9PcUUjqd//3d4/c98AEPGdHoINiOS4XLHYntGkeeIeBbzOaH1nDl5hPf+1PdyeVxTtQ6mM9ognLnjDM45mlmD1YbGh2QcXZRAOsAEwat0QN0C5OOqZ7YUGU6g/fLgIXFcvqFM/Vaul0ewkKQ3oVSn1dBRo7XSy2DZhYq4+urWr6bHtL51SocQ8b5d9aSd1qz3S4rCcHR9jROnTlD0eiijWRuuMxgM2D/YTlTzRcNjn/8iWMNwfYPx3gEbGmat4GOD0oEgGcokUVTvOyQdSRqY3bXMFFKUX7Zal6PnyzmUgPdJQi/cptS+/F0kbYSwbIXdFhCkCyR/VkdMSApTeeaoFw15ZimKIr0+Tecba7CiOwf7wHxRU+QFxdlzvHD+eR64+yyPnr+GEUNQMWVN3Tshoog+MJnOePaF83znG17DhWs3eOzRrxHEUPYV0lj2pzMeeewrfOoTn+Yt997HT7/vPZR5zu7VG3zqkw9z+txZ9qcLrDV478kyS7/fZ3d3F601/X6vY7zqFfgLUBQFdT1Z6WNCup+jvuVLX/oKx46eoF8WbG0dSQHfGE6fPUM1X1DXNbqwCU9QkOU580mdCGp5gTGOxWxK07agc4IS2szjX7yIdSWzyR6DrKCOgXy4Sbt9lb2b1zl+8g6KkFP5SN3UmKxAicaHJIkY2oYoKQtwa8c4s6GYT/eZRc3mvccw2tC2bdLWEEHrZEdgOq+USDoktLK3Sool21SpLhO/9Vjs2KfLhHY5QPntXC+PYEGaLEW6N1+SQE3scIXl9efVXTHeIjYtOQrptJZOoTmgtWVRzxnv3KQqc5TWVOMx285SN3MA2sZz9q5zzOua+aLl8rUxAwRbWtq2oegqN9PJlgmR6WwGolAdzTfGTvr+tnbo7R9KqbRo9W0B4D/yOuNtb/KKei3S0TFuJyrdwlxUl6nFzllNlKL2LcuCNnMG3bWmE9gZKFRBPWt45okneNORkmNliSMkNqNVjKsFqX+QshmtND5Enn/pCt//vd/F1S8/h6AoezlaRcDhlDBwPfplj0UzYzze4/zOLvO65mARuWe0we74MayxBDRaG8bjcQIgQ0jWAopVeao7bYem8Svq+9edmFqo65b7770HaT2LpqFXFEgULr30Em3j6ffL5YLBZTnGKPpKODw8ZKqmDAcDyn4P27TU1ZxFsPRMn9l0mwrDHdETlKPX67F+6hyXL7/Ela8+yvHjp8jygtliHy0ZwaTnX9UNi/mMtvacOXeOrLQcP3ma/YM9BsMBxuY88/jj5N/xRpxOHb+lPUSMEdN1O+iCge6ywbTE0xChdOtfloEjLstVuY2q8+1nFi8PzEKldlAirKQXHUJipokEWGHiGumAuCQ6deu00dqu6s7b/tsOWXZMZxVBDC7rYcoeRTlkNNqg6OdkmWV9tMFgsE6v30dbB8qwaBpmjeeF8YJSK9ogzJqAJwFeVieW6e54H2VTcHLOrmY9UqAPq2dze7YBrEyRlliEXhEJlq2vLuCo2wNP6pQsT48EpH5DPSqk00yEstdPAioBnDYULscqTaaTaMyirjBGM8Mzns+R4Jgs4NmvvYizSQQoTWHqzqKxYzMSkah48qnn2dne5WOf+izKCsYl305jW975ju/kM194mF6RsQiBR56+iI/CYRNp25rPffZzGJ2jReOsQ3djpctguVjU1HXbgbxmdQ+m0+lqxiZlossdobn/3vvY2CjJcs2xrRF5ZukPS3SIHO4f0tYNftEw3R9z4/IVbl67znwyQeo2Ucwzx2E1Z+FrpBzQjA/4g1/9J1y5cpOtN7yDVhzz2QFNDWff9Ha0zjn82leo6kDbGvpFn3o6ZzKeUfYyJC6om5p77n0VRc/Sz1ipawAAIABJREFURsWg1+fE1kmGm0cZDnq84swp9scH7B7s0fiQnM+1xkRWmhpGDNIk7kkUISpZqXFFurXCbeUHCi1qlYX+ZVwvk8wiQfy6q80VCrSsgBq1ipbLVD4mBLvLIJaPwTec0N2NrVtPqxOAGnwykg3iCdGiRXdZScpMoiKx7nxEokYREGfZnrWUWYYPPlVDEhCVAUtXsNQ9WepmSkf4Ukp3m2DJvruVbaTglp57jOHWm3obbnMr6NwOYN7CMhLeubRt635fd4skClW9YNTrJ4p4GzocKOCso8wyVGmIAuPZPClFC7w4rTnV75HFmmlTI8qinUFCCxGcy5L6GAGtCy6+dGnlp5LGPzQazfrWFkVZ4H1DL8/Z3d/j3PE+Nu+jTJciqwQIQpqWXZVgy5eynHo1t6+XBMzmuUXklmUCwPMXXmRja5O1QZ/pdI7JHG3r6W0OGG/fpJGGs0fvIErD5tETXN/eBmV54aUr7O2POX/hEvv7+ynTqBbMx1PG430eevPrub8/ZDqfU+Y9+v0ClxWs33U3+9cu8eTTT/DgGx6kZ0YpIE4OMdaSuZLCBaI2lHlBVVU0KpKXBTvbOyir2VgbcTA+SENj3lMOhlirmS7m+M4MGt2J8cRbpfgqK+3Ym0tCgOoeSxouodO4+M+lDOlo0Kob074d1PzGND3hGLHbeLd3AeLXLbKlHo/WGh/TBp/MFowGJZE0ymuVoDtn9rbxqV0bArVvWbQ1tW+6EzyQzLCk41lUnbhumg8Z9HJ2JxV5licGYNdVSZt42daKq577stZeZhi3d0H+TCDqFr552y27fUqSFcApkox3ApHMaI4eO8LaaMTrXnM/F85f4NLlSyyaQIyBEIR6XhMCOJWCb7CKmRfOTyseXCsYaM3OoqIRWNsYMqsDsapSoCPlfC7PyfIcJpMkONx1iq5evcobX/c6Hn74YbKyYHtnG5fdDYum6xcvy0VZlW3L+yIiqWPR3asQZBUwNja2aJqGJfVZlgcMSRfkk599hDe/6bUM1zYSJtNUKAUmc3z4gx/lT8uCja0Rjz/6VcaHY6qqYjbrfsaY1YfWMTFPY+Tff/qz/MmnHqbslxw7eoxXv/p+tm9c5+qFS2zvH9D84SMcO3qUh777rdx11130ej1e8Yo7yXqanrTk1uFMgNxhXMlkNuXc6TO8dPUyl69cY3NrnbxMbmm+mvPSi9eQtRHbF57r1kDXJpdb5UCQ1C7/f7l782Dbsvuu77OGPZzxDu+++fUoqbs12ZKFBsuWcRRsBwkjGzAECKRsCkICRQEhIVBFAUVBKIakkkolKaegCKECoSplY2zHSLIteVJL1tyzuvu9fq/f/O58pj2sIX/81j7n3NeyLNQuqku76ta994x7r73Wb/2G7+/7lTyHwxgp6y/1QzowHyuSp9dzvDGMhZKEWVlkKGWZ1ZLlBlhh4dcqA77L+aaQRK2e60hw11eYJBg1t/eOWLQNT2SXWFStJLQUBCUkwDEqFlXNvf0Djg6nTKtGuEB9i9eGYxc4aheoqMmyTEqxKjCfL9DYpfsXOwOhBFVnjF7SowEoRE2sbta7S096Dff/vf7Y+nvuNy5d5SRTive++92cPXuW2WzG3uGE/mjMh77ng/zUz32CqmqWSVYBa2VYZaTcFy3BwdNHNQ2S6zilMuazGu9FT9UFl65VMVvUFEUBsKSUy/Ocra0tDo8PefytT/DcM0/TG4/Q2mLUgiIvaF0l3lyQhPZ0Ol3zHiMbGyPqWqDTZVkur985h7X2RMlYKyNCOxb+z3/2L/jEJ87yj//7v821V2+Q5wX9csjtqzf52B/4CH/9b/x9bKZRyi8/oyisaNCSWg2iJ3jDQjloW2yuyZTCN4E7t+9y6+YdFAFUC5knVxnHRwf83M/+AiA5BJtZ2lYW7O/+3b+LYT7gj//JP0oWPFeee4Xew49w/vRpnnr2ea5dv830+Bg/D+itjAtnHuTf/u//M3/px39MPi+hdvNoEqhQkt8YIVSyVkJwpVMooqWfKEH58L8DocgbwlgowEePE+YOOpd9be8R9aW1hQPricDuPbAyEInPwXcISdmhJtOK4+MZw16Bbxz9YV88FeXTTZCB7xc5W5vb+AS3bhcLopewZncySZICMZUfzTJsELd55e1I09RJ0BckpOAJzyiemPzr13f/79XnrF1+PGlYfAiiD+qFhPfUzg7Dfp/5wS5vfetjfP7zXxaSG22IURZeo1LpVUsrug+eTEvb+SIzuOSRxIRDEAi0eEu5sSsKOCVh0GKxwMfA5OgIm/epaodPVY+O4+PrG7vuWqBtXfIwRA28Gwfn3LKbVyeKRDTEoBiUPa69fI2/+Ff+BkYbxhsbXH/1Gj/w4Q+xmE75we97H7/2uc/Thu67pLwd/Dr5kAyqa1u0MeTaCsGMjYTYggKvQJOhomBFvFZE78RLVsLrqbVCKcOv/drn+eGP/iCv3rrF5kaPhx95kJu37tAsFqjgGZQlo8GA3qCPDnD9lVf4U//ZD1PY9Tm+KpGC9L50ymMhBAIKQ+q9i8j5plBV3zfO38rxhjAW4nLmRKVonUOplKhUHfApJNafkNywVFJVBhO9JHtSnsAqQxOFpzF6T68sKXs5G4M+pc2IuUXjsEXGeNin35PseNU66raFYLBYRhubYAxHsxmFtfTyHm3bijTgdEEbGvCB0lqqtsVpMDEjEoUi0HusMrTOo21EB4NR0rREctVDK81MPkG+76+edO55dyxJXxTLRPBJI5TGM2EwtkZDrl27wbDf44OPvY0rLz3LpUvnmVcVty9d5M6dezjXjW1iiYpJhUsFoRSM4u76uk3NVz5VJYQI2HkPIXDm7JCXLndlPzE0R8fHZFZz5849tDLE4Fk0NZnJl1FVSERB3QNdCAKSAO7AcsYYyRexBotP3NshBNFaiRKnO+/JeiXzqubcuXO8cvUqVTUjUzmzWcUPfOQ/4Ud/7A/ypd/8TX7uF36J/f0JrWmlwtNJLaTEsg5JYChVHWJYOfTBeVQqdcawMujdOWsFbYz0yoy/9Bf+K+7cuM7f+ht/hw9/9GP86Ec+xKUHNqjcHJtl3HnpFWa+5Qu//utkeeD3/9D3sDieplZ+UpCl0UakFGMQTtOQqlPJfcYpCTy60ExHMWrfNvKFXfa/Yz9aoRBTLLosQ8qu7YMnahm8QX9IjFC5WnY9A6qVHacsci6cPyOw27YW7EaroFcwaQKLwxnDyq12MR9wzjHc3GIxX9C0LdZHTGnRHoiRYBRlafCVwcVUofGCeDSqgZBRFAMW8xlFVuDnMyHMLTLh31SG4CFq1q5zPWRa3wFOJvtOtLOrVYwv8f7JsCX4wK2btwUarTS/9EufYnK8y965U7zwtZdp2zYtbJ1Ci7hMJgIrGDmrXV6OkwW04B3GKPr9viAFSd2PCo6Pjjh9OsHaiTjvCCHpWRBW1wAEHbst80Qosn7tS8Dl8vGuQiIeoUJY3tPUIS9LDg4P5TwDVG29ZPJuCseH/qP/mPd/3/fy6U99in/+L3+aPMuIiX3KRJZJwQ770IHglqFPQud2x4p+QKQo27bloUcf5SMf+Sh3bt+mqirObfT4xZ//WUZnNvmhdz1OW02Z7C4oxj0yXfLQg6d45xMXqWaHq2rY2pHlJU3biLcQo1TUurmRupojccVjESWH8e2Ts2At+7+GHOhQjEILoZbJGpsbtFKMsGycKlCzBYdOkeUbHE9nTL281xjNYjpB5TnRRSF30Q294BiORzjnqBcNddvStl52lRBp58LIrXykX5RkRSGkJyHgmoCxJdqDsdLx2WYWkxmmbUuv7ENboVUg+oaNXs673/UuPvvFL1AUBVZFXMzwzovhkNn3mknR9Yas/w8nF1KHAF1PBq9ieM0zL77Ae77z3WRRc/3GFW7f2uVLX3xGCIwtWC2LrSh6tO2CENwS5MSJhXo/DkR+68RTMZvPGW2Ok7ubyXlZzZ07dzg+Pk7vXYHTTCp5+vWwag0bsio3n7z+9RDl5HjFlYeWyq/LVvMUjlpjyQd96QrVhrqq6fUK4izwh//gH+Hq167y5Je+IiLJMclhdjgfdfK6l+ecxlsMrl+WzAU0VvPDH/sRfs+Hv587169zbQbz4yOOdeRj738Hn/in/xfv+Z/+FqfP7DDJD9EhYpWBtz6AryowOVa3LCsfCVeC0ahgUNZQzedC4tPNj9hRO6eVsh6mf/tUQxStA6UsMXq0TrvIkmhCCEaIQvz0wHgACh5TJe8sSwbFmC9aze6i4ag35NrBPZraM7SWkQ48eG7E7t4xbe25eOY0Fy9uUc3n2GLE7YMZL9w8xmghlAmdS2cNTfAcTI4whzLY8pRibDV//I99kLo6oj/alPOKcHOe8fgDD3H1lVcphgNCOaSaTimM5+K5309TBTw13/d7f4B/829+ht/4jc/iY8eEpWmaZrm7nywhrhCq67mN8+dOE6O0PINZAra8lxb8UW558PQmL1y5wpt3+rzrwceIUfHsK3vcPjhiNMgZ9vs8cPECv/hrX0jkt1DkPYhCAwiyK4fUOCeehcDtJTaXrtqdU6dQSrgkjLUYoyiSuFKWiQER5XNPUF1LvYXYJbNP9riolPdYD0uWxsLIji4Eu7KFxi40UYHWNzStE46JALnNKDZHDMseVimyPKd2La+8fIW83yfvlfzF/+Yv07qKohzw5K8+ycc//nGe/PKX6PV6S9Z3Kd+n1v81bIPWmqYVPNDf+7t/mycef5xr115B1TW3X3iRI9fSV55aKX7ix36Q7aLhez/4GJ/7qf+HJ7/wDK/emtE/3ecP/94P8+gDGxg0RI+L4rHKfQ8YZTEKbN7He/Cmxivp/CXqxCfrU0WJJDNBCuW/TXIWYvgcMSUpdbeTqVVzjfWa2jjecWrMIAI5PHRccTU6mgZm0XHqkR3OD3u8+bEz7B0tmE8WjMuCssh485s3l0Qwkyawff5hTKbYyY+5fOeYum3RRrOYzcm1Ynp4RNM2ZFYGPgQvRkQr5q3ncHdCzAKnTkn3pPeGM+UmN+4dsLkxpt8bi3SfDih63DuaUvY0sW3IleZUz/HeJx6gdl4y1U1A5YZX7+xz794+PnFWquQOhzXDYRIxS922BA9hXksDU3JFCYL2+wMf+zDzpmVv/4Be/xwu5lTHU6ZtxXDU58zpU+zeu821W9cY9TQPPv4Ee/sHVHXLIw8/xNPPP0vrhBtDqyzlUNKOS8Q5WeSLxjP0FqVaQhQtVqUzuvqPc46AB6+JyoOOQtZjGnHtk6yfGIbVbq3MyYR2RxmnIkLXt4Qyp8e16IC4piX6QNN6tIq0bcPZU2eXyfO2TdweVjOvF9y5e5etjU2yLGMyOebd73sXH/zQB/h3H/8EzzzzPNeuXufarZvJw2oRx15ayYnQy/t85Pd8mO97//upVcNTX/w880XFfLHg3t278pphn0WzYCPLsFFRVQ2/671v5z3f9XbaRcOVZ6/w+Fsv0S7m4KWTl7hSpItK4bUi04YQFFEHlC4QnsQWaAWWprqmyFRCpdMO/jbhs4gxYhKZC5rljqWUQqWMtUscEgeLmjPvfDOg+dydPW7d28XjubC1w4gcW3ni4QH9keHMxVP0Bzllb0jdNIxGG2hlePKZ5/iVr/yquKpOM5kep6Sq6KqeznOih8xkeNfSeIdC+BwjUEXH0y/d5m2Pn8O5wPx4hjV9nG3IDbSxIRQNs8MZNRlGD9nZdoxHA/rjB3n5ua/h5zUPnRlRDgoGgzEvX36V3nibr714gywzdCLYKoVgzjtiF5LFiIqa46MDjBGR3GG/z9bWJgrh9nQx8MtffIq2DkzmnivX7yQqecdsXmON4vh4itGGydRhbM6r12+itaGqK15+6SW2xyNRf7MZN27dpXW1yAAGhY5Sno1RUddztrZ2CEGkIn0AS4emVal7XvodMpNjlF2C0DIrIRmsKkXClNYxi+tVzmAtAexSCAYScgQfaOpGFovzkigngboU9PslmRZeFHFaOylDWVT7+/uAoj/oU9cNbdPwxGOP8/Z3fAdFr8fl55/n2pVXOJrPQSkG4xFnd05x8dwFds6cYWujTzudcHVvj+LMGDud008l3vlkyuHkkI3tU+RxThO0KNHNFqAtcZBz9u0P44+ORWLAGqwPOKuX5DYqRhEXihKqi92Ly5YIRYfq9ZKfSI2VKgpZUteE93qON4SxyIymyDKi0oJ1T4hKEKVsFwLKaHSEvdoz3d+jPywZnRqwcBVN7Tg6rqkX9zhzYcz5R86i0TSLKT/z8aeom0iwMsHQmkJZijJnvpgvSU6tBW1y+sbQekn++dZTlEXqUzBinbVKBexINas5Pj4mH5zlcJExPZgwne3yyKU3cePFVzgIG/SairMXWpTtUWpLIPKZX/kkvcwThwN2zl9kc+ssl/IzPP/C8+S9guMjwR/41i1d8zyzS6Kc0XCEaxtCa/CuxVrLZDpjMp0BYmC80hRRaPVC8Mzr5C4TuHDqNEfHRygtIV8MXvIXWgEixGPSLh1DYD5dsFFaBrlhtqjpMo0+5Zgm0xlFqYiIDKOJBu+iTC4FMXh89AQXaWvHpYtniDpgoqIoLHWdrGL3K3a6FyaBryJar6DPTdMAXZm6A3F1TFESlvgQJKHqI03T8NbH3kx/NKCNntwHemWPctAnyzIgkOcl2mbUTUNRFLi6Ei3RKLmWS488wpkLD2ByjWsdVVWx0R9wOD1m7/iQw6MDnHNcfeUaRb9PmeVMZ1OCj8TMcPb0WV595WWM3mZ6dIiyPfJhj6Ai7WxCvYgc3dnlobe9hcY1tAoRt+4MIuDqBmOlPcH5Fq0CVkEbRYYzeBGaEjatrgKiQAeadk0K81s83hDGIoTIvKrRaZdkmX2PglyLEeFiVFTe8f53vZ+2X7HVK2mVYe/eAZevXufsqS2K0YC+0ZgYCD3F1vktbty4RxY1KhpASqvNogEUveGY0DbUrsE1DQq1RA4SIoPxmMPDY8ajET56rMrQ2jIoS3rDPmU5AG2IBpxb0M8tbXvI1tYOfefI+hs0Tctssst4+80sQmBzZwOrPGfPnsEUGcfTKU89f4Vf/tSvU2R9mlpYofM8F/HcLKNta+q6ZnNzU563FovGWE0H+/YdPFwrchXBiXcSUjZcR0UIirsHE+GGTDny4D3W6GWCTvh2LLnVWC3t9b2sR2ksg8yQqZosy6i9oW4brr3wDJ+2GaNBH2MzVHBk1uCDZO2DF+xKg2c4HvHkr39GDIjXBKcITq/u9xJkpzFKs7W5SetaqmrBsmKU7lHr3BJ/YYzkSbTS1FVqrfeBpq1pm5ZRv49bNMy9Y9AfCr+Hkm5XCNhSiQ5qZhmNRqh+j8FgQFXVHB0dM6tmDAZDRv0e49EQ17bkNmM465EXGfVizuFkike8lrZtGPV6TOoZh3tHbPeG5HnOrRs32dja4vLLL/HEO97J5HiPwflzjFXg7NtGfObTv8YHvvf9RC1lV78sFyeUb4gsJlNsrmkWFcGnHI4RQ6lTtSYsS++yyW5vn3nd6/QNYSyWNfcQMNqc6BFwLilZ+0RMozU/+VP/Fo+g9azNaKLFLBY0yuBx5D6geiWxaog2o6kD0UasyTBWk+dDILn4SmGLkl5/ILt1WnAhKlzw7B3so62hWiwkW595sswyWSw4f/FRxjtnqeaeYw744pc+zXe/4zGOjiKnHxpSH++i2wzdLmh8w2e//FkMkAWHz2DY71P0N7h395AnP/ObjIcDotIYM8R7SSi2bYtzLk1qxb17u8tkZ1n2U8VolXwVuHfAe9lZvBOvKM9yiIHMGja3Njjed0moSUFSMMtsYnf0gmCoa8eklSSZzcQItXVNZo0sUi3aFYMLO7zvuz/Al59+lqpqyPMcEy0qhZMoj9E5Si24dv0Gd+7ewiBsTvPFDJMrRiYTNncCvaJHYXP+xJ/4MU6fPoXXUt0x3sJf+Cv8zf/2z3L73hGb2xtcv3KbO3szTp/t89zTT/HsC9cx1qBbLUY1RkajISYrwBhGgwEmK4hGkund/Z4fz4BIOSj5x//wH3H73l2uvHI14SrEjc8yuwTdSb+PXiJWjbV47/kH/+jvk7eeyjd4Iv1qg9Fok9vXrjKfz/nC1Wtk+T3yAHd+44toC/3Lr1JmfUK9YKgNt165xtmHL9EcHjIoNwBwR/ewtmD/aMqnPvsiNyeKEI8oegVbG0Oqwz1ypXjwwiZFMtinNkZkBqyBZrL3utfpG8ZY9Moy6YPKxA9JgSrLSnqFpjBC/R+8xMQER+UiQS+wqmRmI9Y4ejGjtYGsaij6Gae2zqHHI25eu0LmodXxRNWho8dr1FrrOXFFSxZER1JZm/Y9CU9euXUbpTKaoIhW4Xzk3Jkt+hs93vT272DuK9rpPXKjMJkQv57b2UEbWBzviWZmO8fXBaNejvcOa6X816FNZTKzRIZGH8htnlTGAvP5dIm1WIeTBzrNkS7/YzAmw7sGrQ0qBlwEZbIV0xaaxomnIepbntFowHZZkGcF+/tHONdijLj9Rhl0FIr8ql5QzReYKEzYXUXGKkuWF5SFEW6GueXc6XP4quWlazeIweOCAK+qeZW4SwJECafOXngIV89p5jXVZEoM0lT19Bef4uyb3sRnPvNFbDFkUS1466nT/JHf9z7+VdvyzNUbhCjhl/PwlrNnGQ9GDMZDirwQHdF0fzu+jKIoiCHw/Fe/wpOf/TJRe/K8tzQm2gpnafSpMpGU8yThGwmt1Bt+7uMf5z//Qz+GO9jDuIjtW1rnsGVOfzjg0fF5URJrPK4VPIyLgbpqaJ1AqQ6u3OTlVyVHFNvAnwW+9MJ1gY7rjKN6wYJIbC1zFzmezVjUmoDixYMp1gp/a57NcK5BKxiXK0X4b/V4QxiLDmfQJoVsbcS70FqTJcy7ayU+NrYg8w25zSlUpD8Ys33+AfZ277G/f5cm1pgWts6c5T3v+wC7zlPdvUeMikqvOjs7yLDuyFVSvBu8Exr/mIRbtEWn5rbWOVTw5FlJ2wZM1iNqi8ktAccTT3wnNYpoNC8/8xLD4Bg/uM3eUeDUqXyZdxj3z3H58jXijkNFjzWKqqpRRGon+YMOwUlKXG1uDDk+nhJCoChElV3EifzyWuAkBqFDWnaP2Swns4Y89VWEjjfB+5QoBRSUpYgpbw5HeO8ITU2/X7JYRLxrBX3qxStRyV1uG8mdxBCxak2lQimpauDJiwznPEYpVAyoKMjIDpWqDeioMUqxsbXFoCiYtzXBKmoNTS3G4ubBlJc/85sEl9EfGZSF+viAL79agc4ZFj0mfoHJLG1wPPjQA2ilRT3dt0ndLWKthCJd17HWmp//2Z8HEzHBUDdVyqPo1VwM8URn8SrxKn9/+pO/zEd+zw9QZhmVb6WaoYTrpCx7fOJTL7K5OeTMdp8zWzn9/gDlvXC1ZgNc22LjkOgV1XzB7uU7ADTzhukicjg7ZLKIxDrQZgFDRu09Ns9ShsKgo4R1KhgK2xOW9vbbpHSqFOBFrMdYK4skihgtCa+vrLThNl6YnfO8lFyBNuwd3OXOvSPeb2Dz9MNsvOedbOwvuHt4wJUvfoneqS1c22K0aJPaTC97GrqEUFTClmGUAqXRUZCiTeukZKcEcKuCYjGb8YF3fAc7DzzA/sEBzilcpdm7U/HeD7yVX/nEx8mJZKc3uX57F60UW5tDvBI4+mw2YVE5XIhEVWAKA0oMokxevyqZpd937u4uvaGmbiXz3Y2dvHL1d3IrlFrt8lUlsb33lmoxW5Kol3mZBGo8Wguxr/ctZZEzPT5a8gBLHkSR9ft4pSAEfNWCtvjomdRzyl5JNV2QK0NelBS5xShFrhX9UqQChkWP601NjDmGWRpWnbg7Baw1Gg35a//dX6V2jnI8ZHZ7wtGsISbym+2heAk37x1w584ueW/AEz/yEV54+ss8/wu/irawfWqEAU7vjLh08Twmt+TaSEibScmzbR1ZYQjJO9ssDE9duUlmIq0CFRJtnY6pYmMkN6ItMgQCxxdcg/T6zI6nfPnpr/I9730PsXZSkfABX9fyuo0d7tSeK1enLJ6f4poA2vOdOwNGeclsuiBqhc0LlG+IqYoxX9QYFPuLBmszBsrTqIzWN/TKjCy3aC1ldR+CaJYsDqljpPVeqimv8/hmhJH/KfD7gLsxxnekx/4W8KeBe+llfz3G+PPpub8G/CnAA38hxvjvftuzUEoo6SK4pqHs9+lgJNEI3Y1NuINopNQWXIMxhnnlcVVEjVpmDLh3dIvH2rfz2ZuXuXbtKv0843D3LkqDjwqlxOXrWuK1FTUpk4hs0IqqblaAKKWF2zPtRtoYdFS87S1vFj7J1rGYTHD1nAsX+8TWMzmY490RmYpsbRsqpYk24qYLMh2ZN4rNzRKvIqGt8LpM3yXxpXMC/ukeQ8mOu8xJ2FRuXkMxdt6EMFHLuTvX7doKl9rt29YL12PTEKOnKFaq675dLI3LtKqwXd9DIvPVqeyodBQMgJEwbj6L/H8/9wnquqYOLdWsxS7mkBkJRbKMtm3I84wvPfc8zz33PFU9I+/JdduOeBhFNJYP/9APcO70DhHPYv+IxcJx9WuXqVOu5tFz59l80znufuYZisGcP/KHfoR8kHP35vUkdakwES5ulvSGQ/J8QGYsVd1Q9krm8xmbG1uQQF8GSVDfOzwgsxaCR8UV21lMNf1ISLmkKA0XyzFflX4t8MqNm3z3B76H1h1hvcFHLSS+xjDeOIV2nuN6QZHnNIs59cGMicoJVYO2Goshi5Hj2pMZuZfBtuRhQC8r6RU5eTmkNxzz7Ms3UW1k0VYoYzh99hSPXXyEnTNnqNoK51s2tra4efUGL1z9f3/bpfiNjm/Gs/hnwP8C/PP7Hv8fY4z/aP0BpdTbgP8UeDtwAfikUuqx+PXwuyffJ1JwLrC5MWb/6JimbYRWLUp2uSxKydInxFqWSeXEEglZLvnZAAAgAElEQVTKs9VoLtsFRmvu/sanmc6mFHlBkPBN4s01t1Eji8RrBSF1MRojiyaVbbVSy8VGytArpSgzw4WHHqD2gbIsUM6jwwGXLp5ncnCHST3jgQcf5uWr1+gfzmmp2LBvYTqZEW2k2DiFKwrKvEwJtBWGwLn1zkdWycu1PpH4dXYJYSrXa7mYVf/CasLL764cCZJAbVJ3ZFz2PUhjlEseh1IK07FzhUBwUeorKXRrXMu9e/eW4Y5JzVy+WYVRSgGLyG987nOSWNaKuq5YwpmNER40DT/6gz/E8e4e5bjP4eERo40NKhrqINPVFAYTNOP+gDNvO82immBuHvPVr3wNrSBXlo1xZFgqbAbDfoHJc1xVyb1PoYfJxHXXmUVHuHL5FRmr1cxcjuWqP6bbRFL/xYnXCTHQC889T9PUIug9XZDlCVhock6fPoNvG45v3aTIS4gOc0ozC5roYUtrjIEyN7QtLNp0H0PG3ckxmc1QyhN8JMtKprOKwbDkzJkdbF6QqchXnn2a9unI5OCAMs8pej3UfwiRoRjjryilHv4mP+9jwL+KMdbAFaXUS8D7gM98ozfleU7VtBgUe/v7eNUxfUsW3EeY1zL4g36fpp7hXA0ktGdmaaLDtZKl1q4GH2mqZtmQt04uI7tnQAVwKgnfxg74tAYQUorMWrSW3UrGI3Bua5udnR3uHR4A0NYNWRaZVDUbG6cYbZ/hhWde4NE3X+DUICPLznFz7y4maKrJPsPas3H+LMcHx+ycHS1JWVnmG7oS4f2wb1bn1j0nZ9VNV3mXIrF3dSxSgEr8maz3nax0SO7ny+gOY7Jl+7PQ6iW5gzQWJECQx6emJSRJHdM5KXGJuzZyd4IEqMuzCO+qMpqHTu1w+9pV8qJgMp0RrWZjc4OPfPSj3H75Cvzsz3HkIRxOePtbz7F374jmeJd/8Yuf4vp0go+KP/bhR7h7Y59bh3PK3gYuaqKGza0tvBNSXMFXSBNeBDI0H//kp5NwlLB3qTVDJ20I64LJKtHaney7UFaxd/MmV165wkPnzzOZ3aE37EuDYn/E7u5zLBZzcmM4ahbkecG5S+ep79yln+WU1nA0nRB1xAfNqbN9uHaPg4lj4jUXTo1RRJTRfOmpZ8gHG2SFpRgM2NraFib7zVNMjqec2jmDc7IZnGQa+9aO15Oz+PNKqT8JfB74r2OMB8BF4Mm111xPj73mUEr9GeDPpL/JM4kdRdFLp91fEZVPRDOejfGYre0dDl98Ydk8kwXwrac2gSLdQK+ECl9i7USQs/re5DkkVfaOVh+VjJOCRKQi67Zj5Vp1GfYHA6rFgti2jLZPMZ1PycsBp7e3WBwtsNpw4fQmvnJM3IJeHhj2C4qsJA5ypk6Ra8tsUQuMN3EmdItdrYGLunP+eq3oa6O5fC3pUwxdR2pIT50kt5U/O7TkamxeyxUihw8B0y2WpVFheb7idcmXa5NEkeLa+Xbv6zYCkiGKHbZCERvHhYceQBclxeYY5g0661FN5mS5XW4Q1fEUnSke/86389BDgWYyw9U1mbYYG3lgZ8iZfs7DBzWvzgyKVnIHadMgCk+FzaWiY5UA/46nc4KXPENEQfRp3O4fa0E9da31wt8h1+QJaOe5c/cub3rwAUFwziuhEzCa/cN9DMJxobOchx++xNWXr3Ap92jXUtUO5wLgyHv5knLwsG04c/YcOjhQ0Ov1qBzYUox2XTd455nO5rTeU9c1yiiGwwHz2YJTp3eAL3ydufPNH9+qsfjfgL8jo8bfAf4x8BP/Ph8QY/xJ4CcBjNFxPBguJ1brpWTogsgQCvgG9g+O2N07WOKglVJ4K+/JEeEcoiLLUoNRkJZzcZ85seC6BKFRBkhVEiWTxCy9Dy/CwWsLRCnFaHOD2WxC8EJft7mxw7XrX+PFr13nwrlNvuN9v4tPffKXefN4zIVz2xADg15BzAym6NHevIuyBSYfc+3mXc6cPyMl2sRV0FUw7u+0PNGizm9lOFbHSqlK8CmdgRWkVKdzsnKz17/j/jZxbUQ2oPN2lt+f1o5Ras2xUXRGZO1kl3925UqtVt3GSmumfsZ73/NduEyqYXFo2Di1SV1XZJnh1vXrAEzv3uPRtz3Gf/mn/2oqaUcybRP3Q+Tv/esv8+d+33ehrcINhhjbo+z1WMwrWic4kYgk1fpFjo6BfDziYG8XpTO55hBXBMp01JdrIEGgtBafWsLTRabhVjz15af44Lu/i96gT3V4CCEwmx5j64oWi1KOre0tLr/4Is38mLAxoGpaKePmGbXzjAcBnTzd7eGQ3M0FXGQM9w4m6T5FlHK4NjBrPCGxuNftAusyjqojtFbcvP7qN5wr38zxLQUyMcY7MUYfJVX/fyChBsAN4IG1l15Kj33jk1AaFwM+CizYBVGF1lpjrSTIOr4LAcSsaOAzmwsTshFZPKNlR+jUutYlAtZDkbVr4b5NNN1vqYp0ya2lyxoVRWYJwWGsuPaBBnxksDli1jbEquKjP/IxnHJoZSl7Y6wpyLISlKaXF2A0s7bl6PAIrTuDRPqe1+YkXtuWffK5bmHf/5ouZFBakrcqFXa6ngmBX4WlcVzv8lwPyRSsSGHSY0v3axU5rZ7/Lc4TWN4/k6ov4lUpyrLk8ccfl0oOArgz2uCcJwbHpY0dAKbHR4y3NimKXEB8xkrYZa3Q4RPJswxVgraaoKWyZjPZG0OIGGMTnNrgQ6Bvc+ZNc+I81zt8lTqZN5Kq0aotQV4fljmew+MjtDFyTgF6heSndrKGHT1n7I9ob1+lWEzZzDTT2YJKGldTNcxhdblsuTdlxsbmNm30FOWY3b2ZhHhOErEmN2xujvBeU9eepg203gleSCl+BwTJvjXPQil1PsZ4K/37o8DT6e+fAf5vpdT/gCQ43wJ87rf7vAg4L1qYbevRSsqnnbjMqtNxeQLS2GUsRZ7hHLRtkxqdQQVo2sRWpO19i++ke39C6i1xLnTsQytDsbxulBJjgVK4tsXVC4KC0mqKsKBqj8BsYRV4ZZksGnaGw9ROYlnMpRJT9PpU3jEajpcUc9pYXOtfE19+PeNx//P6vhChO1/53dELpuuPAR9DonxLCyP4tdcLlaAsEmGjUt3oq7XF1OVWtF4m+77RuZ6o2MS0S8vtJBJ59NFHOX36NHfu3BEgegjUtYDmvPdJ7xP60dDPS0lUpq5KkniSNsJF0SzmONeSKQlhrbbUCEVfZq30UqT8S103XHnhMlXrQCXmLVaSDSfyOWvJ6C6AlRDLL7ExIXh2d3eJQFs1kpwvS6q65v3veotQLYaWynt0EMatpmlFLzUEWicd2LLg5RyayZSbkxkqy7C2kpJq0GQJJIeLlCqXrlvv5DMDGONRSsKT13t8M6XTfwl8P7CjlLoO/E3g+5VS70rj9QrwXwDEGJ9RSv1r4FnAAX/ut6uEQOcua9FtVKmBKcpj6RxkN1SKMnEjpO/jeDaVdu4YU6dDUkTveBXXjMHX25hP7JRp51Be3GKdqiNdrNvt3P1+j6Chqhv04T5mvIEpLTYf0vczmtgyyvr4RrOYzlDnzpL1C5wLZFHhQ0uoGoblkBADh7uHDEdDgVJnK0uxvovdz+twfx5jfYdbPe/TNXX/d68Q7iQVV1IEMSVDY1Jnj3CistJ5KKv/13ISiZ1+/Xw6A/ZbjXeMEsJ1jonRhp/4Uz+Bcy3j8QjfChFPllv29idsDEccXJf96U3v+g5u794FrdHBJ4GqSNQREyNFkaPrFqcstc0wbUPTtGTWElvxXqt6xmA4ZrpYYLThp3/qp/EhoJVIOAjpbdpM5ISXv8XNkgkVY1huLF24q4g0VQ3Bk+eG6bTmcDJh0dRcspIsd8rQV1AUCrKMul9gNDR1ILMZZWGofMRXDXCZ6xPD5HhG7Y4wZh+IZMbQr46l3Dvf5/Kznye3mkIrzp8dUhZFIs0xFA9d4vnnX/w6q++bP76Zasgf/ToP/5Nv8Pq/C/zdf5+TkPp/LZRkKWTQKfHWy+0aR6NYe5/+jTHgl3TwnYaGWpMS4IQ/3CXkdKcRSkcCvJrAr00ChvQ+k3ZiGI83hHZORwprqasJmcrAB3q9M8wnh9S+BmOStoinWdTozBIITI8mhJ7CuZqiKNk/PqQ/7rF7c4HVwmDlgwejMVHWorUnJfxgHQy0POMUrrn7whHp4FTLSkYKeWTAUFELSCtqgha0auzA7Sk5KkjG+8dyzUCcrMesjb9aLrTuOyMdgWzavbU0jJ09e2apyxpDJJiUQAxgtaK/JX0S965f59g4fPI2dYx4lQZKGYw19DYGHN47IvYzTJlT1Qs2t7eo53P65YB5JTttcC1Fb8hXn3m6Q/YsE7Gra43LuXUiZr3fi1OCh4GIyTKMNbiqRWe5oFZdIOQSChYKgtFoDMYospQLyQotKnFKU8SWn/+y5Bp6gxIXHGUsknI6lL0ckwmTW0WkyHMqm/OOtz3B1SsvcfXGXRbzhRhk8/rxl28IBGeMYdkGDtJpFyLk1i7bjn3s9DA8jRMmKKVUaqs+8WmrHeC+48QCUpDIIZYPdJlybVY7rjaK4LucgBiLYW9IcIomBHRR0FYzPJrW1wztmHv7e5w5d4kIHM8PWVRbGGXJiBRFwWJRMxgbotXMmgUUGduDDXbZTwaipjEWYoNWJS4G9FIMVS3PtauYSMhmVteASZ5IR30XVgYyhSoB6XvRWiduySDxW2SpcCZeQzIay0rNa70aGe5OCYsT/3f3QWjuuo1gVanpuCvOnj0rzFZtg7eRqlowpC9xefDcvX2T3f19AKqq5tpzLy4JizNjaVqH1qu+GLTs8sZmRK1ofQsEWt/inROCaCIEj8kL7h7sUwyGq3Lu/ePQjVsq+xKT/igpl6E6o6JBBfKyEG4PhIzaaE3w7XJTiykxGnUkaCTZG8EmrZkQI2WmadJGdvXqdXyQSknnWQuBskZbEZPOs4zxxjauqXjg0gXGm1vUVcPxZMLWqW2efe5rv81K/MbHG8JYaK0Z9KWD0jlH3cikciHQVnLz4lpIgjIsoTPddpVm6Yn1f9/xmgRg50am0qlWirzICQhwSXoATNpQZGJYm+NR+CwjC45oPU10HBwcc3rnYVqtmO0fE+uW7e1tdOzRVA3jcR+jLIRAfzxmb3eXV1+8zNmHztPv7/DCS1dQmUU5xRe+/z2855O/ydQC0RH0ejVGRqPzilbh0Rp/cwwnbKW4xx1LtOBJxDD7ZV8GdDR5MTGK6eWYy9h1oR/L7+70Pu6v2JwgL+ryFGmZJCIvKcUi/JjaaD74gffg58fcvnmHjdGIGALTZoZvPDeu3+BLv/QkeElA3j2aM76wg25aYp5T+cRVKatOej6AvTanKBX9rIfKLAf7h4TgsTZR9S/mVJXnobds4IyhIK6FrRGjVoJH3YCuAFpxKUTcccR2d0YrzdnTZwiuJSjoFTmYzrgolLYITV7AonAxglHEoFBa2swzq/G1IGkBirKH1jGVVVka/G7cuzk/nx5zbT7l8uXL2DxbsaOrb6mWceJ4QxiLGKFp21S9iHgfu6zXMt7ubtC6pKGAkroQhXWbsTzWd8HV960G2aTJak0mC8k5GtemPMV6/C27tPeewbhPlufQNuLHKEumbeK+hHFpcPU9yrzHfHKIKktCcNioIGoaIjHTeBRV8Dz31DMUJoCHisC1vTtUOsNqhQ8OHQ3rV6C1ThiUFemLDxF016Iu521T2/SJMVBdJ6pQ7ZtlXkYtwxfhghDK/9WCl4W9nv+R0qJKRt4vjf1KP4XkmYBKbN6SL0ljq4W0VxHZHo1RMRC9p54c450nZpHZdMGpU1uE8QBqyedUiyl51RdsRZaB1st5IOOhsdagyyEGRdHv4duWRVWRW0vrHXmWE1zA6ExkBoseS4JeWDJ5L70K1iQI4snkp+RLuqhO8m5FnrOYCa2BMh0NnyHXERdlAzRao4Isws6TUUotleaECKozUoK2jQmDhFLokDbHtXm+EpHW+NYt713rv03Ib2II1IuG5R6vxfXtcgYC+DlZlVgl/Fb1/BhSVYD42i/pvitGrLGYVL6bVwtUFIu9Xn5UStErC9q2FQ7D5DZ735KP+tR1hTEZprcD810GI2lyG+WblD3PfHKH8c4FSrPFYGSXzWjGWAoCJh9xbzrh+V+/wdxBjBlaSxnzyo1DnI5YnxF1m8RkZALLtQqLte4wAQTJcYSkF5vGwxghd+kMSFjP5McVyOx+KcU0UoTQ0CmXd57EqvKSDFUqYSsNymmUDfS0GMQywDwz5CojkticnCSPlfa0LpJphYueBx+8wPHhIT4GKHNKMyTLDMEfcuwcg+0BRlj9+dCHvps7r1zl8Xe8k6+9+CIx11iEwEwnDwkfsLaP8h5tLf28ZH48ISiFa1rKvMD5yMbWiPnBIaUyicVyFVqEGE4klrvxOeFdxK59IIV7eLzSZHlGXdVsDMYczya0tcOqQBtNSi97gk5VMBREIzI5OhKCApVT1XMqn4wX0mQYkWqLUYIJ6vp775+73XmnNN3vyPH6fZPfgUMuSERZSDgARdfXINnck8jB9apA7D7hxA28/7UgiyfPc7QG54UaTWuNWitCr5cg/XL3SCjHKLuNNRbVtigVhMTFBZq6lhDFB4zp4doFNmoxKFlBmRWCAQlOFk2Au7sT5pWQ7nodk06lxRWWYZCRMcoQtEotuAJ+KrOc7a2tpaHoQomuy7T7adt2OS7rGhT3e1r34wq6u5KlnJHWkhS21i6ZroXTsTMgYvCbCDst/IPtbb6rasnznIHKoK2FQLdu8METgiO4rnQL3nmyskCVfYIHm/XR/R5kA/JswHx3wg//8I/wxAMPAjAcWrLS8tHv/SBaQaZMSsd2UHIBkLkQkyiwGFqbZctxqKoKayzloM/N69dBqwQbWSFMfyu8S/fcOt6nmztKy+Q1GpQVAqWoleSdrMh5W62wSiV6RuGh8ASBj3ebZQzSPbp0CMXjMEqkFO6/l0qpZfi3Mhpd4ea13vW3crwhjAWQfCmJvZeu7yplfyIUud/S02XuTxiRk2FLWZZoranrmqZtpZbdTY7kOsKqXNh5KyGVEjuV6uAjKuvRBsBoorbYLBNVb5uLWpqVhVs3B8ynR4TGkWcZwSpcqXnwgYvUzZw29VbEENBNRCmP9xUh8UKq0BBixBKXgCjvI+PRmCzPJY+Q3PhVKuak4TxZFeHE+Jys/Nz/mBiHPM9QRLLMJB5Mu/b5LMfGO00A2uC5sXuT73v0IR584BSPPLDNo+c3uXB6h36vSLu1Tx2xEtaJHILG1Q39ok/mDSxa8sxyuLtHU0+JzYKNi+cBuPyrn2O2u8eFrSHDXr7Mz+jkOWmthCZwGYo5oakLnqLsrXRSlSfvldy6eZMY/ZrQ9GtLv+tza51s6P4xXlXiYkoai6ertCE4J+3uoSUmGgYVU4inEgp2mdsJotvbeQ5KyteiuaKX9+r+8nQHZDRGL8NoGZvX7168IcKQ7qKXYXVqxxZCWNm5Ojbo7vWwuoFdXqMzGNZoTHKfGycl2Sp1HC5/jBDcaILEzUGYmAUyHIixaxpKrl6ahK5tsHicm0PbUk1u4b10LjahIYuavLjEw088yhc+9TOA4cblPZ7bO8I1NW3dQozUbeBN46GAyUJgYYwIHtnI3949YhEUzmTgI6226FARgqAQ7x4eohDkIlHiWik5ywT5Ld3mVP/Uawa4M6iv3XlUat9WRO8YDjY4PDwGWvJM4VxcNtcBuCxincY5x+zhB/HTBRfOnsErSygGBKu47BqOjmdkVolMog+0YYFRG7x67Yj+2JJvW7wKmJgxnc3xvZz+okfIewTEUzr/+CXyS5vc273Be970Fj75/HMUUaG8JyhLrjW+ailHZ1E4qtmcfl4QgOFoRF1VtM5TDnqcPXWaLz75eaKLBAvG5mmj8qg1LZN1IxISND+G1WPdnDTJC53OZmTaMD3YJ2QZ29vb3Di8TSCirV6+diXEtpzcgALvOZ42+ERVICA1v9Yd/FuvJZBNroOor7bc13e8IYwFpItPA9DlCLRSqdq3qgTIQK2PVOdFyHuMNRilU4nJLXWKTnoknVvWsWGJHsPW1hZRwe1bd4hR6OWW5dRkzCJQB4UyJVl/SFARaCnKHlVVU+Zw7fnf5PIXfhGtYGMwpqTlkYsbKCC3ispFYrAcLmqUttRtzbNPvYTKFU/UhpsX+zxyNrCoHY3zzCvHImSEqPBOyExQQn8vngWojl5fBQTwnHa2tVLr2minzFjaAZdJtfRUlMeM1oRW4nuUkRBLG3wSiO7Glgh5owjWsSDn7e97H6/sH9LeuQkxgeXaFkNM+JkICmJ0qDjggQfPkuU5169eZTzW7O/f5U1vfiuuclSLCXlPOCUbJ9ewayMP6YxiPODMxgaubchM5zForJXNAB/xAcqioK4b8S6NpqoqmSfWEpzj3v4+xmpC6hFaGYduPkqFohMV6ibsa8KVZTlVc7B7IG360aNUJp3FQXhUpXcx5RW0zHGVDIbyq8pR2zpCl49L39HljVTK5t8fbi9Lu2vrSt3XGfutHm8YYwFqlZhUMmAdn4Q8103oVSKu80i6zL/0gQgdOqQylu5UtVZIzqjSYEcgqT957zk6OhIvI+0OKpXOUIYYRLDZo7DKSc+Ct5TU5M4xn+xx/bnnifNDRsM+585sMugNyHIFrcPmnsk0cPf2hPFGxnCwxTBricOSZn9BHRWDoKhMw7sffQvaRKpqLhM6QlVNqJqWEDWHxzUxKvZmC0LU+BCZVQEXMqKO1K1h4YVHNIRE2aYNMXQ6nBloh1HSe6eIOJIYjeri3tRkZjS19yz2d7FZJpyRXhET4lZCRwhRQ/BEY5j/0i/yWNbns6Uh6gKjA7o/EC9FBcDK3Q4BrQOD/pBnn73O5k6L9xnvfOt30LaBlpYcxd6tezz82BNcfETajk6XUlWYTvbZ2Snpe0UwAZcK6jbTxKrGlgZtc4zJcL5hvLGBCoLjKcsCrRST2THX797Bq5ieSxWPEPBako8xs+jWpwRx8jh9XOqZdPNRvFpDiHB8cCi7uwr0TI6zNb0sQ1FDRzuYxn6JkI1CSegJYHIa15HtkMy/eI8yt1eLX3Eyh+H9ShAr+SnL/NvrOd4QxmLdxSNGVEoyuhgFyhsSkCX9ZNYujUBXqqvrruyVqNDW8hawcs8kRyGKXiuvRUnzWhDgjlGioeHaOp2LR5tc8hVETOvROJrZAV/61MeZTI44/+hFLp4Zo+IpmvaA0fYGKIUj0it7PHXlJp/9wssoFcmilnAnRDY3CiFi7eXotmYSYbS5RRMCxXCD567vY/ISnY8JRhrphkM5754Xo2eMkgqDAmIQdW+thb075RXa1HcgXKKeGMD5sNypWifygiEq2i4/EyOTyZTp7JjoLXXtUwJapWUZVx6JDphgmCnHixF8cLSJ1NegCNUUE5xM9ZQvMNbgmsh3vfvtnNsx7O01NKrEVQ3Ka4r+kL1bLzBSObWNxMMEmBo8gB+MObO9yeapI777vff47FefhaDwKFG6H/TZGG9T9gqm8xk7Z06DhnpRC8+HsfRswY1XrnHr3i5lr5/GqpMpFLEiHwPaKUkyJxxGN/e89wI2Q8qgBPBEkVwgoozF5iXD4Qhj4Zaxyc1FVOO03KdsKbys8YIjJwbPpG7xbhVqdx7x/XO7W0Pra0mJBZecmOI/DPnNf6hjfVF3N0QqpwISahuPtZZBX4hEOhVwpRSbm5uMRqOv+5lfL8F3//NqzUvr/paauTymUQSlmE5m7O3eo25rnvrKkxxdu8bW5ogzF84xGOzg8pzW1wzMiHrquHtvF5Pn+MUCh2Jrs8eicfjaM3ENj5Z96rqlzAQHEDLDcVvz6u07DMdb6Niish5/+c//eQYjg1FQNQ11G2ldy/5hQ1aUoqnhWorCsLU9RrlAXtiUd5FyrEfYrrRIbS8xGs7Lbuq8p21EcqBtWloPrYv8rz/5TzC5Z2EU00XFrHbMHYBJ9IbSvBViS8RQOsNdWxKVZ1AU1E4G1JockuK8SmprBI3RkFlDmRsO92fkPU0Vt7CmxmQDYmZY7B8w++rzbL/nHQD4JjAcbVHXC8qzG3znY2/ms1/5Kg0ZSkesAhUDZdnD+zapoWnatqGuasp+P3lFilu3bknJcm3DWs1FaZVvq0qU39PmvI716RICwa9KrirGZRexNpYQA72yRMdkZBM0wGBOUPLFuGZ8Q6B2Ir94Ys6q5FXEFZ5m3Wic7OcRb10pvcS7vJ7jDWMswtoK1WteQFEIhXnrHM63+CpxI9Kh6BSj4Zgf//EfFzdYy3P/P3dvHiRbdtf5fc5yt9wqa696S/dbWv16VXdrR0ISGAkkhpBgjMETgM06Y5iBwTELEzP2BLbDYWCGYQB7MCLAwAASEgJkkJAEGm1oa/W+v379ut9ae2VVrnc95/iPc7OqXiMBQgTR4RPR8bKzKrOqbt7zO7/lu8CNmIEXt3hE/f7Upc2UF+AzG4FwXn7NCQNWEoeO3/r132TFjXj4o3/Aog45cfs5xpXFigInDJPeFs5UjI2hLAqq0jDcH+OEpswzIinRQUAYx7SqiHE2QbQSpBbIXNOf5KQi4vkvnveajUawtHKcLzz9Ao0ooN1MaCQ1jNg6JpMx5d4+0kpspOk2mgzGhkg6SkoaUeSbvUiSOPY9HCxOKIpSMBnn/nTEkUQxzVgTtprsD0YIoEoz5ucbnDqd0JrtkqeGdvcEmR0gZEg6HCK1I4zajIYT0sEAk6ZcvL7OJC+o1kekKEYVlEZgLITNJoGylJXEOYUOFEurx7BlhogLrmyu8czlJ1meW+DOm8+S2Yzlu0/i1nKu/9lnAYgbEZtPPcPibWepMsedt5wjlxJtDViFqiSTytIf9Tl+7AShDNFas7OxgbOWmXjW64IWOb/7hx84cDrzUcPgDbodQgZ8/4/9ML/7c/+R/apAy4wodWoAACAASURBVJCqdpq/YZJU9zmmpa1xjgDBcDRk9eZbGOxuEMcNwiTB0Ud6sD0ChauRsqKe5FhKb08pAvqpdxyb3suuvjenGfH0PhfCj2hlzfuZVijGmLo3VeHclz80/7rrJRMspt1DccTrFBxZlh+ML8GPLpWaTiocnWZMu+2FX50UTCFtL26CAgfvKaVCMO0YeyWpQ/VjL8jro79FC0EYCtqhIg4lq6dXSGJNGMckjRCtEkaDIcWgjy1KCmMwJmc4KijKutyQxkv9C4mSkrQqaSUNRlWJtI7ASowTNDpd9nq7zMwuUIxTJi7DSp+CjvOKYdpHIIijgEgrgkAzM9uhKAvarRY4S5WXlM73VMZjT0azpiQO0nosDVpZhDMe+hy30EojA6//WVWOhYUZX9pYxez8LHfcNsP+5CoukxTuMk0Tkk4GLC2fpt8f0IxnmInaFJ0ZrCmZ63bJ85wXLl+kSEtMpLk4SClKg9KtWkRHUJQFN506S15kDHbWaM+E6Exy8sQtzDQTBsNdbDoh3V5j/sQ51MDDvZ2xWCEoRyOUGGATkBVYURsCK0dWQFWUzM3OkQ0n5JMJ48mE5SXvzGWMIc9ytra3694DuHpUaU2FlIq5uQVuXjnGuVvP8dCFZyiMOzjI/C1746h+2uvwh5DvR6TpBFVbQORVBXpqM+Fh3t4+s64YnDsY5xtjKKw7LB8OTLJ99iukf9F0H/imcW1TwFG8yHQ/fPVb9KWDs6hHnmEYIITvRRRFeUCaOTpXrlEVgOPvv/0bmV1e9dMQ9MHk40vjCzhAK3r9DH8FpfOUdicECAPCd78jKelGmiRSdJoNmo2EVjOh3W6itKY7N0+2t0Mx2qYsc8Zpyt4wZWu3ZFIqRkXGOMsZ9CZUhSWQsS8BKktcCZTWHqijJFnhtRtsXlFNxrQaETetLLAwO0MUh2jtxX2EhPWtTf7Xn/lZ9sYZ27t98qxieXmFuNEkryxOhZ4GXWaUeYapCqoypRFpotBx7OQKc0uzqKjLzOISP/eud/Pxj38WaR0oV2tICI9NKC1bWz2ajZMUE40oA+KWQoo++f55YrFBVeyiOw1MoHBRQCYtQafB3PwCzbkOVlXc1G2w2Ekosgl5VpKmOc5Zmo2I7kyHnV6f8TgjyzKev3iex564H6E0eZXTaGpkA9q3+AanlSCTJoP15xHZhMI5XO0j64QjigKy0oPqhPBWh4PBgDBqeDeyeufs9XqMhqPDScS0hVhLMb7mzW+goQJue/k9/hDShxnFX4ZhoU6SXVXiqopAB36UGkX+znWHzXcxnfjBAdcD4dnBZeUlJgF0LRAkpR/ZOnN0rDsVM6qD1LSpj5u+nKmAw1ezXhKZhRACqbwidGWm8G5RMymnF2QqmAKipkxLqfjQH3+QW8+eYqUV0stKioOG0F+Uh7N2Oi69sUyx1HYDNeW8ESgCLUniEBUoQhngnNdN6M4k9Pp75P2UF56/ym4qya3hxMljuERh8x7L84qVhRlmGosEYUSRWzIzQtgQoeDjD29wZXuHqBESCompoBEJZpKCt772TsIoobIFvaHmwkZKHIWkWe51CSIv46+UQoehb+4ay/0PPkqg6mApHKEKWFpoMtuJqKqMubllJmnKXHeR3d4ApxSLK7MM+nuUZYoVDVqzi2STMXk2ZjjMaTcjvPxbl72tPfb3+tx2zzl2167RnWkhki7Oehm4xx95ACslMoywFvIiZX5uicHgEpUVNEJJR0TsjAqE82hKJSRPPPoUt507x6mXvYxARuzsrnFsKWF/v+L8C89BIDFRG6qU/tZFAFrLS2gF0giUqKjGETEVhQp9c1JDv3K0G03G6YRms8Wwt8Xx48eRDmQQU+Y5zz3/vHdjVwrnPGTeOlePeDVv/q/eTLE/5FWvfyPvft/7UdWN0iwv1hDxDwAhiZKIRhQy7O0xMz9LkeWEURM38ged1grnTTh9Q15KhJFMVcONMVRO4WVhvM7stEUyncJ4IWU/jlY1zcHUe0UgUHWPCNyXYGd/5eslESymE4kDtBvmL0jhQd15EB4xqJUnSW1PLMtphUSgla6pyOKGacmXQire8POBVqRJtELhaLUT4iTwxYvxytXNRgRY9rfW2S0FF7dGCKd49e030ZxfwOyv0WmGDBsJTocYmzLOK1yaogSoIABpaHQS+r19VBhSOo+JyKuCFdVgeX6GsLtAVAqWljvcFDj6ZpNJltMINc5BmZco4W0O3/ve93Hl6jWWlpb49r//bTz97LP8yUc+irOWkydP8D//i3/E+YvP8zvv+xD/8se+jyeefp7/5af/Lz794XexuzHhrd/9o7znV/8jAklWZjz1zCWkNdxy203Q77G7tU9lLKfuuo388ReY9IdcurrBcK9idT7BVjt0mg1GeznpOCNLM7QKKKVB64DLG7uUpqIZRhSVARnXTTwfnq2xaKX51Cc/xatffzcri8usLp9ka+sKeTEB6YiDmHYwT9XWXHnscQBsGKLzHnHcYTRap9uO6cx22e3v+zF6KJE6IQoCX2pJhZKKRiOhSDOP/TCG0lQeFSEFnufmsSWiMjjlaKmQkVIUeUF1oH3CDfcS3EgRmE5GpjKPRWmonCPNM+KkiRj797AGlAZjTd3MnzajfdqhpPTkyiMHGtQZy7RZKUWtYTYts70uyQG82zlQEmOrv5Uy5CURLOAwSvuuwjSr8M8Iry7r3cmcQNbSZX7M7817m0mEFhl9oRjmeOxEbTM3jaxTMAwH7UxBpCWJFrS1REaSRhATxNp/mIFvcMrS0tsbMBrnFFnB7sTRiUMEjvMXrxNc3+AbXnsz49yihCQypUf5K02kE4JGgnPQbTd4/Lk1nPBz70BIqhwaSYcgHvLGr38LVmvKYo9QSJyTzHc7fP0b7+bhhy9gSkMQhwhh2Nzc4vu+57tYWVnm3e99Pw89/DCf+OSn+bF/8sO02y3e/e7f5d3v+xO+97/9ezz3whWSSPPo409y8sQKjz52Aaljbj93xrvHG0u7EXJqtUNWWXo7PVaPr6D0DpGWPP7Fxzl79hSvecU5tMi4ur7HhWcvM9dpkxaO85f6qNCROEmZp8RhRFmk2DwjDBRIQVpJbDAdWws/DpeWyljW1rZpJi2evXiZs6cD7n75K/nMZz9JlkWEzRgnJBs9y/Ez9wF/RGInWCHZ3dgiqPbYJ+Xk8ixrGzuEcYOdnRHd5gmQktL6zRUnETiBkwptDEWeH57WdYJgHF7SI9Q4K8jHA0bDAQhBFHkAV2Ve1Cg/guB0znllcFNhhURFESJPcXnBTHeGdNhHqAoqhRWOAImqf74Hb/m+QCkEUWCpjmAplPQGOD4L8XolwvlRrYeACxwWjawV0zmg0Es8df+rXS+ZYPFigs5hGeFoNhImaYHB3KCCJYRA1z2Mnf6EuYbmbCvisa0hOMUjjz7E5z7rO+grKytIKbn13K289p67SQLJj//rn+RXf/7f8+xzF/i/P/DHtJoJ1zZ2ePldt/OPvuc7GY9GjDJLXlYgBFlpGfdHCCSTvCQJE974tTcTRzGzx07QngxI84zZxSW0DHF5QW5S0JrAxjy7N+Fjf/YUUSskz0tKa7nr7nPs72zxzu98J8rAaDCgKA37xRhcxmho2d/d4a5zN7G+NWB7a5fxJGO22+WWUzfTbCR827f8PX7tP/8Wc7NdlhYWENbx+td9DZ/93Ge5vjFmfm6By9d6PPXsC/x33/XtPPDYRUxV8op7bqcRKZQwaCkJoxAVGMoqYGNji1YUUxrLiZOrOAE7W30m5YBnnrjEk0+usbFXcmwlpBUplDEEQYSpSq5f2yIIJUG7zTgrEQbCUJDV6thq2l/A3+BBEPC+93yIN33DG5Ba8LGPf5jF5VWGo12UU3z+sYdZbc2QHPc9iyefPM+Jm1bJL22zfOo4o7UNXveG1/PZB59GKMM4D7GqQZWVhCqgcpZQxzXsQJBXBqsE61ubnmfhbya8WJggcJKZ1WXSYYpzUGUZb3rFa/joZz6J1NqDyaZCyEfK3Gn/QeC9ZFRlaUchRZGjgwBROKwLwRmksxjr2bhTlLCSAusMGo1xAoPC1qCsA+AWh/R4H5x8BmEwtURBXSrVkgVCeI6rtf8/ChZQlyPuRuiqtZZutwtyTH8wQHDI9gMwztse7pcVQQahksxGmvOX1/j0pz7FD/3QD9FotJhkQz764Y/Q0JJ2oglVAALChkZryXOXrvKzP/nPOXvmLD/xv/17PvLJz3Hv3XdTGoOazrOtA6kpnSCamaGpCppRk8CCq8ZUVUWgIorBBGMnhAszNKImoirROuTzH7of0dIH+o5KKPa39+jMdHn06QlxHDO83mdt8zquP2FPFCTdefY3JqQzgr3+0Evy1zL1s/Oz7O0PuXp9nSgKSdOMQCkshlYzRgqYnW1x51138CefuJ+idMw05/nDB/8UIeBf/NMfoNNqEYUhKgxpdrs0kgbGgS1Thv0cZyKee2qLqxt7DMuUdH/C1v6QmfkuNy9ZZGGwVhK1Awb9IcO9Ce1GiBOKfpaioxiHQ4oAV9oDEWb/d0yBdP5Evv+z9/OKe+6hc8vLGAzH2CpnbWMflGJv2GfV+GBRULK/32dueYFJvyJuHuPYTJdGGPhNoiWFLUAKwiAkTVOC2jjYs4kryqzg+vW1Ov3noM53zpEWJffecqt3KJSC9myX173pa/n0g1+kKAuQ8gBXcZTpCdSZk0EFisIUOB0hSstwd5eZJCHdr8DaGrGpkFNnN+H8dbe+0W9wdUl9ZG/U68Vl9bT8uWGEe/C6WlP0bwHB+ZKZhkxJORxJvTx7UHHt2hqj0QiJT2NN7QdSliXC+qYQwE5m2BzlHOsEXL1+lZfffRdL3RZzCdy2MkcjDJhpNejOztKe6yIQNKMIqxRnT5+kEA0uXNniFffcy7PPveDrSQQohZCeEdtoNejMNHDZkDxzrF8f0JhdYGVumeUTJ7nlrntpdhdRnTajzR6Xn3yKnWvX+fCH72fz6jaqtMRGEFhvhDQYpuyPvNLzlQsXOX/xAmMkI63BacqsxO0M6F3rEYYhjdl5lILd3h6f+fwXcbbi0ccf5dwtZ9jb26Mc77E4E/KZP/9z7r7jHK4oOXdyhU984pPccfYUS52I/X6fy1evU5QBT17aYbefsdmbcOnqPk8/u8nFKz3OXx5y4eo2W/sDHjl/ld29AcoJ2t0Wd9xynJOtkCSMSWKFLXOuXlwjHVfISDIpLLnxIrzSSTCGqsg9iMu4+qTzm9MruQuEsBR5xS/+/C/x/LNXefzRJxgOByydOMk7vukd3H3vKzDaf87dJKS7NEffpoiWZry7j9hZ582vuZcyrzBO0pmdp9ltc+36Va9UBQSBwlQl1lriKODi5asHfQJv11ghMESdNu/8lneSJBGB9il/2GzwP/3zf+knWM6zb6cjzsMGusU6g7MCrKKRzGDzEuMM/c1NxlfWGOyVjHPHODfk+YSycp6UZ3wfQ0pDWeYoJGXuaimAeo/UQeEwcNRzUilu8LY5UFA9QBqC+HLycV/BeslkFqLm6E+pT/VwCVdbxE2JX9a9aNZdJ37SJ3T0csPJStCJJCMpaGpNogTN2RmiIEAqQRgGSByVqVjf3Wd3Z1j3lRxREGAObPW81LwxFVGgCcOI2MFgOCSMQrSOePCpC3zmwQvMhpr2TMxrXvcKXvOO10BmWdsckl7bIdGSj33hM3Q7bWyZk5kUHUdooamiABk1yDND2Zrh+GuOk15eZ6nco1qa4/xwyLgoWLj9LMO9PpcuXWV/nLG8tMj9X/gc733f+7j5xArf/11v41X3neXn3vVrOOO4/Y5b+Qff/W1I4FWNe+j/wru4+57baTQjzt58kt7ePlQlSjqwlnKS0t/eBSRCS3QgCaUkCTSn5psUWYbD40VUCUpYqqqgP5kwHE+Ym20zTjOyrETqhDxPCaIm43JCqBNEIFhb24AgQdanqMcM1J+gUjjrlcZKYxgPU2aWWxzvtLDjLUppwfqTNup2CYMGozxFF0NEsYdZD2liEcoDlKI49g1vUSGlJgo9vTvPcwLp+wn+Mz5M6f0GE5w+eyuz7RbZZAACgjBE4YgaTdIsJQ5Cf1B9idLZZ0mOosgIAo3NC1wjprkwh50UlGlIYAqEEQxNilMSLQSNIEAp5U2LDASh8X06eyNN3tUQrumhOm36C3GIfhbCa9NO/yacb/R/teslEyzgqGzZND2dfpCH4qkIDuDgXlegJjRJCca7RO1MSr7mzjv4t7/4K/zX73gb8WyHNCtYWV7m8rU1nHH8l898jqoy5LlBSbh46Sq9vX2SpYiHHnmMr/2a1wF+vu20RNWisPubayTNBGkF+XiEDgPmWhodhOgw4f4HHqXTDlFBg9VjXW66+2au7U9Y7DQpJwMmTrIathjakmSmwV1nbqUScM/KElEcMd7r8dz2OmWvR6sXMr+4wEyjwfpzl5BZzg9XFZ2kyU/98I/cePGe2ObtdPmJ7/6+w+c+f/7gYflv/o1/8PwO7/i6t/jHm3tMAsXcj/4gpjKgvKubmiqAW4fC4rIRoiy8SpgDaRzSVWwOBuS5IQ4iRuOCorQEQezFZqOAYVUQhTFKWp643GNUQhJKvBfY9DP15Z11AlEL+D7w8KN8xzvfySPPPE4hDJU0VOmYSTEE4Mrl6xR7W5D1oNMgWu4i+o5kex8JRFGAjkL2evucOn0aYx1BGFBlpXegE3hz56PcISlrOr7gTW9+M0o4qsoHJ2sMSmnyynLz8jE2ejveohFRG1sfWc6/l7WecaqlBhRCBVhKms02cbVPoAMSGfkT33o8hBMSJQKstAgNVhy+t63BG+IIGFmImnlcz1Tdl4AFTB//RQmCr3y9JILFi2swUBwSeg4/lKmL1jQLCXTgx49C0IwjQgVKOP6bfs6MC4lf/wb+3f/+sygpuW9lhZ99y1t453vew7/9/IO87exZmkHAj/THfCItePDYMR79wB/zvl6P1XMv4zWvuq/2MDG+61x5HYooimhqzX6R0S8rKBXz7Q7Dfoo0hjDS/NYHv4BQISE5RTYmabYZpEMSpTjtBHPFhJYIOJ5rNgY7pJs9nnjqKUgSJgh2Bj0mpuDYffexfm2TSyaic/I2Tt+0QOfP/pDL3/E6wEv0lUWBlpIsHWErz57NihyNosJPgxwOqQKCSKO1oiogN7CzvsY3PrFFaQus0CjnoDLkJvdOVzWfwpUFNs2wpiJOGoyKgr3BkFazRShyCmMpjHdoM6Xx8HUpaEjLdj/lwuY+WAgCjaZmb8qpPskUmWsPAEe9vT5ffPgR5lsJncUTCBkSNa5RpA0AGuGEsNmGqkmaVzTn5wiylKfXdxFIFrsLaARBEhOEAUJ6Jexh6jf/eDxGMZ2U2YPGobOW5eMnObnaZW1tnVYrodVqA4IwDDHG8P0/8P389rt/h6trazWR7JDV7Ef2vm9RFgXOWJJOCxdoKldRlSWMJVJAaSwhEicdzhoUEqQ361YKQlVL9E2npC8ikSH9nlC1ydCLMUXTvTQNZkV12P/4m66XRLA4Sjd3jrrxdaj045w74OgfXhhFVZWstCMagZ83N8KQIpsw4xw/EyiSN7+JH/yaVxMFAUG7zSc7c/zje1/B7u4OgVb82j/9UX720hV63YT9dpMf+tH/ge9Z7/HLs21sZb0Jji/4vFS7p0xSWEllBHPdeayzlIOMBhWEXvuxKkqkLihlgCklo/0RZZ12Xw0kExVSRZILZY/q2pBARYSts4ioiREJYqHFbGeBm++5E734Gd70trcz05EHMvVlkWOqijzNMNYzSk3peQDOWcIwIJvC2KWX3FM4XAV5lhIlksKpA25RZUoCHRyS54xDBRJhHMpYyuEYpRWNVpPCWvKqIo4143RMUYETgiDQmKqqhY0VVVXw9FrGXupLC6UVQkssspYPdHXn/sYTcDrivrK+TnzTWWxWoJfaVGtDZtsJAHnWYn095/hyA1HkXH3qIr/30UcYlBVahYRxgg4j5ubmQAh0oCnyFBX4rELU7Fsx/YOdO9jsN918msXuAk448rQkSQ5V50OtmV9eoNlo3CAYdPSwq4zxknlSYcuSMGmQFgXDyZio7n95+r+ukZyOmrGDthKhVO2f4+X2pn6rN0gs8OIm5o1Z0vS56Tqq7PXVrJdEsJhGRWNM7dTt2XrOWYxwJFJRCa9+fdtd55htt+g0O2xeuYYdXUMlETPdBnmaM63MoqRJZi3SQVrmUCRMTIWsvUTzPCcwQJFSVBAFAbOdBqz36C7MoIxjMh5RoRDGkBYet6F0SOkgChuUeVpzLwTawfLyKqbTYHdnm0l/gC0KglB75uFo4kEzWPoaZCkx2utplrbNP/tP76LRaTGTRJxeCIi1JWTA//HTT3Ly+Cz5ZMgo86fDYGcPT/8SCOsdwCtTHXTzpVEYU3mX8sribEmhKyQ+KJT9rHas96eOxUDl6ec4Tymvqsob40iBjCO0swwnKU4oEBanNGlZIWpP2nFe0gwbZJUhNI5JBXsTg/X5jQ8WNajBCTBCIuyhNJ2qpyM4z9IsspTKgTRjdBkitKCwYwCOnzxJb3+Tj370izx36Tr744xmu0mMprKGlaUFdjc2WFo9jqA27SmByKGkwgYSshEOi5raW1oP/w+qIRe+eD+t+UVaK6u0Gwm988/Tufs0ceZ4emsXWWUoZ3FSgbNHNqqriR4CMIy3ezRONZFCUO2PiNodXNJkMtwgEIJMlggrvKNYWV8XDFr5w09KSWX+4hRDIHzpwiEo7GDVUHN7hPZgrDnQY/1q1ksiWEyX530IwtB7nXqmnMRawWvuupV2rBAyorGywng8oHNihcDM0hvmlKkhiGKsVDAsKKylzHMarQZ5NmExCNDWcee99/GZz3yKPJvw3NXLNGdmONXp8DPf8HW05mbg/DWOzy9QlBXz83O4tMRIizWWlbkOt962yPZeziTNMU6wMxwRzCWM8oK13h5ibw9hDC2pmF3pEmjNJMsROz2mgnZa1qe6VFgtsFXJ2++dJ1CKra0eMg1Y396icBVpmpLnYypbecFZYJI6rKzQMiDQgKvVqisv+xpGMcVkglJej9FU0ovG5iXjwYT5kyt0kwbPPr8HQCBbvsFoKnCWsipQSiMDb1wcoLnS3ycMFIGC3v4IECjpxY9VoEiiiDQvmI1CumfO0QhSHrjyEIEO0CrwQjxHRnvO2BvUxm2tzD5tPymlaLU77A0VC6srzJ16iycK8jv8n//pd8gYE6AwRhDGMWVeUdWnctxsonVAs+GNhfPC4AKFdFCVObHSXFvfQip1IJ0vhP90XnemQ1g+j1x/lvF2wXMyBCO5ft4TwmQF9xxLeOS8Q6oSL2V4KMKkaq3MvCxIZrrICqIgpswL0g5MxpbxtRGVtUSRRWnJqeU5MlMSOek9RQRUqSVwAWhzsDf8dbL8xbL9cNmpy3vdA502X/8WhiEvnWAxFaURwtPVvTiZAlEQhzGdmTm63SbxzByvvO+NjPIBvd4GTz32JOXOdS+Amk+w2fTiQpIkGGPRIqI/GfPaO+70jvVBQGQjoiiiyDOEdVTWkOee1SjDBlqUXuC3HCKcJ31FjRaLx08jFsakowmT/oBJOsBiMIWhNTODqXJUDYxJS8P+cIKtjBdcEbW8vDEEKkAFIc12i9GwogSsUKgkQSnLiTM3eZm+OPFAosIS1T6o48oQB/7UMRak0FTWq0cHUjEZ+CAwziYIqYnCCK0T4nZCcwaKkeGp568wP78A1/f864u8Bvk5tFRgKio8qvHazi5JonBY+v0hSoX+hi5LkiQiL3OcUjgn2Mstd81otvreiQuMJ/lNEY5SIpzECnvA0LyxKecQouY+FI5kZoatrR5ziy3KIgegMiOQtfUBvpxwstYjNZaZdsen+9ZnLKYe01YWKmcZj4ds7vQOQFRTcqExjlntpzzKCYyLMPXrwrDpD43CMteMkVi/se2hS5mHsvsemxaaMIqwQhBMfWSdo8z3OHZy1lsu2ozHn96ksbRMR0AhKgJhsE5SphlCgzA3lhtH/z26DsoM53DK/ZVB5W+y/jrGyCeB3wSW8QXmu5xzPy+EmAN+FziFN0f+DufcnvC/1c8D3wxMgO91zj30l/4Q5y3tanQqEkGsJPPtiCRT3P2NX4cZTxA64vTiEt/yLW/n4w88jMxGzJ8+w/WNDbrLK/R7+0S6gnFGp9nA2BoWHgluWj3B2FSM1tZYmGmRpgJXWTLnGEwmbPUHiIFPc/e2t1FhiIxClA48t0MHBFFCkMww22yxuhiwce0yiZZsbw9Qcye58OjjLBxbQlYFIgzp7W7T0pJuu8VGb+ABN4FC1Q1TGQQMhyOkigiUQ1Iw152hqnJMaQnRzMx0+Ol/9zOMR0NMCTd/4uP8rg7QWrA0O0OSBOhAEicxSaOFDpqkWYbJM/qjIWmaUxaF72nIgDDRzLcSijLHmorPX97mCzct4WwJxvrfKwwx+JqdMqfbjBgNJ1QCjFPYqiCMIyLhFcYljs1RwA985+u548Qif/rAC77ZLKderIefre+rHPUf8Y9VnVVKqXAW9vcHzC00eeapHe59+S0EYcz+YFDfMB72753ppxKIUxNoR9RsEgQhaZoTWkMQaJwUKDRYTRxFXF/f8hwMNXWYFzhZu6/bCKEqbw3gIHDOK4VXFWmoWVAhK2HA1lTKwDmqyutcOGORYYjSin1rWO62sP0xJZZse9dD3csCFAQiYmWpiTYToIIywZDhXML+1ghqN3s4DBBHPV6OMrGnwUA5avb0jXYYSv7d9Cwq4J855x4SQrSBB4UQfwp8L/Ax59xPCSH+FfCvgJ8A3g68rP7vtcAv1f9++VU3Mk1ZEIWK5XZCoi2zieS7f+RHebYsOX//5yiG+6xt7xBLOHnzCpPtORprG4SB5GMf+TD9/TEyTrj255/i9zsNpAg8iw/B0sI8QRwj06JyMgAAIABJREFUkJRVQToaeveromAwyZhvN2m22jz7/CU+sjRPULuwt9szCOeYme0SRRGNbpv9a+tECy2qsMXm9mVO3HorF69vsnpqhTyrUK0m3U6TfH+bLE+RocYqQ+AiqAxCe4SedZZYRTghMbbGmbgCU1WUpmKUjvjWb/02nPP9E0zJG37j13nmm78elGW0u0veH0IYkDhLZB06SsknJZubPVZPH2PS1hw/cY5ulRLgG5zjvT42BqcCfvJTl/kfX32cbH+McA6lFaPxmEFa4ESObirStMD4wSLOFCRJQlWVGECUlr1Bydu/6RUEtpazdwY1FZARDpzPqOrEBUdtvTfFDE1r/iO1v3MQx5oTN83z1BOXuDO+CVc7eTkr0YpavXo6GjyYJ5JnBY24QRhFfkzqZK1dXCCVJkliyqKgjjIH+IQkirCBd1p3EmxVenc8J3CZ9VKLrqAIBe12yGY/r2nhh5MIPzat0EKhwghnHKPxhCgIvRWh1J4IWJWIUHmfFGGxJsRSEKDBGUZ54a0ipgSyF5EpjwaPA6q7cwdliNfkOvyevxPWqXNuHVivHw+FEE8Dx4F3Al9Xf9tvAJ/AB4t3Ar/p/F/zeSFEVwixWr/Pl/85GFYXO7S1YsbkzM40aTYT7nz72/nlH/hh7rz7ViLpaCQNer1ddje3vYK3EMRxg8lol6I/oasW+cnLl/mNE3M0467HSIQBc90O587dhhWKwXCPSy88D2XOsG/Y2B5z01KT+dkuP3n5MhfvOsNWb4frGzvEkWJlYZWsP2Jxvsnu+jqGktH+DjorOHHHnQRJwmD/AkmzyXiwTW4KwpkW1his8ZJqCN9I1EJQGeN7BM57qiK8lH9RFlTWIqxlMpnQ6XRoNBre66TIa5sCOLY0y2zDEZ9apb24yKTKyCcl1uLlBcOQMh3TiSX9zR2y4R5rvX1cWSClxZUFYRgThr4HQlkhlEJ3EkhLttM+iRIIF9DfH+B18CRZnjPT6WCrCi0lmJxLPcO522/F5mUtxuJJWgdNNze90b80AWuaYfgAcRA9cNYyO9/l/PknCGXCw5+7zB13vAzwdflRkdoX30lSSuJG42Bq4MFOFRgoXUUjDNnu+VJtashtraOdhFhrPIbCGVSgCUMJwm9ggDQvcM5y2/E5LuxfR9S+hdPfpawqbwwlBFZLynEGWU7SbJBVJbiAMgMlA5y1OOttDb11oQPjQ+koyz3K6EUTjmnpBPU41Xo98RfDzo8uaw/NlL+a9RX1LIQQp4D7gC8Ay0cCwAa+TAEfSK4eedm1+rkvGywSLfnGW7z2Q9yIOb4yi45ChA5I+wNOnDrO5vYG3e4S88sJC4uLrArF1tYmeZYyu7DI7NIKabBD2p/4N00FLgGBJQkCJuMJFy9e5MzLbmF7Z4fSOiaTAnAsdZukk5Tddf8r7g5H3HzzcY4fXyaUmjBQ9AvHJJ3w/KU+W/sDtJDEzQbt+S67a5e55cQKI0CUJTt7e/z5Aw/RCQJOnjhBKwmJVYOqrFASDEfGwkCkNbEOcEhUFFBVHoFoqooiy1FSEkUh4yxjsrTIf/j13/9KPra/dO0mIRWOyjj2XtiidIaVjqa3PybPK99k7A1QuqLdiqiyMVpG9AYTXv2G13KfDpmM9gijyCMoNDhrKQvf87HOg65E7eY+pVpb609qqdSRjS9uCCkmS7njtjOMhinjtMX29R3Ap9kein84TTkIOg6UkjQbMXlRHfCLnLUEUpPbgitXNnjhuv+sp2UIOO68eRmBwrocLT1KUymNj3sejxEoLwf4tfe9jD9+8rofvx7puahQY6xDOxiPxswtLhIudZGjMfFMi/21XRrGo0qlsxQ4tKVWYrekwhEYR2/kIPfs5elyziu2+//xh490XvPzywGvXA2uC8OQPM+/qnvlrx0shBAt4P3AjzvnBkejunPOia8QfC6E+IfAPwSItUTFIa1Og9nZLjpO0EohUVz44B9x+u77uPTwA4ShQFmBK3JyU1KWhjiMmIQxm2vXMa5itLULwFgaVFWQ6BgqP5LNTIGSgkajw+bmFu1mk52NnpeoK0sWFzwEuLexyYn5FomWlMZQ2B55Yb0kmpKszs7SmpsnarZwRUrneMP7axjHXOM47VbCXLdFy4FyFSbro6TDKryKuANlHFQFWkWESnoVJmytpSgOavgDc2McSsKnf+1X+NM/eA+hNIiyACQykAwHPZpRA+c0MtQI5xj3d5BBwGx3kTTvUYzG9Hd7zHTbSBWQlxVaKtpRyPq1LcoyJVKC3u6EcVYRJSGDQZ9GI6YofGrtNKzvZbS6y8TOUkyGRDqiLAo8nE4SqYDKFl8SnlzfL0w1TNwBmMmrgFnr5QM8CKokDkMasw0evfQ0YeI5HgpRWxsc3EsH7yulJA4C4ijEWEsct6jKkqIyFJVF4HjikcdqBup0+iIpioxuKwEhka62fFDhAWwa5/1cAySVFFgdMNXWmgrn+jGlD4wSyf5en+XZLtJBe3EBs7eFljW5S3g5g8JahPX6Gh5uDgJHltWWFuLF16yeINWTjin13ItD3Xgt4JBz9beBs/hrEcmEEAE+UPy2c256rG0KIVbrr68CW/Xz14GTR15+on7uhuWce5dz7lXOuVe1Ww3OveJ24sU5KhxlnpONJ+xvb/Lpz32E/QsXGI9y702hBRcvXQOTYRAsHz9BO07obaZcvXCZ/mRU/84aWZUgBKX1yLiirJBOEEYhC/MLRFGAEIo48B98Z2EOgGanBdLb9YWxJEstiIr1tXW2rlxjbr5FI3Q0Q3BKURQ5xXiCSlOK8YD5bsTtp5aYaxvOHOty8+ICzVYb6TxASgp/kkipsJUhzScEgQejyRokpKSmqg71HL0kkJdOs7IiECUCQ6At0hS4qqQoUlCWoqoQsabRbTO3NI8VGfvbfWzpmF9YINQhVkWoUKHRXL98DeEKGvX1yCtJEmkskjBMcNYQN0JMXuIqy7GzZ3j1y89QmgKUQgUhGq8JaZggpQMLUihwAuSLQEXTE9B6qPMB8emIAnW322WuOYuwjjCSnLnlLFevX61fZnH2cANNg4TEZwq/9Mvv4k/++EPMz3VZXp5nZqZFs9kgmWmAEjzz1LPeB1XqGq2iUEIw1478dINDn1CvDWG9vL8DqzwdobBemOaAwCVqNlMtpGNwXHnhBbKs9KZSypGECbbI0MK7oVO7qBkHrqq8t0fltVEzUfqsrL5WU8KawEO8pz2gQ0AWN15bf6WQcopj+TtocNbTjV8FnnbO/YcjX/p/gf8e+Kn63w8cef6fCCHeg29s9v+qfsX8Qpdv/uZvYFylCOlw+YSKkCwdkY/HTAYll66XCJPRDXa43t+n6WaJwibr/SFJEtMq+vzCb/0KH3viEnzXd/Hae87w3PU+UaAwQBBI0Jr1tXXue92r+ZOP/RnjcUoYJ4xH+zQjhcs99+BVd59DK09pbs/NkbZ67I7HHF9qe3KQgGLcpxUpdDYgKQrax+bp7+6gRinj9R7D0nDy3O3oOCZOGpzINU/395G2PqG0RAkv3zfTagLe+0NJTWkLyqpAa0VZ1mhWI9EogiDm2gvbnF0KQSl2d7epjOX02dNY67vxUSA8mCeMcekYl6d0E0UYRFgtUXETUWZcfHKTwuU4W1EWFaOyIAwCXG0DKI1FhCFFlVLlFTtjyV23n+XYUpcqz1EyRijLpBjT7iRex9QGTKoSF0qENb7RVlPRj+o+3KBY5qjRn/7sklKyvr7OyqlT7Oxu00pifv4//wJb49TftFIdTB/8TVrrTSpJVVZcXVvjd37v/fzWe9+PkBCHmrd+7Zu49977WD2+zDMXLyCaDZ/rGJCBItFNFluKQDgflB0gTe1F6vsIU1i4EpIiT9HCYZX2ephTZbcarWqtZW1zjbYOGeQ5Nx1bxSyO+PxHnsPNd5kZD5HNAKTESetHz9abZRoHeTlFmB6BbrsbfUuma3pNj37f9MJ49ay/O27IG4DvAR4XQjxSP/ev8UHivUKIHwAuA99Rf+1D+LHpc/jR6ffxV6yymHD1yU8jnOLSVo9Pfvoa//j73karHZE1mwQuZXF1ntWbZrn21HkWG0OuXLpIECyihWBzuMOz+30e/NyjPPyx/wLACnD83rM8f3mHfpajQ0lZlBRlwaVLl8jzknSS4kvOgO5sQjRlIEYhRAlKSJJQogJDqzsL1tea/dIQNUNG45z5xWOMJzmNfMizaxvMz81y/OwZmo0mSnnbv6yqGPVH6DCiyg1SWo+CFBbrBIWpcNan6958SBIFTbJqDHiWrSyHtCLNFz57hWMLLZIE9nq7JIFjZq6FMDkuzX0Nrtpo5ZP/NC3I0pQoaRA1GozGIwJruPrcVXKV0Y5CqhSytEQHXt8zCAIPLdcxab5HS8W8sON421tfg3JjqjyjtJIgMGR5RSNqUBWV11Ow05Rd1qmyRdQaplB7gdbX+ah04lG/C+e8q1bkSvRgh/f/3ifZyuwNmgyHLE8OegamrJCuxukYr1sXAKa0/MGnPsHvf/CDLC0uUGCJrDmSwjtmuwmxkkdEYwTWTvuLXrpO1dHF1hoYgZQc7QIclAcefcZgkpIGgm4c8fAHP8Tv/9nHuf2+JU6fu5lnvvgAq9Esxk7d5L3epsUhrKK0NzYkvxxO4mjQPRqEDwRy8AEmDL96SJX424g4X+3qxMo1leSuM/O8/HUn2BpXbFzqcXkvJW41KCtHS8G3f9093HfHnXzkUw9w7swqo8JyNV1i++rzXLm+ztkIWp0Ov/iBj/HKe89wsrvIyAa8/ZvewiMP30+iEqpmkzK37G17NaedXo/JYI/QCV597+38wm9/gH/zg9/BsdMnaM+2Obl6gptuPsNDjz3Ifm/IaG+PfNijKkyN/zeURYbKRohmC4FGNWJ0KDGjFBU0MaYgtfCZhx/hyjPXiZIQi0XoECkVoVZ87smnKNIJMhBYA5NRzgOfe4GHHrnIFz77MFe3vsg9t81y76klWq2EMi+9ipKxYCts4PVHwzAiEoLhJCcb7lDmOQZFOuyztLjAuKi4eOEFosTS39gmJcYpTSIsxlZYZ9HaU7JVGHL56h6dlZO8+vZj6EiRZRlOxThT4KwgCARlkbM410I7zbi/y3YRUmQDfvtTL2Dw+g7CCw0SBAGVLWuR5MMG5aF7/ZEMBI9vcRZKCrSVDMYjmq1mbUD8ItKU8+A68PiLqRCvqEe1UkhC5VW6KmMItFejEqXlm970Mu5dbFLegPvwPBInvO2icqB1QFY5rDP86h89zF7uG7VO1D6jQh5gIYSQJEHMpMz84YCgEUS89fYu0jrm5yJ28oBbFkLyQlDZDCUiHJI/+sJFdgqHMY79fp+F+fkjO8aPlqf8lKNBYsrW9vQJP573jFrHbm//Qefcq/6m+/QlgeAsLfz4j7yF2+5ZJWGZtdzw0GPXWd3u8YXzjyAziKXiIx/5Is8+c4Gbz9xOVUmCyGH3ckqlSGbaTKqU5eN+KPOKO+/ioUef4ZWveiWXrjxPI0jQsy3MpESIABloJqMhoiwQlaQ5qwkS3+B8xz94B7ubG+ytXePq+TGjnQHZOEM7wckTN3HlukMWBYEsmV89hcNx7bnL2HyE1BpdGQa7O9j+gKjbIWo1iYsJb73vVq6fPcUjj16gKA1lafxZIiXv+X8+zSQdUxrJM5cvsX71GmsXHiJOSs6cneFb3/Y6OgYyW1JaMKEjsMqnsMYyHo9pdppUec5oZw+rNVoowkaCajeZW1nl2to6V69eYaZpcHnFWHpHLGkslQPrvB2fdQKE5drGgNnTN/Pqu05BacmLgsIIIuUNh5NaMk4phalgMNglLb0DmrMOYcs6da8BU/WGkqgjHhmqrqsPgUZTkBRCeK9WV6NKp1VHjdWAQxi0MZ6jgp2SEv0kTIhDoJ8ASlP5MSNgEIjKYKTlZQtzlG7CFL7tnEMLjcF7iDjnWaGF9blEIBWdOGB7kqGE8X0PqQ4bj/iEJ6syvC+xz04mk4wrleaNp5cY9wYYZyizqnZ1E4ROMnE52cG4ts7IlL9O1laeBOd85vOlx6XTUXVd/hkL+qvf6i+JYGEQPPncOplc4I57FhivPc6rzs0iXz5DtBLxiU9+gaEJqARsb2pmZyc0QsnMXBMTaLQMaSYNRFpxYnkVgLkTyzSevIimRAtBoSpaUhE1NbujjNxUjLKSvKxIGg3uPncby11vVvTwQ89gqowQxerJYyQzs6y0bqHZiGg2GrxsfC+bW7tsXL/O3sXHOHZshdvuuY29jW2uX79O0dun1W5RxjHaWvIqQ4uISVrScAWvv30ZBwwqwaR0FA4+9eFfQgWGKGrS7UYcOxvyza+8j1ZTo51iOOwzaSVI2yBwBtVIqEZD0okvVZIkwlYVpqwwQiCyIUiFVgnZsGBnf4v+bp+ksFQY9npDpJEorX0jzxZIp3xKLMFZwb2vuIuTs03S1BsXSaCVJEzSFK08WU0KiOOYnd0djNUIpRHOm//eACCaNjdrKKcT003lezI3ZAlTY526pJBK+qnJURAXHGAQpt3+w7LkxkafED5QmcrckLIHUlNSEeqYVqwp0xqyiW9+VtZ5HQpbB0Dnqf7gza7m4pgLTAjqQIj1YrrTicWLmZ9+qGLZ258QBoKhKRBO+wx1alOhJK7yTGLx/3H3ZrGWZed932+Ne+8z3HOnmqtH9kR2k2zOpDiLEiJFimA4ImVJiZLYseMksmAkebDzEgdBED8YMYTAMBAokiMYCiw4shQNsShRIiUOzW4O3exBZI9VXdOtuvOZ9rCmPKx9bldTQoKoJaHBhe5qdN1T95x76qxvre///QdJNtvtX29PTv/THhr8aQr47eDvKlrjja43RbFQWvHFF27y1adfZvKHX+HjH3wf8xuOe+94C/MY2b/RwEbkwlbB6Y2COy6ucfG+O7l24zJnt+8ldDXrZckNrfjjrzzJzwK7r+zwqU99guvXbjIwlqgiMRY8+OADRCRHixlts2DbJi6cP8X21oRb+xngfPRt92BLy2C4ThcjYb5gejRlftiiUsd4MOLCSDM8U3HqHZ9m/cIdHNy6xvTClEff+26+9Pnf5eL582AUzzz+Da489xwD66iM5qhu8XYDY4bcdfE0VVlitWJ96yy6UOjSQsjMPlkIFnVD1BoKC21EGMG8nROnjsOrl0gEhoMRnbZ0nev9HQWdNky2zvHkk1+jXS4xqWNiJXuuoWtCNpCVkRC67EQmNJ0OFEYz7Swffe9biUBnJNHVFNqiECzqmtJahEgURpOS5uhoSqCi8x0f+cB9fO2xl0gixxzE/g4gb9P+CLFiFIo/FSKVx5QrUWFuRWK/yVcsjBNb/NumKycMyv5GEmKeYNy+SVacihX3wLmArUratiW4WV8YXBa8xUy1ljET0mIM/RjbE0Iebb/1rnUev7oL0fQZRCJTrVk5cb/2Olctg9SashgRXcvSeUxR4Mh6ISET0gZ8nYhRogzI21SnMawiS2/7WVdfW0nm/4yiIPiL8eB8UxSLGCLn50semAzZPmd49vFv8SOf/lE277qfux++ix/78R/gD37pn3Hr+k22B4bhINItDnjqqy/wsb/2cQ5297m1v8dD99zHtVde4Hh9wi/+6m/+uV5Le2YbmQQDW9E1M6Lr2LtxhNncRrjI/vQmnRfMdncQA4uwmme/+jmmrYNygGg9o8E2l67s8fTjX4TDW5w7PUaUChU1RRd46eorfOBDP8ilgxpjE5PxmKm/RVFYYvBsb10gSs98f8b65oRls4RWUgtHEXJMovMti+WCtbOnCNIifMAaSdd2dMsldjDgsS98DjsoaNqawVhxZXdJSo6iqnBNjeo//EppXJBsGcsL1w/59F//MPPFnNIk5vOEEBqFoGkahJRoI3Bthxcwn88hCa7uXONTH343AzytmyOE7cG12+b9WmTwU+T/Kq1IKZxoF1Lsk+1XFO4Q++i//EH/7ujAzLRMJ1f/FQFLrGK4ZC4aSsh8bU8rYDXfUqzVaC2IPk+PlOzH2c6BjFkbQqZwJySrJHMpJSEmBiNDScL1EpHYP371+m5fr6lrBSk2CDapu0gxEESRMZSyMFi7moCJ/Py90jilRIivvxmtnuF2Qd7tz3s77+J75mYxtopPfvI9PFrC5ekxv3PrFr/wf/4m/8lPDzl1xwM89uu/R5i2/MA73sr6acNLV5d8/feeZLz1MJeu7KOUYW1tjfpgn/e99x38ytvuRzULghDMupbRaMJ4ssZ0PqcoDeXaBu3xEjsaYpVl48yI/as3iW3LqQtn2SpKlk3AeY8gMjm7wWC0zu6+Z/vUfVSDkov33MPscJcnHvsypigYb58jROhiw/1vvQsXPS984TeYnB4hC43ucylVELzr0U+gDQwHispqtPAczh3+YMlwUHG8fJHhaI2B1ty8usNgbGhmC1CaWZcYDoc08yXnz53HlRoZJZgBzncUtiClyN7eIevDilGp2R4arl/bI+IotSG47FXhfEApSwg5+/T5nciDDz9C3dYooVl2jspaQNC2NUJJClsgkmdQVcyOp4QYSEHx0Q+9h/WRREaJspau9bcF5uWTWGvdu1+vALjQTwFSb/Ii+g+4RIjs0G21wfvMxFxF8EnyCZ6zMsTr8I7vHivmAJ/XTwwyDSwSY06NH5YFRElKASkVWmYdTEyRlMRJ/mgGFnOeiwC2tyecHg+5Wnc552YVRsprvIcTZqrIMCtJIgj59hNStu8LEWtLBGCEIvr8friQP3/w2s3gdYDma+SKk6+99pz9l3h9kX0j601RLJyAr169xucu32ChKv7Oz/03PPD2h9n9+h+grn2eH3yk5NUzb+GV52/ym//2BahG/A//+H/iqI089ZXHGIwMk1M5iXt5sENX1xlMczETudIUM7Z43+COa77z/As0XUJ7iZ6MMF3gYx//MHZiibFj+/Qd7M/mVAoOL18miJoLZy6ydfohnv3Gk7z47FNcuPtOpNa87eFHKEZDrClIhcHPa67dvMm3PvvrbG2OcLGlayLXDj1705ZYTNgezeEoUliNGEqCb4kmhx1732EqjfceT6SZH+MbzeHRlPXtTebLOV0zwyHZm2dfTKEi99z5Fpxfstg95JX9PbrDAzYHkptHNW0DSmkGGLxzCJmNYUN0KFXRdIF3feB9fP9gyHHXoJXGB481BnwPMA4KZAAhsuT8+OAAFyRXd2re9/67OT3QiACdcHlDSYkiEqJAqsxsDE3T6zCyZPy1k7I3vyEhk+jTvMCWhpA8uhdcrYoCkHGPmL7rJF1tnmxtt9KlZCapRPbYiOiT0mVINFP4qR+9BytjplaLiFSCFH0/MM3sWVIuMBkt7RukFPnUu+7mV778QnaCTKu4zZUALE8t6AuJSBGpFduTNZq2pukcEylIaIaDIc43eCTTtgUVEU6+xnu9jXS1KhZaKnwMaKX7wvZaO3ZCVluNlcP3iPmN8Imbz17FGdg4O+SUv8Hhs9c4e9ECazz9zef43Ge/hYuJwWTIu975Lr7yB5/DKMH6UFMfL1kkTedqumaZ/SRCwoVEoKCajDm4usN0MWfpPKmDYjik2Bgy3z+gdg1Xd28SrwaGwyFCvMKiTWAKJuMJhSr5vf/780wXB1RWce7uizjXYYFiNMIqjYwR33VUg5Kz587wJ6fOMrt1jdlCceOwRgw3KM6cYTwa0yyXQMIUY7wAjKLUeTIRROS973o/T3z1CY6aBc7lcOjSGm7d2kcogSwKdKEYjBVDXZCUYOlrbt08YHrrFk09Y6MSTJcdtROUhcqxffQ5mUqRkmGoDa/uzlg/dZFJWTJ1c4QeEFxG/EPXC8aAQiq8cFhpOTy8idAFl25M+cSHH+K+CxvMlkuCD2ggdR6TYGtrk0Xr6LoO5xwpvRYnGVM8AUBj7CnTPUvSB4dwvi8sOQqRGNH2NRbinyXVPpFp35YFunpsWgnKgs+3GSGpvedtD95BCImdPY/OlyiM1lhrKGUe92bP11wwiIkUwScIQrFWKbQQuB7nkOL1prlSKqTU/c1I4INjMs7hzE0XkGKVj5MdxRKSNua2RgrBdyMNr+OjiNsAXuQJOe32YrEaS3/PtCHbp9f5X/7J3yGJRCcqXnjyCS69eI2bu1MOZjUKhYwwsBXzmaMQjvnRNQbFkJoxXdfh53uYokSEgi7mv4RyZKkqTTs75oVLL9NNl9iyIlpLmk5JPlFtTBhVQ775+Ncpq4KtM2d4/oVnaaYzFJILd19ksLHG5tmC8+YupC3QqqIsLT74fIJJSRCRqiix2rC2NuGR93+C33rmJUZnKzZHDVYrhCgoKs365CyxH1EOqiGuaQkxMV5b4/DgkD/+48dxXbbVH1QF46HELxqUT/jOkYYVRhqCqti+8yLTvV2e+spXiCIwkImKBcc1WGMZ6ohvPFblnAvnHUpZloslo3veyb//oQld3aEkKFWybDus6k1+hcZam9unUlPvzmn8AiGHPP/KVf7WZz5K3STqtiZ1TeYYKIXsDWesEAhrKCZDRJJ454hAklnzontSlA8xf80HQkq43odksaxznqeSvTlRlqh3ziPEKtIvrxXAd/sEIBeNcEJ3jtH3YG7mImysjfjU205TElCjvDHzmDMSY2DuEilkY+HsPg5d9Cc+HUkIpnUGTIeDMUrAdJY9N0T/XiSylL4oKjrnKIVke2RJriEow1CLnOxOxm2MNCx8Zo4KpVEnYO5Kj08uXkoSgieRxXj0VHDB61myK9zCue+RKAAl4aUXbvDyCy9x69pNpk2H6AVFUmafSTDMly3vfs/7cEaShCEN14l4dFEgq210goODA+68c4NmMSe4OY2oCDHQBYGLEj+bMw85KLauGz6wtclxXVMagQmeay++RFmVFAPN+fOnuXj3ecqBIXZgC01MUA3zyRCdJ4WEFpbOBYLoSFLTLWsefufb+eVZx9Ubx2xtjVmKDluAsRUKuijcAAAgAElEQVR7x0dYaxivrSNtyWi8gbYG13Wsny7YufwKWglU52najvrQc/bsNkfNAcK1xHbIMsx45/vezzd+7wvsHO1jtGFYJEI7o045CEe4gEwaKbIgyacGYqCbw7M7HT/7kZK2dUQdkEHReYdI2XC3i46htsxcw2S0ye6tywQUOiY+/80n+aEf/gT10oHUIAxKAslDzEHSQimSilhlCdmiCkHCpQ7pLD62KFsgYsqu6AiClBgrKZzHasvFzQltF9DW4lMkCgHPv8T6ZETXZd+P0iq6rqNNMk8UTkC+2xPOM9fDaoOPgUQ2OB6fKilMRPgEcRVjCAKNkQIjPGiNlhqfDK3vsLroW5mIInCwM6OTAtM6ohRobXpXetG3SgEhEiE4vG8YlZZKJIS2tEiU0RSpxcpxT1bziNBrm6IjyrxFQ99yaW3ywCPmBHYQxBAyVwVxEobVU0lPsKG/con6X9Y6PprzR3/wJWQErUDqSHSRFCUm5dj4EBIP3P8Ap86cpmtz4E1dH2DKCXYyodk/pJYBNVBcfeEKKEUxNCyPj2ialsIaGECz6MU6x4dsjdd44rmnePCue4hYxNqAe99yL362z+mzp1mbrFFVFSmEHBAUHSFEYvCQElopItD6LhuxSIUPHtcFzg4Tu0vHqTUBfoYZniE6gTYDwnDAYDLG2oixmrLSnN4+xbNPP01hFF3TIArLop4zGg6YTNbZ3d/PY8eoGI1GnL3rPp747Be4dXgLrQWjsqVdeGYLhbIeayy+681ylcY5j4gl2giuxoK/+RMfxnkPKlEwoXNTJGB01l0ICcsYWB8OSd0RsRUkI6hj4gPf9z7efn6L6F32pQ55c0YBISUQeZNsjUfMpjUxZHKUI1FITYvLXCOfN6iMHpIiyTxxMMoiUTQuZs2IEBBCPkGBO8+eASFYLtt84grB869c/i6BOyc3jNV7sPLHoQ/M3q6G2CRwUZB0yOCrj/3NyOWYYQVJeKRosRqS0MST55GMNkaMhaJNbWZfptdwhdfiATJhS2vDXWeGaBEz4ItDK4uM9CxXiQwxA5xK4VN4fSt122Q0t1mJ137kjMdEn04iNLKdoTwBht/oelMUi5QiVrqsOA2gfabYBpGQQeAifPRTn6TznvlixmhjDaMshRowb+b4G1dw02MuXb2JqixnzmzhkmQ2b1EERqXkhe9cpvApOyApidra4qWdXTbXNtg4u835i6dYHw6ZjEeY4YVM1R0OURoEBSm0pCSoypxF0XUdqDx6JEYGVQkE6rpGCMWtwx3+t3/58/zCv/4iYnbE5ultqtEaMSburVuW8xnTvRscHRyjj2fsvnoVpWB6OEULgfAdnWvZ31+wnB3hZKRdJLa3tlh2ni9/8Q/RYcGkgqHx7OwvMgXdFuiYx2lSCRIB7z1JSC7vd5x/6H4+8+BFFk2gLCqcb3FuDkphlKJpG0xRokNEmZb59T3mZkjjO37195/j4Ufv4j945/3UrqEUCpV6WT0JYgZPZX8lPpwegZeYoqCSAqNSFtClCnQkdR0yBcDigiDKnC7vhCTIvMmDEH3/rnA95yDUDT4EuuRPphdVVWG0Yblcnig0TyjkUmKMxQfXtysCoRR3rJfUbolEopzEixw/KJIgiYTSPbAZE10dciiyASGyyMtHz53bBfdvlTxzHFg2x1hVndwkVpOd2I+EtTK874E7UASS0KxNKpQCpEabmIV4QrDssv4khETrel9YuWK6Zk1NjJz4gwhuB39vU+Gq3vfVvV5X8+ddb4piQconmoqSxgVsofAxA0Zu2VINxyxmx2htKK1lev0qg7UJvmoQzZJbh3tMj1tO3X0OKxJ+scRU69hhQVBL9q7sIpOD0uIbx8H0GOEEtZM8+q4HOH9+nXOntyjKClOWGFP0vXokhoTC5Qi7mK/SPkS0LfqrZsS3LZ2UlEVFChGjTT4Jm47/8ic+zmc//w26w5qy7UhSsDc/RgbH8vCQ0LaYssQODEd7ezlW0bckrTDKgNT40CFlySd/8J1cuXyTvauXKAVsbE5YHOyxP81O44NRRdd4khIMqorlbN7LuRVPX5rziU++nwcvblMvW4wNLJq6N721JBFZ1jXWGKyEqtRcv3lIGhbI5Pjtx15if+kooiF2HmlFDroho/Kdq6HXX6Qk8uupKuplS8RTR0kXA67zhKZFF5p5vUSnRGUslVQYJSiMYWgsdYhIYwkmE5k616HdSoyWX18ZBCHk26hzkRS7Px24Q4SQ08VW1HGpNJD4wrPP842XDWtqwF2nCsaFZHtrHWsFxiqsUsTgc5iPzabI0Ue0UmTXxcTOXs2ry8CoGuBD+11ajTwCzbhFxGjNtYOG9bMFQiiUyO0iKbcOEUnnPW3Mr7vz/mTCI6Xo/Uw5ub2s9DOr3zsZz578Xra9/ovSf705ioUAbTIYY6xhPm+pG4/3gvd/6CMEH0naIoqC8XiNoRZ4EodHh/i2QyrDxTuGFIVhPB6yWAY67zk6PuDZx57FqoCImuWiZuYiy7TGR9/xMB9+70OcvfMsEo1WBlOVVGWBa5bEEDFFSTkckK3iHIpA9IGmdTk3IoFvO0iRw709rFasTSYcz5e0ixlKXEUVlnMbksPgEbJmWje0fsazX3kC2XrGm6eY1VOKWcwKiuRQRiOMYr3col0sSRQ8cN8ZvvPNZ5l3LWdOF7SzI169dCOj90KjlcL5gLaSJDWLusYaxd6e5zBq/u7P/Ds4F2iaOkcxtgEpDdJkWTsR1kYDtIp0izm3jgNCwf7OMZ/9+svcnHdYC03wKB3RSLqY7fOkkIhkSHhSUPiYSArqpiYmKKXJvhBKoYVEavCdYzAsabqORkJQASUVrlsSfcdy2Z4kxiuliT5getPZxrXUC8/AaFSKQElKka67HbPo8a6eoNV0DQKFMQXOObSSHC89h/MOxJxnbmX5OfFKHnrGmP04JBRWsV5oBqXh/FrJ6UnF2sAysprfeXqXYvMiOzevYZWkbnzPUhW9niP/DCklnPe8cH2fRy/eifOeQVmwSkVzMetl/AIWPtF1kIgnPhRdtxp99m7m6fWMzdR7X0ipM10/rfgeq6nQ98jNQgqBSArnslx3Me8Yb57l7L33UyqD0AI3qBhbRTe7iasqbl7dIbSOZVOjhGKt3KIqhxwtO7rGceXKDq++9G02hmOmdUNdd1x85EGe+9xjfPaPfpXjWzuo2DJvW0zyBGMZipTzKbXBDAva1tHULdZaqmpA2yyQKjBZX2O5rHNll4L5rCYlTxKCerlEWQNlwc61XaTrMCp7IMxmDco5TpWRT/7QRzig4q4HH2Z2cMxTf/QUm+uCvcsvodySsR2SrEWXijg/5qXnn6MLgtIq1NGc2f4MbTWjsqL1HikDrQdjbC4+ouTFnRlm4xyf+f5HCJ3Au4BQWaqvVM4SCSFASgwKSWEsInQc1hKM5OaVG/zKY5dy9KASrA8GVEHiQz7dVW/Uk2P8FCEFQlqd7BKjDIFssRcEvYFMpGk6QiBrWITC2oxLWSERQhOdR2XvABCBGDuqYXHCNXBC4IgcLRZgNV3bsUqOu71YpNQXgP5XISOdd5RFiSCx6IlmKWV+h5SamLLeRUqR4wqAzsFuF2De8fKtYwQKISRrJhGrNUo5R6SIi707eZ/VK/pbhTIK5zpAoERFSpEShaoiSQdCF0kBpAh01DSho3VAfC3vNE9yJDFm28BVMVq1IStOyWr9RTI3V+tNUSxuB2ZC1Dz0no8yGo0JdcuitNigUKnlaPcYrQxPP/VVCq0Z2ILgGlofeebJHQbDkqIqOKwjuzs3OLM2YRk7nBfstQum3/gO/8XP/j1e+ZPv0CRBnO3z0IMPIYcK1TS0oUaHLB4yxiKNxS2bbLy7SkpD412H0ZIYIl1MlMOKrq1x3hMWntIbxuWQZn1Mt1xSL2smhaHaKnBdADTz5ZQ7dGC0d51zp89y4cfey87VPaZ7uwzNBFsVdIs5/mCODC2okrXSUqUZ1w6nICWlVMxnMyQCpwXGZt9ITT5dNu57hB98113U8ybH4xmLNobgs0+pc+4k2q4cjaGZMV9MEdagUuTfPH4lb6IIG5MBlS2IwWf6NLKPKsyKTx971yixstJLFFqSRD5dUSJj9yIRqmF2gSJRN022LvQ+x/31jFGkzP4UffCQ63zmEgBNnXGJ2jkqWzAZjZgfzk+Yoa/J3WXPDE3ZZCb2bMbksVbxlotncM7Tth1N4+hCwPcM00AfWQkQI0llwFBJSU5+9+x3gjUbWM5nubhpTZKJEPJoVUqVvTVizMFSMXJlZ5/d9h62dEI7Az5h+ttDCrBcLLOmJrVIEZFylfauyEzQ1N9UeuxErm4U4nXEre/mV0ipgDdGzHpTFAtTjPjgv/cf0oYOv8z5nb7zxGGH27lKGG3wxJcfRy7m3HvfA9x/8TSishTCMF0sCQmmXY0tBwSXKGPNXffcwcHhMZcvTRlubPDXPv5B3vkDP8rL3/wiN594hkGZOF4sua5aynLM8fVXeOTjn0INx7jZrBcueZQFVztMabDlmOC7nLERPXW9xEcPUuO8Q6qCZrnMwB67DCrLxtoIIzXTZonuYLK1jZ/vI4YWU1TEWHPtyrcZjEZ859tP0e3d5If/9n/K8cFNHvuNf83mWsG9D76dJ7/wb1lMJXUxYDjeoF1OqYzGyxxO5IMnOJDK8M3vLPmJT3+CtRHEOhBiohqUtHXDYtH1XhCBUVUihKAoDQfXrlFHgZGWp19+ld9+4mUMEVsqxhsDtNQEEVm4tuciZJ5BCJlQpWTKdm+9pJqUM1ljygBlaYvM2JSCkCLGWJzvGKlIFz3D0va6iogubdY7aIMUAtcXa9dkrkCbBAlFWRoKW9B2HT5lLOH2dbuSlZ4BGmLg3NY2lZZomUeYlAa/ltsOq03mLwiBVOZE4blXz2h8lpN3XZeT2VPHfH6EkpqiHGR/EQRGaUJ/C9BK432HiwGtLV1Q/OL/9RheBE6bIZOxZn1UcP+FDTYqy96RI/jIuBqS8Ll4HuSWJLNY81hU9SnurCYiIlsBSvFaUPJK6h9jRH+vSNSVUiz2jrIfgJJIEYnzfWLXsJCag8svMykLzl7YRpY1UlYIl+ikw7mWECKTwRp101JKRbJ507hhydmLZzlz8QKFGbG2OWZx6xpnz41IIXH21Cm63W8j730vMh3gZ0eYsgKVN4BRImdglkX2mLQG17bEGFBS5PyJ9ojkE6c3N1Cq4NhIDg7yVbeu53TtlGowpFo7k52YhGP3MCK0pKlrlLEUtmB2a49H3/9+vtkZFjuv8tSXvkTjajovmN58meNOU44qjFIsFkcURS6MWkm64CAJRqOKa0cNf/M//hEq43E+0fiOssith4sBZRTCJ5KQWCNBKKJrqL1HaYMwid//2stoAdYYJoOK0hS42BOqhEIjQGVas8hzEBKBJHpXL5GJVFLrPhVc0vWEK5FSft7eFzUkgdZlJlanmE9x1+WbUA/gFb2+IxR5459dK0lRsKgdg8GQ4+UyZ3GsPC36lSMwQWuNkJlCX1YFrvOUuiAi+htAFrZJBMu2xhqNSNm/QybQUrJVVbgQMaOMrfkE86ajS1lgVy9ahMoeFCGG7DkhxQnnIlv4CrTwJJnHwzMch8cBjhqevHKI1Yo7trawRcXxbJq9WnshXlUUPaMzv9sxpdxWikzbynYBgvhdmE3GKjJ+8UbXm6JYIEDGHLdXVpbp3lWG43VqKbjxyvPM6hlnN9aIpabQBV3T5SBgpZhOZyTv2RoOc2vQBbQ0NIsGoxSnN4dsbQwZbm+yuz9lY2hYtgtOjbdJSjNY0yyuPsfhzcu88OTvcuau72ProUcowoIUI0EVVKMB7f4RdhDRBuYzx/TwsC/sCUTDpUv7SDxSSda3N3FdQ0lJswxcv77LWx94C1cuXcKHjlAMqLRmrEcYa+n8nI2H3krsBP/uX/8+fv3nf4FOB+586G7U/is89419zl3c5nBvSjOvWTu1RT1d5ElMVNRBc2agePzpHfT5OyjlAYIJXZuTw2IMdL7pr6yRFDylKVDFGmq+w/W9JUJpBsOCz3/xmV4WHlnbGlMZ21OkezwghKzeTAkjs5ozxEjnOoTqe2qdvSCUUMQU+jGuzsE+JKLMoJ7RBu8jXcyPEb3YzPcyciXzxgwhIOJt/bfPp29hLLPZlNRTnekfCytRWdbEpJRIMVIUJcbqzIBEEGJ2Nxe9UbIQkJTBu4BV2R+VPpqw7rqsxxD5FqnJqXmEgKkKYtvRhfjaKQ+sIgthNc2I2TtUZ6xBSY1S2ag5JkFSglpGEh1CQpCC2N+m5nWdC4VTufgJUMrk99HklDWIxCjyzSglYvS9FcBK4PbG1puiWIQQWM5vZS3EYeCFZ65irWSyXnB8fMSZU5t0scEfLvGjkthkPoPznsnaBpHE0d4uIuZkKq8UO4sjjvZazp3aItYHHB9qvv4v/wXD5TXe947zHF89ZOv0Fo05T6TinT/2c1y/cZXr117mzJpi/PYPMr15SLPYZSIUbGzQLTua+QLfeZTO8mZiZHo0ZWtzC6xEKsHyeEHbtSSh2D5zjnvf+jCvXn6RarKe+fxdomlrxHqCqiA1Q770r34LU005mrXo0rFZBW5++1sYJLFUdMsWUSQiEeMisVDgLLIMyFmHuedRfubRAc4qZNdPbFSibepe6Zg3jRYSNS4ZlhU3blwlEnFW8lt/8AzfublAyw5TGC6eHVPEHOgjtUJ4j4gR4QJRkCXl2Z0FAVg0iYRFQQxIofow5JxdGr3HaE1MKfMlUoIun4YrV+7Yb3YlJCBJLtD148IYPZy0GRKlBIvlAlON2blxAx9Ej6G8XgfhnEPIHLYdQ0fbBDY3x2iVMuuWbMWPMUiRKFLMUno8ZZLE/kAolAZE/n4ia1gUiWEfYVBsrHFrf8rSeyBb62mt0VrRupboAyl1ROD8mdNMipzXokWWwLedw8dIWQyIvmC+OKBLmkL042Jp0SI7u6focsMWHAJB27uV0b+POZiqyTetpBiN1pASFovFG9qnb4piEUPgyDnmbcf8cMHm3WfplkvmdUepLZ1rsSqB1cwOjxkN17Kfo7Y0dUsU0DSO4APSWA5mS6azhBOG7TMTmqaj23mKM8vrbJ/eohAJUxhcPWWzvJ8mKLxLzKc1e5ev8a9+6Xf4R/9Ys/nQu2gPDHVqSccNretofUNTL4mho6k7XNMgbcVkMmReN8yOp6RksMWEu+68A6Xh5vUdVAgoJfFtQxscRaEoiwlLr7h5sGDZXqObepax48xY0s0DsossfUs5GdAsaqzIeRheOZYLwdq24uCg4Ts7io98rKINHtt4Ft6hTUm9bDC9OqrrOipr8b5jVA1oD/byyNMHOgTfuXWMIYKTbJwaZi1LzCdySgkXM7gXABFSbkNkvuavkvFWvAYpshiMHrEPKaG1JIb8/XL4UEJrldmdsjfH6U/fRP9cMTMZpRB4H/G96e9KjGaNwcXAxmSN3aMpIE7cr283rRVIvGvzSDpCYfI0Z2AzNTuyimgQ/bg2nnBIYghEkVmdKUU0OovihMgnNznoOQkYDAvqaeiB1fx9nAfSqjWSFFqyVhTErsZKsqgvOEZF5u0I71CFYnzhFF4olj7C0RFlkb9fDLJvB3tFaor5Bhdj1qLERNtk0loOmH49R+ONrDdHsUgJG8D6SHt8xO7lHZyC4XjM5PQFrl5/lTuGJY33lMMKb0paHfBtg7KSZb3AuxIFjCdD9naucu+FLczRHnLvRU5VisG5ipE9j0yBveMZeEXnJEc8TzkoufziJfZrjVo7zX/3f/wKN3eu0V55lbObG8w6SbM8JAZPV9cgPCEmClsRGoerFzz//ItURYnQBRtbFfPZlOefewYfIkJHYtPkPzMoeevbHyUNNvnf/+n/zHT3Gno8YKvSjAeScua4dvkAayW2FCgUoo6URQXa0cwcqihZLxuev1nx05/5fj6+e4QPEHymYxeFZTpdMqhK2i4iZEQZizWC9VHFy9f3sUoiYsMvf/brXJl5oogUw4pzG6MMRKbeJiFEEJLCZr1ElDEHDIeIUuBTZiqSVCaUyZS9JJVCoWi6lspqfMpmLkoKXOw3lJAImycWqldoOhdxPo9zpTZIMjCplMDKbARjtM0gqVU5OSxmlylBgqjyRu9durVUJ5OBLkAlPaaXjgcXsNYSRciXFueJSeZxao9nCCkRPX4SQqD1fZKaEKiizF4bQlFoTTUccDBb9gzOFilt9gqLvn8NcM+5DYSfI4RCGp3ZnBFi16AALxPOCTqXSVxr/R45UxlSn1CQHUQlSEFM2VzYpcx+bWM2yel8IoQMgHrnCOKvJhj5L30pIbi1t8P1W/s0bYcuDbF1LPYOUIs93vPe9/LEN76NCA2b7YCwFam7SGgk25tn0GWNKBR7127x0qUDHhwntuqblBuJamgorUaZgrqp0cHx4rWElh1vffgOtjfGvHJtily7m3d+7GMMdMm3H/sswXv2vOcDH/sQQ+WxagvnO8rRFhGP85G2ayk3t9F2SIwJSyC0C169fA0hY24ZKk1XO6qt01hbonRJa0/THs84unmN0ibS/JgkI3uzGa4WrG9UeO9plh1FYamGBe1sSVcvKQZrNIcznrgZ+Ls/9TBu7widFI3vcsyeEDR1h5YiJ6ILidIw0BkDODzYx0oQwvLPfu1r7NcdWiQ2xhXra2vYXsPh+htFFBkoVDJ/QL2PhOQR5HEmJITMvINEln7n/wfvO0prkcmTYu7hY8zZooRElm1kfYj3HkTO5DTGsPKcjGllwCtzvACgtCCFrKAVMjEsLFYbXB/KJCErS28zg0kpoWLLmVPbJMCnhFKJztVZhu9W2AInLf5KW6J7YpcAtJGklNWrMSSs1sSYWb3GaJTsb1LKoLTuIwNjLg5S5HZM5ifSRETKnEvTFzUTIyEliiRJXcCrfvQpcmHQVhNDRAlBIDM/ve8ggRYCIyTSKJJRRJGVvQlwMXuQvJH1pigWzjuuXbuFMSZz6kPC1S3WWI46+NYXvspP/NxPsnP1iKO2QXUl66c3qOsDNpsFX/7jl/nW4T73TQynhODihQFbVUK7hkZLpC2ZHUcWR3O+dbXhgbc+wp2jhoKC6fGU4+v7/MR/9t8zO/DcPPwTfAwIEdGDim8/9RIP3n8ng0n+MIagmUzOEVOiaRuiC6R2xtVXL3Fjbw9ZDnnLPfdSu5q66VAR7KakqtaQwwnFeIP64Caf/aV/Tik9RWkZVIrdV68BmnKtZD6bMhqOGYoBUktmiwXSG7YmW7QIfv/FW/zMp38YX2tMkWj75GxrdX9Fl9mbISasMcTUMiwH7N/aZe4SAyG4vrvDcjTBdEd0NGxtriFiFoOtCkVKeQNkcDPfNqRQJBFQVkMH2SavDwfu+RGZwZwl10Lmk42wEoolrFI9YSkTqWLwvXgrC9hENrdASYVC0HmPkq99VKUUWKnwXewZnJH14ZCbh/N+GpLdxFcA4wrDOHtqi0FpadoarQ2KXNC7rsuENNmDolKdcFBWpjKQA6BE32aJPObJdnoxEIMj9K1KSpkK71zmNQihiDFPl6zOtyPnPIUkf1/RW/FK2WNdMhsfC7mqd2RNaYIQs0NYPzlCppxcn/9B2VXafcDhkUnmG91fADfrTVEsEgLXtiznLTEphmsaGROnNrfp0oLRoOKbv/klBpNT/PR/9Q856tlsm2sjfuOf/xKP/tCP0/32v+COzTEXzm9gXItNNcNxxeLwkKODQ55vznD2zLt54Jyj7FqmfsTSGWiG2HPn2Lt1iFWa7clZ1s6vk2QkpobYRm7M5si2Q7iO5XJBDK/ktK0YaJYtoU341BI8+GXHSzf2GQwK7r7nfqwpaL1numx58VtP8vzXvsz+9UsoBFvbgsXRAYdLTWkHeBExQnNqso13HXPfEpqINYrx5oAXrh2yn8b8g//809T1HKEiczdDOIsm0tYNPkSKckDoWoyGqgTvNK/szNBJMB6W/INf/AIPPvx2PvjOh9DaIlBcfvabCCKuTavBAoOyOuEZRHhNfo3Et1lGnmXdqacY93mbxJ6Vm+i6gFEaLWXGIZIkiJQ/vCnQdQ4BVLaEqEhKZhZoErS9tiEk2V+9Eze04qvfvvJnf5D+v9YbBPje8GqWcHj0//uPXdc5/yT2Aj3oCYw+ZJqaEHidR7PKZSA4RJAkgsz+IOI2498/73pTFAtBYrl0+AS2tBgiqrTc3L3JSAmWrSCFKT/wmZ/i4OYtzt15huDhpWeep64PWV+b88D9D3BuAlEahOhoa0Fd1+zsdzx3ZcE9FwPx6Dq2LKiTY9EmimXB1pkxG3dfxBSZIVfYCcbqnD6mT1GeMhRmDednLOoZG/ICV196hc4t8a5BlOsMz0wohwWFspS2xAzHuHbJ3s4BdbNL19RcefzLXLtxmdo1VKMhKh0yO6gJWEopaFRiMKgwGvysY9ksScKysTGmMoIvPX0DM76H/+hHHyF4j1YVwS1JcYAuJO1iDkKilcZ1LVbCoFS09YLj40W+YQCPP3ONt739ISZrJSkpYhuIOiKLkujbbJGQIjqkk0hBIcTJyZ5YhfD0RrpCvOb21LcWWsj+VI9onUeTSsv+bzqByOY4hITRBSnGXISk6LkBMocAqQzOZoAu4x0/fv/FPNIOidY5Yk/NlinhkuLK/hFtl3p7vMyglCTuOn+aUqRMnBImtwKit8xjlcORsZHQTzSMsfnnT4kUHUIpcixKLoaty+romLKzNyGx23TsTRc5mChkEx+pJKU1XDh3BusbCtXb+qe+hZNZSBlDxKWUR7BSQogkl8exSmb8IayyYWNEKIlG4EOgUNnw2PeTptDTwHUP0uaf6Y2tN0Wx8C5w6uJ5yvEaxhgOX3wOYS3veM872Ln2KuF4wdqZTb7267/G9//k3+D6S03WGcglpWp5+rEn+eDbLiDLAWE557d2P+EAACAASURBVPjIQ0h0C8fTL3ecunAeUfTkmbqmLAuG4zVOnTvPcLSNl5bj3X3KyuIKzeXv3KS0BXZY0ty6QT07xnsobUkQibP3P8z5u84TYqQYTmi941tf+yPWh5vccd997F67BV3guSe/zq0XXmAwMFx59U/wKWC1Zk3VpCA5khrvHUoqJlVBFxyLhSNEgZMlp7cGCJ84nDoeevujfOSROwgi0oXeMyIoCpuBRScNEYGxgtA5Cmupm0PqecKJgpFOfP6JS/zhszd43/d9EBddpmZrhTaaarTG/GCX6BxJrpym8rg1Bo9EInUBQmfAFJ3ReCnyVRhywpjQ/dmXMFqAUYgAxOxEpWTfegjRg4eAzMY1pjCZw+FjbjO8x+j8uJBWHg09ISk4rFG4PuksOZA4zoyH3JzXJBSCDAwPSstACbzLhjkxtKBlbnOkWFEjMi4QcpERAqQMvShM5WT1ELP8XubJjsBDzOK4JCKexGZVMC4tXiraNhOwfPBsrI1RKSJJ2d9TrjJaMm0+htD7UwhUD7f4rt/ygtuS6HsKuhQYpfBNHsdqIREKah8y+EwmcDk4cU1/o+tNEV+4NRmlTzx0luGwpDA50Voqy3BYolXuO4uqoKxKZIgkJVjMl6xN1rj6/MuMbMm8XTIpDVcPD7m5G9E6srkxYjhS2KpiWFZ0ncPYgmAqRAwUWjMqLHIw4ODGLaSRDAcDQjfHpYR3nmo4JLqAFAWFNrjUURQl1doErQrmx1OEkjTdgqbu6JxnVBjWTk+Inedgf4ej/SOIGqsco4Hg8GiK1AmBJYYIBHyd+QC6tBSlZn50xK29lhthwo988l2c3lxHpUgMbbYNjBKhNW3XgQuYqgQ8roaqdCznU2Zd/pB55/kf/81TfPjdj7C2voarG1C2n9UHlM6b46U/eZbULqmsIQlNSqGfCABknwrvE3/vJz9EYXKOSBSZvalSZin6CF995mVigm+9vEPwPU+CzKEw1vSGvVk/4XxA2SInidGDijLfPKSIhN4OTsrMVNRmRTGXecMLRds0oBSVUsQUqV1L1/meaJX/VYKTxl0r1ZOyek/LFEnR5THvSezAa34Q9K9JpFXeu8B730cZ9Bs7ZiW0kHnkrKTMI9YePzA6F1et6ZmZAq2yNeBqlCxFltyDoHOeLuTA5Mw6yStb/kWUzkVKCPDOI3QGSFPIOhiRoHOuF5oJpFF866Ubf7nxhUKIO4BfBs6QS9v/mlL6eSHEPwL+NrDbP/S/TSn9Tv9n/iHwt8hI08+llH73/+05jBSc2hiDDyy7lrsvXCBoaNsG0USG5zY4U4xwhSTMFzgkajRGKo3Xkm9cusH2ZMzMGganL3JvucdoXOLLASTHyAwpqwFVNcD7yHQ5J/iWej6jcSPKwxlyTVOmxOx4l9nRIePxGqWtmE5nEDxFMWBaO2IKTNKEpqnRg4JlPWdYjegWc2InMTqyef4ikzvewuO/9WsIMi13vVLYcYFfLhgUgcZpAoHCStpWEKNgPC6pBgW3dqaMBwNe6Eb8/c98KH8ggqP1DdJLpNCUlWFWr4g3AaXB1R1rI838eM60jmgshXT8yh8+ww999L1IUYCWyKpgPm8otEFbjVKKZllz7sJdHN3agT6QOeMRIJWicxGtJFLlTZ9kZmUGUvZFdDHrRZLs2Zh5EqBN1nyIlEe6K9FT6L0ajNZI1Z+aMRHInhEAQvHaZlf9pEUkpIpopfPGFpHCWoSU+BB7sZ9CKYk2snfakkQRETG3TClmm/+VH0ySgpTzDrPtf28cbBAn7lyiP51DD8qKPgRp5RyehMgG3z03ZeViJQChFUJlwR4ps1Nz9mqOO8wFNTM4IRfMLnikMmhr8wRF5AlOSgJjbN/2hZNW0Ltc7NDZnzO6XFCCczlfJf7VMDg98F+nlL4hhBgDXxdC/F7/tX+aUvontz9YCPE24G8ADwPngd8XQjyQVjHaf9YThJy0XcsM8M3nC4TWGfxSmtnBDD0EbRRdaiEZ5vUCoxSnTm1z6tQ2h3tHaJlIbk7UFd0SKhWwgwkiSXZ3a2bzHTY2hmxsbWDHIxrvWJ9sMFxfpz68Qesc0+WC0fmzDMeb4CWD2TFN3RCEIEkQ0TKvW3wQDFyAFJg2R2xMtii2B5hyzNNf+grmW9+EMlJZw1m7wcHudTjOIiPiCB1bmuBYuOzbWE0KFo1j2jm+9NwRP/jD38fff885XMgWeSHOUaogiYQRgulyifKBUkrMcICKgdIo9vaO6Xxud37pN77Ivlrj3e97L51LjNZKOuegSyitMqnJO6qi4vKNS7z1kYc5d8cdPPPY57EG2jZAyr13WWgEAqPg/+HuTWNsSe/zvt+7VtVZ+vRy15m5s5gRRW0OScmEGMtJECuKk0CQ6SQIZFgxZCBKAmcRsiELjAjw8iWI4y9GAikyZASK7QSSIicm5AheEAmkSJGiyCE5HA6Hs965W99ezlZV75oP/+pLCkgYRRMLAxcwwMVB9709p0+99V+e5/do5UBrghLfgcqQS558IRlbK1VltHXC3zRVjGhTqe2cwzYWVSRcJ4wj1lhwBrKmbTUpiTrRWSffVzPOOGJKaG/ISKmd81UGRxZJyLS2tFb6dqyFWkmxTlsMgf/WWjHe4ay0gqCwVTY0WYkuw0yzE2U1WlXZAGWZL8SUSSVP9nxZiWpAG0udslQbJXkpqYqZT02zjpTl4KUKukArwQVI+HohTB4XCTOKUk1o+TuVtoQ4QXGMpowF7SY4cY5YbQQi7bWI8rzHeUv9/ZhZ1FrvAfemP2+UUi8BT3+Lb/kR4G/WWkfgNaXU14CPAJ/8f/oGZRQxj7iUsAZyHMm9kJ3vrzfcOFxSDxdgoc2e/cUWlxKzQ8fioOOdBxd0y47QD9TssJ1i1s7Q2lGV4vJyy6gqB9ePWF1bMfMe6wzP3HhB1lV9Tw6BWyfXWc1XjHhC3DH0e4ZS8UczGmNJyWFsw9D3+JWnVR1p6CFXlgvPdj2wvQyYOpCL46jCqjVcrk+ZLeb0+z1hDJyf7+gWjnm7wLWaYbtn3A0U17K52PGjf/KHeP6pFfvtlVhojcIJBEYV9rudJGMbI2xRVVE6cHa5EXlxqqzXa878IR/+0IdhN+AWjegLkjzZDro5iUo3fZDarqVSuH37Nq84R4rDtNkQufeVGSlPN49sSaccDq5SwOSJnWuWVaDRTwZ84hKfVIiT7qBceUCclbYk50lzUSfojX6SIpZTpuYR6ywlFZSqxHgFuBFit9GC6S9TGrzY0r8BiVFMcnI70cWtE+hyFfBOlTQhnBGknTUKtME4iwby1HqkiQFS6zRPKXK4lJTFAsDUugApRaoCXbUcaiWJyExpaYcqoo0Jo/x+Jxqb906YvEo92RCZK56oDFKIKeM7x1VIdNPNJ8xhJWWxJBhj0NM6/N1e+v/9S77pplbqeeBDwKeml/5dpdQXlFJ/TSl1NL32NPDNu623+daHCxqFtoq2tSznHakkvNF4pbh17YTV0QpvNGM/iHX4sOXg1gHNzLO+2HKwnDGmQsagnEe7jstdIGvNetMTa+XZp29w++SIo27O6nDF6uiYEBM5iofCLg442/bY2ZJxWLM/vyDtZQ31zMkh3bylPVhy7amnOXnmDjYlSlizPLnNc//k97NeD6xPz7j/ta9ibMfRwqKU5ezRmjxmhv1AjnIjLBcz0RykyHYzEkZoZzO+/vol74TrvHCzI6x7rA6oUsi1wWlDiYk4jmhRW+OcRWtovOXi0ZpQYKiG7fqMv/6rL/KR7/kQtmrsQUdVaspCFaGVtobDhRyCD08for0jl8KXv/Qlckpys0zeBq6MXgpqmcroyUymJmalmsp4jcLoKQ6gZpioTTEGYYHWPB0a+UlMYUmZGDK1TGyHCtY2ZNR0sFQa1+CczFbiGARqa+UGTDlLOldJU27HN7YHV6pRZ9STp7UwPMQEVktGfLTyureWmopUCe5qACqbDqstIYRpa2ImGbemVIngNMbIiljJ2lK2OxpnRG8i8vP6ZI1MKVQFsRaMtXKoUiSbJEY0mZok4NRMCsxcEgZQpU6MjIjRYI0mxkBMmZrrpIgFKNRcfn/p3kqpBfALwE/WWtdKqf8O+PPII+fPA/8N8Gf+P/x9PwH8BMCi8xzO5sy7ln674/hkgXEGcmYxb9jFyOZyxDmNmzXM7Iz1uufh/QucSvhWczDr2Ox79mNi7juqDjx8+ICb16/h/II8Zg6urdCukocekwt+NudifUnJlVtP3yHEyBh72maJPlAcrBacnl2w2fbMugW2Gjrfcnb/MZcXgZPbRyjruPelF3l0+goMgWbWcPu44fLxloRI2UNOzA+WNJNrEzLr80tikrXYaEZ6/+38+I//IKREHguKTCoyjEt1JA6FXKFQaLoG6wxOybDr4ekjonU0xvD2mw/4Hz93wQe//5+i6kzN4qgcwkgIgbZpWB0s0RRee/NNUirUqrnz/NN84TO/zf033+CFp47laWoUpErJFYySGxRNDhHnHVVNsmwzKSbztMacREY1l29UDNPswRpDjmnq6UV4ZbUilQl3nzLWaEpNOKUmZ6W0OWhNLpmmayipYJQcGKYIaatMHoicBaAs5bp83ozVk05E1rmyVSk4107cB41VSlyk1mK8E9t9zsQxUK2U90ZbabdKFZRCLThnnsw2ypT8JVXMtDmpsrFBa4wS/EGJiWo1lIx1VtikE8lcT5VPKBVfZTuTMtPAVjYvRUsraXFPQDjWKkJBWhucVBS5SGjT7/bG/BbX76qyUEo55KD4+VrrLwLUWh/UWnMVKujPIK0GwF3gzjd9+zPTa7/jqrX+dK31+2qt3zdrHN3JIRfDwKgFsW9qYXU4Zx8LR8sVBzeX3HzuFo6CdnB06xB30JBrRRvF5nzD5eMtISTeeOsBjx5tsK5hjJXtbstibilxwGSmiXzkwcN7ZA3LwyPifodOI2YcabtKu1hy+qjHW89yeUgySohY/Za4ecRTJx4zjGwevMqju58jrSPNsmHRFh48uuQ89AxxZNvvsM5iUqLu98TtnvXZGl8twSROL3t+9TfW/OBHP0BKiZFCLSPeL3HOUaNhisbkCgBrnEV7S8ojjx49pKKxOvHFl9/gv/07n+cjH/0eclBUbdFe0zrN8fExx9eusTg4YLddc+/0grmf0fgG2zjOHz7ija+9yu3rx1ijaIyZpv8CJ85ZhpHyoVFPkIJPUsCqfJhMhVzFdp5jkd1/mlLFrj5PRWGqwZhpNVBEn2G0xmmHQeOUksNi4lQoK8tDZyw1Z6zVOOPxrhFA8sSgNMYw6zpAOBbee6y1srmYKg/v3PT/UiFnyS4pZYLegPceb+yk0ZCNiHWWMnEsVS7TFmuC9ViFsVqGiVN7CDIYrrUSQnrSCl1VNqVW6lR51CSy728OSRKeqsM6800EMDmkxJ4u9ZDSYL2ZeB2TpL7KADVHcdSqovDm9wF+o+TT8LPAS7XWv/xNr9+e5hkAHwO+OP35bwP/k1LqLyMDzm8DPv2t/g1tNEvf0d1wxBhxRtF6h3eebuEYhj2ttazvndLahpsf+ih3P/9bPHVtxYOSebzesU6KLQqTHIfHLfOZlozQ9RnXrh2zvtyzOjJszteEhWe5XHHj+k2SlcHbUCxhv2N7sQFnufnMbXw3Y3d2RkkJSuZ0fZ/5wRHLw0M2j9c8eHiPxbEl+4bVwuL9Gm8Nl8NI27agFceHc1SG7XoEKtVonBLDz/2Hkbt7x7/3Z/916igTcass2ULNvazliNQIyhg8woqwztE2mnfeGTDNihJ7vvjyXf7GJ1/l+Q98B3mIWGcwOXOwOiCXjFcVUwvr3Z59L8q/bRhpu4ZriwP+/q/+PVqvsV6Auigt+85JvCSQ3QA5YrTsC0uZTgjkCauVJpLJOdHYBmf1FDKcqSnRtM0USzBxOutVFigYVTFeS+WlkLbGKHIutE0jm4/p0VatxVmLVZqYo6wOlbw3imlNWhUpBYy1oGRGoqb1a0xJ1rhVuKHaGJSVxDFbNaRKqpL/QhXaVRkTqhb5mVCUmrFyVkCqxJLBavLUoikNtorj1TkPFMzUkhUFWVVslbhBcd9Km6C1ZL4qpVAxErMCpamkaREgug85oyupaEpKMtuyFlMlKsBaAxRSKhSjfkd62+/1+t0cN38Y+DHgRaXUb0+v/RfAjyqlPogcr68D/xZArfVLSqn/Gfgyskn5s99qEwJSatcqH5KukyGidQ3dvGNYbxjDQG0Pmd+4xng58MV/8Pep2tDONM3BCUezzO1O6Eaxj4RYODvf4Ts4uXYT52QQuh8iJycnFBXYhR27IaBLogLnmws639I0HYuTG5w+PuWdu28xZ8b68SmLgwXNvCONW7725Ze58fR1tI/Ebc+Nk45+27Pfa8yi49phS58TQy7shwIxoX0VYVHWZAuf+fwl/+l/8mPEAUkyywpKpiSZSRQlT69aQTtB5Oeq6DpHvz3n3qM9VSuMrfz6p77KS+WIH/kT/wp+vmDYrCm2ZxwT5+fnKKVp5jPW+z2ubTiwc8zBjJX1fPELn2d9cckHv+tZZj5DUqQxM8RAHQO1QsmVxrSEGrGLBfsQmTUGj57mAgKpKdPT0zczEoX5YkEKgZiraFGGQW6cKwhtFmNUrVU8E6VItrCZTGOlYNykdfimnrvVMuTMRmTMXmtwhpoymSoaDWPw3kvVYGQIqKxYua+Gj8XUJ1L0VMqkFK1gZedpjP1GtmguGGOfqFq1UiQjkN86sS1UZZovyNBTWQMpyUDUKMYU8VYcu047jJt8IkGiJrQxhJCmm7KQS8G6dlKjOnJKqKrQShiroRRsCaDE4KdUAaupRaoZZ74BBVL6G5Xd7/X63WxDfh3+b1uej3+L7/mLwF/83f4QWimWi46cK61pUK1DEdGhp6+J2eKY1lrGMeFXM47mLaUGnDFsxxFVMnULpmtQXqPqQLdomHeag7Yh42QlpyvDfuT08X2Wh3OuXb8pYpoIfnbIvt9wcHzIV7/4BazWLEzD6/fuQYCn37fEWEO/j/iFZ/34IXMz4+aNxH6XyXHEVtifX5KUISmFMR6vDVFHfDNH1cz+9JKPf3HkX/3j/yxxFPuyyAXrFENnKCGSigQDUySNzXpDo0CR6HcRpRtKHPiVf/gZ/uFLp/zQv/zdjNuelAfW5ztpCZyRA65kMTEpg6mKdtUybywvfvFLuOUcSuGF68ccn2i228j6fE+fG8IoH86SC+txwGtHLJoxgy+VjBLStNbUGCEXsbBPOLv1Zi030FR2y/zhisBdsI2TJ16tckAi74GdPCeirJ7kziKxJIdI1UYGgylKfy6qKFJMWOeeQHB0hVSTmOu8FR1ErWLAKhVlLLVUSZmrV4Bb+ZoUE9Za0WAgrZO1VvQRxkxDCXF/FhCRGIDOklQ/cVGvODwKpMqqRdaw0+pUAV3bcoXsv0Lx1Wl9WiefTc1JBpWIWI0p+lScvMIfLSWjJ56HjGoKqIrXlt+RQP97vN4Tcu+QK7/1lbe5PgN0oqme9334+5kf3mL36qdRVdG0FqOtrMJMQRVN1Q4dR2osdAcLrFbMrUV3DWkeGFNg1rQoLXP12eKYe2fnuMWSYcg8fPiIMEIslWvHKwqWh28/xK9mLGcLWt9wuOoIJOam4+23X+Py4oKm9RwsO7ze8dbbPRpouo4xR7SuNM4ydxLB1zhFd3iNt9455RMv3qW5/jx/6T/8YapJpCLbAjVUtAOjHcPQo5XB+ZZxt8dbR9N5nKlcnJ0zhEQ0mrK75D/7uV/ne/7Qh/iT/8YfozGGZjbj4d37zFeipqxREsOvHR6zvjzHGEcumpwVp+c7DpYHWG8Z+h7VX3I0KJZh5NlrLe3qkPliKb11rQwUcoHtUGisRdmKMgJYySVQrZ0GK8KgtN4RcmbezQS6GyLWikPTO0/OBW/Nk/4+TsNIbc0kbQalr3QWkXEMIuBSwsMoTC2DQlKGlMZYRZ60C2mKE1BA03i0VoxJDg4zpXXpLFuIUsWUlZJsJ7RS1MmqWbJshpwRa7jX4lWtBfGXVLlxqxb0fwxRDhglh1CusuFxVhykzjm5yZWewMeVmCMxpAncY8iA9y3EOG2hpDxwVjPESp4OoBIjSltx3KSBqjS5XAnG9IQ0zBhZ5rzr6z1xWBijmbeezfkp2/U5t67d5Ouf/hTL6zeIas+No5sMuxFyQamIa+dcXO5xVpEsUBQ1BarzlASqFoZhpFjNZYzM/ZzD6y14T7qfMSUQ88jFw57QrZi3c5QR6ElMledvP0PbzbDzOevNHqsjr37uM2wu11jtuH6g6TdrHm4D7awTEItWzGZzvLfYqtkOl2Q95zIrLs4GfvU37/O9P/D9/MgPvp8UDON+ACX+B5Ewi5ZAK43xjlQKTdvgnaVpNI/feUA2Dm3nmH7Dz/zvX+AjH/0jvP/OCSvfsM+Jhw8fMcaEb+ZYpchdwI2R7eVD7m8yt55/lhurQ87vv83FeQ+a6Wmm2cfIpgecJqwvyOOeJldK16K8Z4lB+ZZFM6L2XtK9FZQUBQRjpJSvakrBKpXlbE5RFVUq3tknG4Nay6R0rAJcnlSdIDdprZVcC03TTE9pNZGpypPeXmlNMWIgMyhSyrJKBUEMaCU3JiJpj0m2JEprsYd7J9uFaU0JRcxvCrR30xO+THkimpgTNWVmXYdWYqdHyYq4lozKAmFmqDTeU8QPJ7YCL4pLjeg8tNXEONI2LXXSllylwMNktyvC9QgpkZJsk4yzuCkrJE/Zr6VK8qp1bsqZFZs8SkRcpYoqtejfHwXnP/Ir5cqjV19jF0ZoLbpPlLBnXte88NyKR+cbtOlouo5c1qjNDqs0YehRKuNSJlXJnLC6sB/2NIuWxndobXjqzk3uv/omQ7rAmUgIlaoaCpHnDufUXBnPz2gax3x1iLaGpBWtthzMWl76rZe52F3Qzb1AbYYN/W7E2BlaadrGYlMmh5F+HEgloYrGNpDTyGY78H3/9Ef44T/yT9BvC7X0eGsnGpJIk8c8TvoFsFahhsJs0YiZaYyM2uFoUHrkp3/5E3zlYeBH//lncAouhkQ7sxwcHlHnEWsqp4/PuLwMzLoDdnrGd33vH+Db79zi/N47PCoipEIphv0eay2ro+s8+9wxlcT2/D5hHHn46B6L5ZJxHFkeHIj3Ixf8yVOUnLC1xVhHzZFak3AogHK1JakybGy8I5eMMcLGCCHQdhIPmXKlTE9h752YzKathp5IXXmK/nNoIXIroUJdWeKltRDWg4xNBI9XjRKITZbqsQKUQmus5H9ozTBK5GCqku1hlCaNUda0WZSwRimB01hhVHRdh9WakAvjGHHO4r0oNY13wgSJEd90aC3r2pqzqDtLgXwVEZCwKEIWPqmgAGX9bIxBaYdTwsYC4WyMdZw2S7JmvpqjxCxOWWulLdJKPkvVylC3xnevs3hPGMkOWl8/9r3P4xvLw+0eHQrf/x13mDs4fu7bCTeeY92PNLbh5a+8zDOtwTqNRjIvY85cGs8uJfbvnPI977/JbLkEYHexpubKHtBJs708Z7k0bDc9dgLSlgo3bt8EDa7x9H3Etx3337rL+uwhrg5cXxhSGDg/X7PJGqZyWdUBpy3GerQ1VK1k3x0rX3rlEZ98vee//g/+NdpFh80ZmzOjgRwDrpkxhJEYRmZOUHEaRS2J2XJO2O7ZbnpiUShbUPtLfurnP8n8qef48Pe8QCkd166/wDbu+N4f+MMoFbn/xhtcPHhMrCP7iz03bt6i6Tyvv/42Z48fU/pAeyz08xgT+92WWdtyzQSevX0owByt6QPcvnnE+vKU+axh1UlLUFKhqsQbr58SCnROcTDz3Hn2BjXLYPbTL76JMopPf/ku1hnpmY2EBvGkrOaJuCnnjHEWtKbRhjy1DyVKfkcthcZPmxQjbspaK0SJF7iqOtLEmTQonLbU6VGopjbBGJljPBEplUm/MYkur8A0Kcvf6xqHVwpdC8ME4ClV1pZKiWCsmklqnmS4S5EKBb7haxGTmNDADLItdtoTc6R6SwoR7xuM0cRhFH1HUZNiV7Y8V6BgrYQQlrOI2Kiioq1GrOhGT6FOUywDiPI0jYHffOPsH62R7Pfjms0ct55ZMCRFeXDBdz+/4vL8Ebu24+Irr9HsI0eLOf2QudXANg3YakXVpwReOleWmc7Mv+02vpFfumkcqxvX6UPg1p3vJGz2PHzti5RxLUMwI29+sYY+BjTQj4GEYtjuOTt9QGsj/bhjt6vsQ6TOZiyVfJ1Tilg8xluM9yJCKgVVGhoTYXaLv/rnfgBTJUeimkK0njrssWhSiOQoOPpilBigtMLbGbomNtst1VgqmdfeeJu//vEv8GBQfOy7v53u4DrUwtN3DslhhR8D292GN15+lZMbR5y9s8XOF1jtSENktTqAGnn48BH9ZmS9XePcJCEvBWWlJVAxU5wlJ3jj7QeE3R7fDpw1hqIMRWkY1lxsAouFZTVbUFTEWCtrSNSE4Jv0ANZIuE6KE4Jfktxyzri2keoAmU9UxRQoJE9RtBbBUoyT2WoKMqqiXgwIki6nJFWI4EKl7FZKqpLJFtq6Bj0dJqlEyiQ/l5mJHPAlS/q5muhVqlRCioLdQ1OVtCPaWbmB972EGysNKpOuBqeTfsJM7lmYHLfC/ZeKigLeShUwVRk5i1cGZI0LYnHX9Zv4mbXKKneqqq4EZeLa/YaOI2fJebmKUbRN967v0/fEYWG14mRxxIsvf5nn7iy53G1QtcOVzHd85JCZGjAm4drIcel5I8Dp/Q0LfwzXFyzmC1qtGccCYyWSCXVHk1tcqcy6OfH+69x/5202uw2tQfpIKjPTUReOfjvgtKHzDb/1yU/QdZqiQXWaZ44c29FB2VFTj28OaFYdRhkWrVQmF31Ba/FqHnj4uV96hb/0F36M8/OBZjnH5UzIiloj1chTY9jusa7BGk9VI7ZWI0msRQAAIABJREFU9FBgVlnvL8BYSizMW8tf/YXPcZECH/zIH0SNBfJIUrAfRh4/fMzq5BZ9iCwPl7z11quszwZeOD6gX2+4f3HK9evH5CLByCfXjrA6E8bMOvRsxpHjwxm1yKzHxowxnu2+l9AaHCFqbK2YJlFCobMW1zakyZ1ptAc3UooceKNSzLoVjU5QEjllQolY22CqQiuNm24m03mJFkRRtGgMYgjMW1kbGqcZUp5QAbKxyFUQgOKB8NRY0TYJj6IqtC5krSFJ7x9jorWi41HIAZxVYeEa8hjQ1TKmICKsAt5Z9iTa2UzQfsNALYrlcoahkFOeuKtGDhhj0OQnIjNqIYxR3r9pQ9GHSNs2Ml+g4lLBKUW20gaVUtG2Cp80ZZJ3dFX8I7EIYVxNnA+JWsh0viGUOClSM6laXJlgQcjWJeRMLO8uuhDeI4dFrYp33niDIyxlzBzeuMG3ve8OuiTKdkd2nt0GGmsZdMN4dsGdwzle9ezOzhmGDpYrVNNg5nMKmV1fCXmHMg0uD6T9hrb1tP4Io4WilYCQKmqb8Dlw75XXCOPAbKlpvaJtDHXInKWGWavJpSVV+TCMuy1KG7aXIlRquwXOwudfvuAjP/RD/Ln/8oOMe9AmYcLIOPXU1hj6kNjViO9acSWOPW3bYruGGiJnj84gG+ZLwyc++SL/w999mWeff4of/kPfyRAU+5roCoSx56Uvv8S1a9c4ffB1YtaTmMfQNi22admsHzFvHc88c4f7Dx6wWq04PzuHUrDO0Q8DBwcHhNzTD2CUBwX70EurpzVaJZR3bLYD5WJHZWC1WMIQSNaytY7TB+ccHy8oRmINdfUM+7fplSLXzLydCTfDaLSrT/QOdooqoGRCkac2VQKGh5yk0kJhUwHrsNaQixzQJWa8a0VbYUW2brz4M2qtsj5uDdTKzDUyS1Jl+j0onHakktGNKIFtM0OrTBwHcoU2Q9rviUYx6zw5Vva7npICKiuM9xIybQ01Z3LM4MRPU4qIzIz6BlTHGC0xjjEK4MYYgQ2VMrUnipSkxcpU9BgZbZGcV+2BzIQH4SpEKZWCNU5iCZQRTYZWT6Th+7FHa4sxzbu+T9+9rOv/h6vkTOwHinHUoPj2Z64znF+yuwzECW8eQ2RfKgfXb/LC7WPmDQxpR2cN+8s1hsTMKayKuDiiUiDUjG4EkWeo1JwYx4EhBPEijAmaGbXtePXVVxlipHgR7sy0QW0TuWtw2z0uK1bLhnZuiTZi2wZqwRRL1S1j2PHZL53y9d7zvmsdpRhCFfs32lDHIOo8raT1uPISxIg1mqa11LBnc/ZYcj1t5RO/9iJ/5eO/zWXZU0Lks7/xJc4fn9MoSRQ/PFhRa6JSefveJVlpijICbfWOOiQe3HuEbj2vvf412taiVaHf7ySaT4twaQwj1VkKmpgCJQu0xRiDcw7vDGUc6LdrAOazFqcrxVqK76huzjpl7p6dAQqVElYVGi+ipnnTYZXGT2AYPZmc1MRvyFPvf+WSrFUUiFYbWWnWKlVWzmLkqtIeYI0MO3PGqqt4QKFxt85jtGgjvLUygK3SJmjAa411FUUm5mHK+BAtQ+MbGbROsxGFooSIoWKdo+nmNG0rMyoDoUhKvPGOqywyY8yT2QZVNBZN0zxRLEkIeCGmKLMYmNgYUmWkSSlxFckow89pW6IEvnOVb8IkRL/SW2gtzlStNU3bcRWF8G6v90RlAYrrz9zm/c/dpi+VUCPNaoWxLehKVY7ltY7tes/l4z3nj96iJGjaI5rDhoNnbrE921PCQFY9rTcsOnEC5n6N157deoNrHCqMlNpjlWM5W/FbL36atN/x/g+8j7Ozc/R+w6gUdnlA9gMmSY/pOku/j4R9wJDpw8BitiS1hXJ5yXj4Xfzb//538+DxGqyhqZFRa/ox4KvHL2ek/QghMV8uUMA4jCxmHdrA/btvU52U6B2Bn/ulX+PvvnRfPB2HHef7DUu95NWXv86HPnzIRmU2e2FhrC/OJaW8rOgv9/hmhq49alzz7I3bjHlAKc/p6WMuzs7ZrHsOjw+nHE4RB43bgF5astJkO6O1le12R4qFUjIX68fkmOmdYjk/INXKyckNfK3EfsPd+/dRquNEK+6envPLv/EGH/3gC/hSaagyG9GKGmUmYFF4a8hJtgmhCDwmxiDbkyShTLbthHsxMTDVZNlurMcm8UDUrmOMUQRQSgjXRimcksMq70eyqcSYsY1nTBFTCr52lBppjaaUiHVK8PtZ1uCby3Ocb0WfoiTAWVyzMoy22kzKTi2W+yQzm6vKpmiR71slIi4Rd03W9gqWIspcJRvBmjPEhNNOZlUlo3JFWUWugVIVNidCiWht0dqJ3d5Y0a9oS973AvKphTFJBm7XzaeV9ru73hOHRamVOy88y8V2jfMt1s+pOVNrQbdzGuNZX+xRxhDiQDM7lCefFo7i2O/RJbE8mJFsRVkp7zGRWh01JvRiRuo36FqwTYtzLY8vLpjlHr1csn7nLgYYVeVodZ1aJKZvtuiIe0PYbGldi18e4NqGB2eXhDhw962BF9/O/Of/0Qe4uNgwdw0xFrT2kJLkRzjDMPQoZOhKFGXdfNYJBWsMWNtSsYxl4Gd+6ZN84qV7nNy6zqpt0UFDdeA9MWzZbs+Y+xvTUyyjnaUWw+Ozc5arJXffvItTmj61PLo8ZzwbWS2P2O9E2am9pW1bQgyTVLsy5EqrLHFuSMNINobZYkkMkUf3HmFVYuYty+UCjKSGqxxJecdYAw8vCx//7Ev8tV/5AsYrTOvQZdpoKoVkgkxp3ilN1YVGe4N1nrDtQSFYRa1Qk56AmsnTk9Y+uYEErJsQpejYDxIopAzWVOyTgWAi54huZQAomwLDrDFiw0+T0U2LbVxrzahk69EPPX45xxhDHDNWi2s1SGwQWFm96mmtmSe9hLEIsCaDLmKFz7UIK1QZdInkKugeozTFCF0rV5mDZKUoOUi41LSprFnyUXPJFOXQ1mO1tBxkiWwwVd4rMRhKrokzDrSRnJfy7n2n74k2pOtayjhw0W+p805YBgqSknbg8vQhxAFfMyfLhbgsURwfLWUYtBvYqJ7XH95juHdJO/3iAfJ6QwLy9oLGyQpt0S158427vPrK22QUumw5ODFkEm27wLnMctFxuFpSxkA3d+xjZb1bs92u2Wx33Lx5DWMcn3pH8R//5J+gxog1LRU/yZllVTbvOsqkDlTOUHUl1UCqoE0hhoHHj86JCmrOHLaK//Mr90jasmospIxyEtVnlMJ7x+npmWgDkqD0fdOKotQZxtDz1Ve/zrbf0nYLiiq0fkY/Duz7kYLmYDmfoLtMoF1JtzLWMPQ7lBWpeGctD+++jUKAvc28EXaC9SxWc8hZXL39wC9+4qvs+sS2AG2LqwpvrUicFYQsUJaqFKbxVHslrRYLtdUSB5hiRFAZFZ0KOosi01gnmwEnrUrRyHuJZJNaLzAbrZ1ECWgNOYqMPBWM9rRtJ47mVGmsh5xwztB1MzCGNCZM5ymtwzQepzRxN2KQIWUcI5aKVxpvDF7Jf0aJAa4xVqIMs8xkSqmEKN4QcZpmWb1aN3FP1eSW5QksCK2wjRMwjrr6vTgRlIlgHevsk0REq79B3LpCIQrwRuOVwWmHRoai7/Z6T1QWOWf2my03btxk8+CU837Ees9sNmen9jTec355zmZfMGvL3HpyHtk8fgSmQ1nHtdWCGHosmvtvfQ2jGrb7Pa5G2tUMMz8gecfm8pS3Xn2DkCOKzO1b11FKsQua1a0Fre9QaHb9fpJxa1SJzLtCLTLkOj3b8NO//BX+pR/+5/gLP/m+SRKtKASUKhLiizyJttstoJjNZtQkKsDjo2vE1PPowZnAUeYefXHBf/W//DqvPFhz6/oNDhYNBUvMgTJuMa4lhAAoxpLphx604fHpJbGIuWgxX+B9wwe+47uoqfCFF7/E6mhGv99w7cYt1K3bXF5eUuMI1fPg9G0WiznL5Zyw3oJvmGtLP0SGy8Rbm1PMco6KI0eHc8wEeLlx7Trkwr6/T9wlPvXluyRvsVlRiqOOI0k5Nvs91ns67yDlyTE7+RaUpY9RNhVjFIcnyKygSAUScsAZLYdFlRiBkjLWG1KSmYrRFaOsrKydJsT4hPGptBcKdmvQumJLFYZE0wpIaZJtxzhKa9A2lGHEUCkFRqdRzjGEQFWSsj4FG+K95OzWyoQThJAn2btzk6o0TvxQi5OMBIgC2MlkgSExQYC0RC90kzEtlky2sgeuRqOKRmszVYIZXSHXzDYGOt/IjZwq2UzhSlQ2IaC1zMRc8+4HnO+Jw8JYxerGMQ8fPib0A/PFDG00IQ/szzPb7SVUyRfNzjM4j9OKxje4ZobvLOH0EcTC4CSgKJhAXxMaQx/g2spyfu+Ms9NHtK2ltY5rzQxCYJsdJ9eWKC1MxViyrNBqIeUREwK0M3zr6PuRX/nsKT/+pz/GR7/jadb7XgZQU72Tc+Eq11K4kGKxrhNCrp3PqHEkDAHXekrKUBT/zn//f3AZChXNybGoSrWzaANDX0ij+FxKKew2a/p+z+LwSMRDXcu9t9/h6PCQoe/pdyNaJw6ODmmalmH/iAf3H3Dt5ITLzSX9vufg4AhtFU0rldDycEXRhhRGrGsYhh2mQu0D3ouEuDhD1y2pOZNSIO8jn3/1Li/e25FrwTcexoFSNFZVrPc463Ba40TOQBwC2ls0kqAWh4EUE1cqRWum1aATHYq2FTUhsUuaYDKIgtMoi1HCgrBak1JAocgpoItUSk3XkkqiJhHg1Vohx4lSpTDeobWiRiGBZYQzURQyiHYSQ6ieIPqkysgpE3JCFakg7ZR5IqtdLQIsJUNb0Z5oUhbeBaWCysQqHhKlxFWcEM9ITVP6mFaUWKhVYiJLKRgnq1RvLUkZvAc94QALky3fWVRVWJREKhrJIHm313visKhZLNGkgDcag8F2M4b9wKZq7GJFqRGPxrUOhoTtOrSzpN2GFBSzw2POHj+gDHu075h3HV23ZJhK0bdefZM0jJJCPvY0OHQLm6w4XHWMcaBOHw5VtdCtupawLTR+QYiZMuz4zMuP+Ik/88f5zj9wg/V2wGtNqqAM8hQoAnpJSUpPa+2UxFXomhbbai5PzyfJuUQWvPXam5yNYhR65uYNlsuF2K1TxiqHrpV939OPPQcHB2wfb7h97RhnLbM7t4jjyPHhilnXynr0YM768gxUJVR46qk75JwIIZBTYbvvOYyJWddIzz8MHF6/ydBf4FtP7AOb7ZqaIt5WFq3HGvDdnKODI2LYovLIa+9c8NnXN7SzhrQOVF2xppFhmisy3whxcqRXyf1UipKhUtFJo6qoHrWzYkqrFWOFrjXvuklpORkcEGp4ypKyrhUCpYmJEtOUnzo9WSfGpSlFIiYxxHQVSVipStM2rcB34zANKxONbyjTNiOXRBpkIKutZr5YcLFZC41rAs9oY3CT0euK4l2nKAAj5hsxqhUx2JlGjGgog/Vgqpa4yDHi0NjGiyaiVhya7MwklTeyJnVmajUsJUZa5yUXN0ZAoyZ2BhPHU3JfioCi3+X1njgscsqc3XvErJsx7HuKge35Y0xVuJUjhUrJos6LI+imQaXIuN2iZzOs9WzHyvL4WYYQiOMFw5CYzRtm/pj7b7yCNoqiNf2658bNJbvdHpMLbetIOZLiOFGdIq6ZMdMK5TXWt2Sl+KV/8Cp3PvBh/tSf/qNQCn0vQ6NUZcgUYhSjlFbEGKCK+7RMwJKjxZwcd1yeDkSgqMgXvvI6P/t3PsfFOnPr5jFP3zjB1kQc5AlpjSPXiG00zxzeZn1+waP791FdxzZkvDZiBkuF2WzOg4f3efrpm2y3G2ZtQ4iFpjUcHB/w1ZdeYbU6ZBwC1ntiGRn2ka7tcG1LVbKeLv3Ag/UWSuLkSHJcUorcuHVH/BZxhy6Rh48e8ktfuIf1sDAedMA6h7Piqbh2/QRtFNmIoCj3e7mJi8JPkNs43UiN79BGM8SEdgZvDNZaYhxJOcrB4Bp0Eh6ooVJTwVlNCkK3CjlT1SQZt/YJSDjEQqgSISBkPg3GCJQ3BcI40jpPToVUNbPGT9DhKroNq1FG5grjvheMgNIiyqJincZ3jbBQG8e4H8U1q2CoiZgkI3Y265j5FlXqlIGqpozUKods22BtIyl3WqHUFRHMUnKVGYRWWCRwqZRC51ohlSsZCEPFVaGn5yoJceSKN45q3r2t4z0x4LyS+p5dXhJqZbzcErYjh9duk0LAKkOjFcbAjRsnNPMFYy50ixWmXdCtDvAHMzCVw/kMO1vQHFxjs+k5uXGbdr6UVRuRg5OW9eUWMLS+wdYrbqPkKwg7Up5QvlliamDzeOSPfeyP8hMf+4MoXXGuYQwRGUvJJPuKHq2rDAy7tkVVaJyjcw0xbVifXxJqhgSNsvyVX/gMjzeVQOTZp26iaiFXRS5Swg8hoKgsXMfd19/knfv3KAq8tsw7ySENIXAwm7FazFku5lyen9OHwOnFJbtdz7gf6HxLSpnlcsn169epwHY70HUtGoeqlvXjx8yWh2yGAVUUOQQ6r6lVKqVGW2ys1L5nCBte/NpD5otGkrmq4nB1wjhW1vvMU9ev876nbxJDpigtpbh21Cq6ByqUlFBGi93aScxg24nL1ltLCiNOWTrf0vluYpeCcZbGWmFAKCWq1H4UEZTT4vrVCpWFZ5nTtFItCdPZCcILiYjSiVnrCHEg54BBaGBPiFaFScrvSDkxhEjTOJqmYda2WKR6GcMgQr/9Xlodp6ne4Ixl5lu88Wy2O2ItwgWFJ7MMqsZPK9BSI+oqb8QZombKS2EKNKoy30AoZQlRsSotTA9dKrOiUTkxDiOBQlCVqMoT38u7ud4TlYVShvnhCStjpf9qMjZqYlUsDm6hGZn5G5jFAdpZ5udn2PmCpCJmvGS7P8fM5litefTgHmPJ5Faj48hbX/573Fh4LtZ7RgPDJrI4Wk3UuJHV9eucXZyjSiHFjDEtrvW0B0u6rvA3Pp/5yT/1L+C1YRilYhhykMFcGCeLsUykc0mIrj9LsNDBQniUQ8/lLlJ0S86FX/74r/O//eYbDCVzcnTM8fHTbPf9ZEgqzGaOxlt2p2tOtz1DKqQgMYelwFgSKUXuPPc8Dx8+YtuPtKsVeUx0XcfceWJMLOYzDpcLPvsbv8n98zNZsRmYzWasDhasDq9xuJqhSua1L/02X33lES2BRec4eOYIUzPz1QmL1SHjeI5NiT5s+dm//TKxVRgUjZ/zwtO3mLcNh4s76BqoQ6HGnkzFonEKolIoK09tVQrdrGUMmUY7jHFUI5CXUoVDsVw07MeCqeLTsFrJarHIAVyUtCaNbdFWhF06J8iFMUsW6r5kjFK0zlECkhJfM7mK3N9WcWw2tqOqTKKScqGMk2jOTfmn1WDQVAsKIzGXMdJMUOPWz8AqrPGoUMlDkk2HkgwQpWHWtIzne+bHB6SUiCWKanTWQorEPM0rckVXhaHSak+qUhmUnClKfj49DU8lBa5M1HAkiWwuhsUD7wkxTq2uZKG82+s9cVhgNF0zZxh7WavFLLmgKlMJhBQo8Qwftmx2W9y8pZRKGQb261Nm7RJdex6vR4Zdz7WFJ+8z5JGDozlhH6jKUbXDt4maozgGE2zXW/IQ0cqgjIMc8N0Ndts1P/vzn+GnfurfJFyOFG0nfoMMP3OWvMpasuzAQ56CfjVZaZxriDkS+oHtdoTGUJOiyyN/65Ovo6zi+HDBnVsn5BQlkwI4OTmmqMI79x5wer59IltGK7r5TPr+lNgPPV4Z+r4npoHTd97BGUPWleP2mJlvaLxlfX7Jdhh56uZ1KIaxj5OSUfH87SPSPqD9AhN2ciDmxDOrIxQaP5uxPDikpIhKkV0/sFmPDEbT1kq2mvc/fZunT+b0YQ9oQijUEkTHWDKpVIqV99ZZO3EwMiGMKOdlKFcSTmva1gMOazXjpse3DqMtYT/itEfZzGgUcYiYxopkGkVWMhfJRbQG1nuyTiiy3PRTdRT2O6xV6M5PBtGKcjJfKjGLEVArCppQCr6xZK0IOaKnlrLWKrb0xtPOJNsjpYItihRkNSqMCYknbLwnG03YBUznMCSsg5Ll8zSOo1QHFUI/UnKVIaYVKXhCoQtEVfGNR1VFjhOezyliqrRNgwrSwqHAeke/HwTcWyoOQwz/uKxOYyKnAWs1yjjMfCVQ0qpYdAtiCuwuTxlCxvoOP46SGp4DJSeG3Y7xckscI4vWo5yiazxOe/a7gRQttnMYI1JhYyV6TlHYbS4lEcoaKIliGzZn7/CLn3iHH/wX/xmI8kuqCkIIMjkvIubJpUg4zRXq3ojox1nDvGnZrB/TDxnlHDUkVNjy0//rp5h5zfG1Y24dH6KVwjrHJoxQKw/v3aUfg0T4TSVpVeCsOA3zVc6FUrzx+muEfoe1ljFHMELF2vQjl+sznDkkl8LyeImuGq0TNSe6kxs8+9xT7GNldnDIKy99DtM2DNv1xOwQAMvBwSE6RsgSuKR6+LUX30J7kTjfOrnJ9UMPsXDYdlNIUCVppirGUJAWzxoHRaTp2ijatmOzD1itxVMxb8lV0r6E5m1JIZMQUE0/9ljtZW3YerIGpx0hDKhcaZ1hfJJHmNG5SAATU+iwrjQzaWecEXx+rpAnBaY2lpyqJJ4Z2WiMOWNQmFwJumAai8oFqiIMgTFeBUhrhhDJQdaUqSQZaLuOMCYyhdViTkiBXb+XeUeWxHutK6FkqhKRl5nS0NJkz1fTulSVRC4Fr53I3FPGVUVKhVwnqriSg6Q6TeMtdoSoMzEF/D8uq1Nq5vH9r0G16KppTBaKVIHtzJNzxE2rIe0c+zLijBWpsIKmizxzfJuuBfJAv45cDnva+YpudkDoEykNmBrJIf9f7Z17jGXZVd5/az/O495bVd09PdPMDCN7/MBAeJrIcRBBhCTENgoOUiQ7kfISAYmQCP5AEREKkChIsROCgkBBRFgCK4kNhhAHYglMHJwH2I6d8WMwHpqxxzPj6emZflbde885+7HyxzrVbhxPT8PMdDVWfVKpzj33Vp1V+97aZ++1vvV9uKZDxFSaXYyoVqPfxo5PPn6Rr/76v8g/+3MrxtH2gXhhnDLeRXOYqhmtxigsOeEQmnho7ye4kLi8f5GcoLiMV+HH3vIuPvCpC0QJnLn7JHWcOHfuScBamdsYGcfpGtsvdJG+2KrCJonKNE74EK2VejtydZpY7O5Z+/asWHXh4kUcs3CM82ynDVGV/YOrfPF997Czu8uq30XxXHzsLI899QRBJoTM3ffcSdcYlXp16hQLGZjKlloyH3/4Iu9+6BzBezrXEZYrXvmiM4ylksi4hEnp50LXNaa1MGVwgnmsW0a/VqVWyxM1IZo1Yt9QpFKnRM3Q9S2lmRulSkXUsVysSFroQ0NxjjLNWpQZlt3SEoBlRF1lqObGpRjxKwZPyROhNTPk6JirLlY1oSqpNuSS6Bc9tUJKRude9B0eZT1N5FyI0aHYdhCtaDbdS5mp8+qExXJhPAinuAAyKVcP1mgFXMCHiJNK282KaETEmRp32ozXSrlFHEIlVeXQ77WOoyllqeKl0i0aVN3crG9VD6dKlkIyAVS0VsbtF0jXqXNwomtx1THlicyhv4MQpRKj4EnghCFv6HaX+G6Xvb27uPeL7obNBR75/U8ylIqn4puGst1aUsgJOlheRJmbuag0MVzbUqRtoVtU/tcDD/HgZ1q+7dta8lDMrzN2jNsNXiI5TbME2ry/NEYODlN7jtHTeLh0Yc2UIiECQ+Vgc473PXoZp4UTp08jarmNgpF5ihY09tQpIc6x8KYZGaNns16bvHyuuEMKsBfjbyx2aLsF+1evktRxeu8k24N9lrt7XF0P7OyeoT9xhstPX+D0F50hINx35xkuHhxw/sknuHzuLIsamDRx107PojMvjcXOHn0TcdOER7i4nvjfH/8MPkQaJwxu4lVfcj+pQmxBU50p0ZhAcE5MaaL1frYTtP4a5zylKP2iNT4LyjTbDMQCtU742Nl2lIBEU7v2zlNLIi4640AMEzUXhnEkKXShJTph7a2DWYOn7TokQ9u2sxyfWTI656xykEwHwnnIOtpNIydKNgtE5xxZEpvNPr5WJJj6dgimYJWmRC4TudpKJWvBR6GoUPNEUIHgqLPBj4RAFxqmcSA4meXvzBBGayWoidq4JpKZfVVV8SpUZ1TtII7cBGIMBExRLU1bvO9xWLNaLjNXRE3HInrPmKdrjM/ngttjsgAj9DjofAPOypAOU6TyIdLvnWb3xGlO3XU3/d4C3W7Jly7z8IMPcvXgAl56Qh/JdSK4QIiNEWFy5urBAXu7C2IbqFII7WFjj1KHwurUknf/z7Nswj38+I++1mbyrDRiScxry0LV2bszzO3Eee4uNKetEKDmie0Erq0MaUsuE29663txVHb3lkSXkBLm/bRpL3hx+LRlt7WtEOJIquZXcgg1xaUYHJPW+c13ND5yx4k7GKrDucju6bvY3z/gZV/xpbz83jNcvXKFu1cNjzz+BBKEj3/iIcbtlraH3jmSDjBO9N0CAPGebrWD1JGSt2w2Wy5dThz4hhAz1IYvue8eeg8TEyRFpnmSdsHsA7XgRI0MVTLdoqOmSkqW51lvNngfaPuG3gW2+/u0yw4vZvNHsfdtmBKL5YKSEtVBHiZ80+KYZfX7JW30CCY54GJk0fVULVy9ehXXRMZ1omsaXCr03ZIxZ1BHrZmCmSnFpmOTJvpFB1rmapinC45x2JCpRIWAmJpZMdo3s/lPTZkYbCKXtsEJNOIZphHRMGuKZrZjZtV2jOMW76OVcVVNNHgW69UQ6LxnGoY572M2krVWmpn7MY0jIUZ0VGLTolVxRa/lgcpczncz+StGZ2JAzxG3xWSRCzz8yAHOQ9cFdrvKog04yfQx0nY9rX+atD7HlQtneZJCHpUnCMd8AAAVsklEQVQ6wmaCKj01jYR1oJbEtAggDocxCXdWLV0T7Y5eCpILIa4Y0wEuev7Df/1dfuzN38364oinQVwxVatxIgZvqka1zDZ8AIpkR+tN3s/7iOoBl8/tU6WnaRpKucL3/qt3cvlKQT28+M5dBMU78BRcsN5LwERZ1RzNg1eoxhswb1Arz5okvpt1ICp33XWGu+65m6iO3eUeVUcjIa12efrT52GnIYQFFz7zMJcOLvPU+ScZh4FhGllFxZ+7gA4jd9y1x4nTp/De0yyWnDx5J2z3KTVzYf8KD/zeZT74yFX6RhhHZXHnghfvLZhKwWdTdhpLou9bfGsScaYbWfFOaPsFKSXWmwN87FHnaaK3EmX2xBAJq5Upac1JxzzNqlKSGIYNTdMi1VGLMu1fxXlHbCOTqzBZcnpSbBtT6/wPn1ktVrOsvy3B02h5oVStMSw2zhLGQONNNtF7cx7TYnkPV4RcHM3ewpLNYpN4mhIaGsRZxUecCfJIzrR9Zz09pZr2hoAvQmhMD9OHZs5xBTpv+ihVzL9kc/UAnZW/+66lVjNXbhursvWtedKKs6Slp8FHsyJQwdzS8qG6+khJpqXRLbvn/H96W0wWqtDESozKog10saWPnuADoa/4aLRcP5vlikSQEQ2V1gfKuqBRkOhwoUVmxSsRzOau8YgTfBPQzciYlaQHoJm3/tpDfMu3fhNXr4ymA5lHKqar2PQtKU2zpdzswYnxQtBsqx8vSJjYf2pibAJOM+oSH/3Qo1w4yMb9WCypKeO8kApmoqPOdBwwv4w8y8a5YmKrzKrNhwPkoqNUc7JCoQwjUYwXshk3nD59Bm0Cab1msQqMT17itx/8PdOTTJMZE6P0fUOb99nZWSL9gt1FQ+sF7wInTtwBqqgvlHHNQ4/s86GHL87yb8Jqb48vu//FjNMBzge8ac8SvGMcB2IQQgDJs5DLlCgp0bYdfdeR1ZbIKdd5KV5x3vw/ulVvWg5TmsVjoIkNKRXSlC1f4wIOZzmFsdB3nqpimUo1mcSUM45K0wTKkEglG228CKGxxqxpmnACnbdEIOLRabKu5mx5FlPWHphKJcSGzeUrdE3DiAkL94uezTiCYKVZVbQkmtBQkpVsAXBWrXAmvM0053HEWWI0ZzOrVgFiY9shsc9brXZthxK8kqs10tVZqbwGh6SMU0ceJutdcYKUwrTNxHlovHfXeCrPBbfFZCFO6BYdXo0mm2smO1NJbuISd7jUD46m7RnSQNv2iDhqgeVew3CwRosgrkfrhG9bSs7UZMrQNMqyW7I/TrTO8b6PnOOjj1V+8t98H9uDCa1CEHOuKlJRKuN2S5kK6sxRqx7SjJ1VJ2L0DMOGKxczEgLtWMiu8Pf+ydu4WpRFbNjZW6B1ZMhArrOYaiRRQCtxzmJHsRWDn1vGGx8Y8njNiEZQwmyEMZbKuSefpFm2UB2rnQWPfvqTrNcbNEAXVqb4JMJ6s2Fvp2eZI/5gpCsTMhwwJOFF95xE1FPVc+bu+0AzIa8Z1wecv7LhPZ94koLD1ZE/9bKX8hUvupv1lYvU5YqaMhIKbVZC6EjTZPoMPprUXhMpU0IQhq31z8Tg6KOynqB4j+bKmDcmtX91n52dHZBAkdE8YlToO7sjeu8oZSQVJc0T6jjYNlC8xzOZLQHzHdYH6/YUR79cGkfGB3Iu+K4HURJ8lsPgZlp0CEwpkXWiFY+PZog0qSJNIA+WhKVOdE1DaMwOIA95NvoxZVCHJ3jBu4hik6SIs74NnDnBp4m2bahuNljaDPjY4AWTWnRWuUtENltTYa/TLFJcwRdrbJuGwSYQoOkbqjhKqVhqxAoDni+QbchhN5+5Jrk5MzxrMk4ZjaBE8AH1wl530lSNNLN1k0nOuxYXnDlO10jbBq6sR/yqISIEX5Bmj67b8vZf+xh174v40R/+dhg3s5aEUupwrdmpa6KJw4aZSluqOVV7aEIHXim+sL+e0NAwlTUndpb8yi/9FvtFUAq7yx6mRPSBibkDUdS0B2ahlkOz43joIj63Z4u3piRFZzUso0h7L3hV9lYLpFbW48jVy5eITcAtHCfajtVOQ8nKhYuXqOM+W50QCr0c0LnIAZX7T52yfywvnLrjLnyd8DmDTuxvM7/+gYeoCOoqU1bO3LXHE+efIuJw3mwPJCg1JXydvTKoTFSWi440JYbgUXE0s3t5LYWqpuIkat2g1IJXz+SDSfmJw0lgHAuxsaayaRrwjWOTJ/puRXCO9XrDwkdETcW6pMl6Lty8LXSBMo3keWuy2ltR8mT6nkOiXSwoJXMwHNB2HWawqdRq3chalNxGUiposfb5YbOl7RezxUGAAAfbrW1pfIuimP+iJVF1rqA5B8M0EFzHVCYzouo70rimZmWYRhaLJdKa67x4SFpp1FPGkZpMxTslJbZCLnZjcV6ok7FCq/c4YD1sCeLxZnqKEFgue9wXiiMZirlGz1ZxzKImqcDu0t7U0HT2BohjdIpfLIzTsD1AdURWJtMem4Y6bMEtiG2BlAgxILoEDjj32NOcue9L+M6/8+fRAhMnqPnAloYyu3Q3ptikpRLb5tqyLwRvCkkxE9WxXq9RH3B5A2Xk597+Hn75t88hrrJoTa7OYx4Rfrauk0PNAXE4b/kI5sYi8cE+cKXYdmCmkzsRU1Kqds6JsH/lgFOn9tjbWaB7u6yvXCJvE0/tD+T9jtwK01iJq5MMVWmvfoZmrv/feWpF0zeIOPrFiuVyQR0OyGQqmQ8/9Gk+c7niI2T1nDl9iv31ht1+QeuF7bDFt5GSBhOVKVYVEnUmLjtNs+akSRSWah3DsWvJJbNc9mwPNsbWTcUmjL6FuffDKozumg6EkwAFlrFnONjivad30Xw9S523GQXvrXvTNY1t69Sc1GWmhTt1FBFi35qMYfYkl1n0HeNQmZKNuxRbBUiuqDiyV5rQEb1H1FzYQmfbiC4uGKeJUjOqphYvCKUIBY/Uaq5g3lHSRBuj6ZC6iHcd43rLctUzjcO8ojAKfVVjlDosRyKYvH8Zrc1A1FokNmWy8vSs4bEMjXnIhsB63JpOSFbSje2Gbwq3xWRRVcn2/4ICTdvSLRti6+n3Vsa0Wyxoug5FCF6MKKWKsItvEmUaLc8QW2rJdG2l1EjysGqE7/8Xv8Xq3nv4R9/5rXzTyqFJSeLpmsI2Q+MD0zSRSialySztm5Y0k6VcUNo2IsDTF58m6C6Tq+TqaRD++g/9Cs5PqG84uWxxao1SqVZCjYhWPEoTAmMBSqbDf9YLAigYKUe0Wnk2WDOR3clmZ20gi7IZttx1/yso05YTd5zgkYcfxeVMd2JFWl8mDBdZnWqoNfPYpx8l1UKq0HvHHaslXjx7996LU0/ZrnHlgIPNyPnzl3n/YwdIFELf8PVf+WU0Q8JRiOMIFGMrjlscmbFkqoM9EeLszrXZP6AyO77PWqMuepyYZGQh0+40aBFyM7uCjUaRVsBJpfHmYJZLoVn01KxMVen3TIBnPRZEKiIF3wZC7Ky9fRbToVSid4ylmoaFColE9JG+aSlJCfNksz24wpTNBT74iHQN45TRYMK3ixBNZzMEmmr5oyFn3GCdxNZfY0K5pShaM1UTwSnDdgQt7O7tUKQimPRenkayFNpFRwL6fkXOiTQnelNKSLdinCpZHKkWll1Pg3UJh8Z8V5c7Jzm4chW8Y8qZSZXYN4xTYrFcgnfUksnPg3/hs04WItIB7wXa+fXvUNUfFpH7gbcBdwAfBP6mqk4i0gI/D3wdcAF4g6p+6kbXcE5YLBu66GkixEbN/0EdWmWuQojtBb1DgyOpcSecgyhWYoK5eSgEtG1w08j7/vtZPv5o4u9+z1/hVS+9n7FM1NFTnRJzYTNTglMyFlxKybQffSBNk+UVfDAPzjArG/kFkieKOsrVp3jzL76XSKVmoW+MvSgIznvzjVDFO8GsMQ81G2ezYDEPTMFINsyrh4Ki2X5XxZSmbKEx373GgfTUozBmDi48Qb7yFG0bcBcie76yv12jJ1sef/ScuZsDDcrpU7vmxuU9i+jJKVF0YhwnNlcyv/7AY+YRGj2veMmLWEVhq0rvG4bNFh8cYxrNJyRNhCB0sTW5FVW2m425cYV4zUAozJoONReCgkyZpIXgIjpNloSLrZWlRUArpSRbYDkYx61NmDhEwiH1EikF52fDYj10c4uUKVuSejYhdmL0fI8ZLGvJlKxMeX5cTfLOEoQOHzwVYZvT3OwFbeNRhDSakldsGmqpTNOcK/AyN6hZjiulhBPHzs7SGJvKLPVvsaRUiIvGboRaGYcBDabBUWtFmkiyPwjJmUXfEGI0qcYQjUwmsNm/QgieaSaF9eJwKnTRkzAbRNDnJWdxM1SNEfhmVf1q4GuA14jIq4E3AT+uqi8DLgHfMb/+O4BL8/kfn193Q4gIXeMJ0TbyOStg3AXNhZrNL9IHT9t2tH4B1SzlUhpJ04SPLVkrQ8mcXBbk8hO8+798iM+El/Od//ANvPTOOxmKotUh0SYV6W1VUKptMcZxoNZC27YmoKJK2za0oSE25tx96coVE5YFoku8+WffzQfPXiFRiI2Vvyo6O1EZGekwMS7eiDJOK5Rici+zNZ9TRWqhlPzZXAb2RiNGTldnitNFhP1pQ1o/St6ep4sj93SBU4uWaX+fg4tXWS2XPPHIY+RhJJUJ1cwdp/eIOlCcsnf6FAwjPm2ARBlH3vX+s5wfjNuhNfBV991HHTPL4EljooyZPCZECzVPRBdoQgNV2exfnc1sGpqmpWmaa2MZQmComfWwZdhuKSnjEUQr3aK1HoztSBATiUmlMOaEcxFjuHqbINwsTKNKbBrbMlSYtgNe3ew3koyvMfuLaK1M24HGB2T+XI1qRDBcIBclTXbDOJTNUGCaRvJ2NJm/4Igi+FJoZ+f3UjLBm5QdCuoqWUeSJgoCLhCDkc907kpeLK2xMCVrBCw5EwRcVmo2QR6junuyYpJ8uRB8oMGRx4lhTmQOOePajti19Muepuvo247aR9wyIr1Hy2Rb37li81zxrCsLtUL/wfwwzl8KfDPwN+bzPwf8CPBvgdfPxwDvAH5SRERv4JN4eC+t1aPOE8RotKHL+FaJIdqdJHjSMKBuwscGIVh9O438j199gLOXHaszJ3jda76O9mTmtW/4SqoL6JRJpZDGkeBNZEU1wzjTiUVYb9ezhqMwbAY8ldh4QtMQauGpC5epOJwLpJq58PR53vSW3+RTlw4oFXZ2egJz34hadptqqtalWpFUK6jz4D2CLauDN6NeN9PPcdZx6BFGmfMURfFOKWATpMDFy2uWixNsc+b8+QuoKDsq14RaDy7tM27XaFEomfvuPTPzPAJnvvgluLKhjmt0SuRt5ife+SC19zTesVzs8eqvfTmXn34SqYVhY9Wi7K1a48qsqt31iDNFq9ViQdoOeO+ZivU1tE1jq7WaWTQdU1VSnswZHM+QMnnKtD4SohDbgFKJxWT0U5lomsbYscsluVovkCCEWilU40x4sxhYb7f4JhBjoQ0eweN9RbEkdb9akoYJLRNDTjhvXBbxHnEeX2GcBkLT4r1ntVoyaUKHDesm0MWGcZzo2kget/jYWpt8qZAdqmZp6XA0TYvWTAiehGPYbpm222su6mihm7UqQtfgg8O3LfsHgzX3FfNNPRQOmsaCOm/2A+JYNS0pDThxJrFYzSpAUabR9DzjcmUarU0gD9MfcWr4/3FTXqci4rGtxsuAnwL+JfA78+oBEbkPeJeqfoWIfAx4jao+Nj/3B8CfUdWnP+d3fhfwXfPDV2Bblj/0miPGaY7juRFut3jg9ovpdovnFaq688f94ZtKcKpqAb5GRE4A/wn40j/uBa/7nT8D/MzhYxH5P8/FtPX5xnE8N8btFg/cfjHdjvE8l5//I7WXqOpl4D3AnwVOiMjhZPPFwOPz8ePAfXNwAdjDVg3HOMYx/gTjWScLEblzXlEgIj3wl4CPY5PGX5tf9reB/zwfv3N+zPz8f7tRvuIYxzjGnwzczDbkbuDn5ryFA35BVX9VRH4XeJuI/HPg/wI/O7/+Z4G3ishZ4CLwxpuM5Wee/SW3FMfx3Bi3Wzxw+8X0BRXPTSU4j3GMYxzjtlD3PsYxjnH748gnCxF5jYh8QkTOisgPHFEMnxKRj4rIA4cZYxE5JSK/ISK/P38/+QLH8BYROT+Xng/Pfd4YxPAT85h9REReeYvi+REReXwepwdE5HXXPfeP53g+ISJ/+QWI5z4ReY+I/K6IPCgi3zufP5IxukE8RzJGItKJyPtF5MNzPP90Pn+/iLxvvu7bRaSZz7fz47Pz8y9+1ouYVsPRfGGedX8AvARogA8DX34EcXwKOP05594M/MB8/APAm17gGL4ReCXwsWeLAXgd8C6M3vNq4H23KJ4fAb7/87z2y+f3rgXun99T/zzHczfwyvl4B3hovu6RjNEN4jmSMZr/ztV8HIH3zX/3LwBvnM//NPDd8/HfB356Pn4j8PZnu8ZRryxeBZxV1YdVdcJ6TV5/xDEd4vUYM5X5+199IS+mqu/FEsI3E8PrgZ9Xw+9gZey7b0E8z4TXA29T1VFVPwmcxd7b5zOeJ1T1Q/PxPlaRu5cjGqMbxPNMeEHHaP47n4lp/Y75/OeOz+G4vQP4CyI31t476sniXuDR6x4/xo0H/IWCAr8uIh+cmaUAZ1T1ifn4HHDmCOJ6phiOctz+wbysf8t1W7NbGs+8ZP5a7O555GP0OfHAEY2RiHgReQA4D/wGtnq5rOas/LnXvBbP/PwVrCn0GXHUk8Xtgm9Q1VcCrwW+R0S+8fon1dZqR1o2uh1iwHp/Xoo1FD4B/NitDkBEVsAvAd+nqlevf+4oxujzxHNkY6SqRVW/BiNJvorngWl9PY56srjG9pxxPRP0lkFVH5+/n8fo7K8Cnjxcts7fz9/quG4Qw5GMm6o+OX8gK/Dv+Owy+pbEIyIR+8f896r6y/PpIxujzxfPUY/RHMMLwrQ+6sniA8DL54xtgyVa3nkrAxCRpYjsHB4D3wJ8jD/MRL2eoXor8UwxvBP4W3PG/9XAleuW4i8YPmfP/+3YOB3G88Y5w34/8HLg/c/ztQUj/H1cVf/1dU8dyRg9UzxHNUZyK5jWz2eG+I+ZxX0dlkn+A+AHj+D6L8Gy1B8GHjyMAdu//Sbw+8C7gVMvcBz/EVu2Jmxv+R3PFAOW+f6pecw+CvzpWxTPW+frfWT+sN193et/cI7nE8BrX4B4vgHbYnwEeGD+et1RjdEN4jmSMQK+CmNSfwSboH7ous/3+7GE6i8C7Xy+mx+fnZ9/ybNd45jBeYxjHOOmcNTbkGMc4xh/QnA8WRzjGMe4KRxPFsc4xjFuCseTxTGOcYybwvFkcYxjHOOmcDxZHOMYx7gpHE8WxzjGMW4Kx5PFMY5xjJvC/wMo0h6dGxF++AAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] diff --git a/PyTorch/Detection/SSD/main.py b/PyTorch/Detection/SSD/main.py index 0e4733d0..44d9de96 100644 --- a/PyTorch/Detection/SSD/main.py +++ b/PyTorch/Detection/SSD/main.py @@ -157,13 +157,12 @@ def train(train_loop_func, logger, args): if args.checkpoint is not None: if os.path.isfile(args.checkpoint): - load_checkpoint(ssd300, args.checkpoint) + load_checkpoint(ssd300.module if args.distributed else ssd300, args.checkpoint) checkpoint = torch.load(args.checkpoint, map_location=lambda storage, loc: storage.cuda(torch.cuda.current_device())) start_epoch = checkpoint['epoch'] iteration = checkpoint['iteration'] scheduler.load_state_dict(checkpoint['scheduler']) - ssd300.load_state_dict(checkpoint['model']) optimizer.load_state_dict(checkpoint['optimizer']) else: print('Provided checkpoint is not path to a file') diff --git a/PyTorch/Detection/SSD/src/coco_pipeline.py b/PyTorch/Detection/SSD/src/coco_pipeline.py index 82acae90..5b3b6389 100644 --- a/PyTorch/Detection/SSD/src/coco_pipeline.py +++ b/PyTorch/Detection/SSD/src/coco_pipeline.py @@ -43,7 +43,7 @@ class COCOPipeline(Pipeline): self.input = ops.COCOReader(file_root = file_root, annotations_file = annotations_file, shard_id = shard_id, num_shards = num_gpus, ratio=True, ltrb=True, random_shuffle=True, skip_empty=True) - self.decode = ops.HostDecoder(device = "cpu", output_type = types.RGB) + self.decode = ops.ImageDecoder(device = "cpu", output_type = types.RGB) # Augumentation techniques self.crop = ops.SSDRandomCrop(device="cpu", num_attempts=1) @@ -163,7 +163,7 @@ class DALICOCOIterator(object): for p in self._pipes: p._prefetch() for p in self._pipes: - outputs.append(p._share_outputs()) + outputs.append(p.share_outputs()) for i in range(self._num_gpus): dev_id = self._pipes[i].device_id out_images = [] @@ -237,8 +237,8 @@ class DALICOCOIterator(object): pyt_offsets[j] = torch.IntTensor(bbox_offsets[j]) for p in self._pipes: - p._release_outputs() - p._run() + p.release_outputs() + p.schedule_run() copy_db_index = self._current_data_batch # Change index for double buffering diff --git a/PyTorch/Detection/SSD/ssd/__pycache__/argparse.cpython-36.pyc b/PyTorch/Detection/SSD/ssd/__pycache__/argparse.cpython-36.pyc deleted file mode 100644 index e55b995c005738bfc6f6832fdf6495c4b7d731f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2001 zcmZuyOK%)S5T4oDU2oQ}#N=ThhQ<$IlZ+P#uY?fWv4e3)9E&AJvK2YKQ|;ZsGt)zN zkFi@IA;E=%{{a6WCw>Cl0SO^ab445?<-!#qLG`S6c0d`c+udK+S5;k)-piw-^~c|B zZvQi4S-)F_uY~JG9C8vTu)q$i(B86b3rgU8ZEcmH+_D;#M|f&A>~w5Nbdr!oYJ&>N zglAy$**NMrmT|~$ai>rfl#c8#tk11aY;d5gN>G6+3>{VM9#(@Bh}B`ZfQ`T?Vq^co z#^I!L;1o<8m5-TE!D&R!z}W)x989V*JPpqjuxC-~JWL_dXFiA8EqK0w5O@KlreOwV zVGdq|mpWB=85+5l7cw0e3ye$PqNRCg7A(C2ucF**aJhiJ4sW2fH{q=U_BLEW?p1iF zfL%kWci}oBeJ>X>pJrgLQ-Z~UFH3L(mSN?{IgZ0k+`m`Yuc8kYyq}-1!Ffb(!3W2h zD_>cd%-iew;zxq|5o!5RCt#%2<%--%0_ES}2V{jQ<|!@+kI3@f<-3^mVPMh|eyn^R z=~J%D4q_&JQwDBCL#9h^v^Caht?UdA^!Q*+j8MZ#%jz&@=@778ipJ7%mj$t|x-L*f zQ3vQs)8ii3voTd&qBv1ZDncV5%D9Wp5+h1>{eVe*!gT}QalseJ4N`mFsFI8UZl#_M zX_U|)I3$uOB2Wnramj$};??kaUbj&aWh_@w#YxxjRx$Uw64}fr4nk8=61Ew}VVCrd zdemcA^swuyu3)mu17lKkzFB(k$1l@AE@&bZj|V<8D$ot8$Uq#qzG8x!fC|$)`dq#@ z7nh0(MRo-b^@!_wUFPk@+>ex=>W3!ezydNj$%0~p***=DOmS*o@PGKtwtVZ;lI4@{ zaatU8EdRkaPG3HBEZrCw4NXiHkC-%`e%AH9ECa{dSfiX)A}Ttv7qUtoH&YF{MOP{o z>)8Q-7h&-e73y(JA4bMx)x|(C?YM#H{QdCHU+=Ux7W8QU5Oarzc(FEBUe}erHucti zL`>A?3Mo3EVT^aklEf&wpI^?TievGH$Th{nw;b64J)L9oWNDxJ0c~S5cwO#$>?+wt zk^8#tx*<1(o`gsYJ3s$qzQ+rCrVkU0O7!SfO|C9!FJlyH}A>gZVJuQ;UdFhQs#Ak ziO3|510RLjhrN!Q2VW}Tw-d!+KA=g2P3VZMnDS0+RE7CXN=GQbPCvG(gS^zi4oEAz z0jDah$L0sf2uOUOs@YCFw8UxT{&l6<#iTVA52@76kGa^BG4)t;eRFMPZK;Vbl^O0W zzTA`&ny4h>&&P*i0{O-lxrviy*PRi&X7@+kuH}1N+r2T?TjeJOX_TniwQ3C|%-=}| n8P&|jI=+XszTxb~8JziFn9iURY3&*&Gzr*s^HN9?oe}3>QS(Va From 41b55e7c8ab34e11cbb4e424dab4a80359b351e8 Mon Sep 17 00:00:00 2001 From: jconwayNV <35616408+jconwayNV@users.noreply.github.com> Date: Thu, 12 Sep 2019 10:09:05 -0700 Subject: [PATCH 06/44] Update main readme to focus on Tensor Cores --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b3324d7e..4ce56016 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# NVIDIA Deep Learning Examples for Volta Tensor Cores +# NVIDIA Deep Learning Examples for Tensor Cores ## Introduction This repository provides the latest deep learning example networks for training. These examples focus on achieving the best performance and convergence from NVIDIA Volta Tensor Cores. From 8b249efad6aa19479cd4d184354d787a8ed9546d Mon Sep 17 00:00:00 2001 From: Przemek Strzelczyk <41076710+nvpstr@users.noreply.github.com> Date: Fri, 13 Sep 2019 15:23:39 +0200 Subject: [PATCH 07/44] Minor fixes to BERT/PyT --- PyTorch/LanguageModeling/BERT/README.md | 3 +++ .../LanguageModeling/BERT/scripts/run_pretraining.sh | 10 +++++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/PyTorch/LanguageModeling/BERT/README.md b/PyTorch/LanguageModeling/BERT/README.md index 222eed06..318f2de2 100755 --- a/PyTorch/LanguageModeling/BERT/README.md +++ b/PyTorch/LanguageModeling/BERT/README.md @@ -567,6 +567,9 @@ Where: - `` - If set to `true`, performs allreduce only after the defined number of gradient accumulation steps. - `` - If set to `true`, performs allreduce after gradient accumulation steps in FP16. - `` - If set to `true`, accumulates/sums the gradients in FP16. + + Note: The above three options need to be set to false when running on fp32. + - `` is per-GPU batch size used for training in phase 2. Larger batch sizes run more efficiently, but require more memory. - `` is the base learning rate for training phase 2. - `` is the percentage of training steps used for warm-up at the start of training. diff --git a/PyTorch/LanguageModeling/BERT/scripts/run_pretraining.sh b/PyTorch/LanguageModeling/BERT/scripts/run_pretraining.sh index 5502e99b..a104e3ae 100644 --- a/PyTorch/LanguageModeling/BERT/scripts/run_pretraining.sh +++ b/PyTorch/LanguageModeling/BERT/scripts/run_pretraining.sh @@ -31,11 +31,11 @@ allreduce_post_accumulation=${14:-"true"} allreduce_post_accumulation_fp16=${15:-"true"} accumulate_into_fp16=${16:-"false"} -train_batch_size_phase2=${1:-4096} -learning_rate_phase2=${2:-"4e-3"} -warmup_proportion_phase2=${5:-"0.128"} -train_steps_phase2=${6:-1563} -gradient_accumulation_steps_phase2=${11:-512} +train_batch_size_phase2=${17:-4096} +learning_rate_phase2=${18:-"4e-3"} +warmup_proportion_phase2=${19:-"0.128"} +train_steps_phase2=${20:-1563} +gradient_accumulation_steps_phase2=${21:-512} DATASET=hdf5_lower_case_1_seq_len_128_max_pred_20_masked_lm_prob_0.15_random_seed_12345_dupe_factor_5/books_wiki_en_corpus # change this for other datasets DATA_DIR=$BERT_PREP_WORKING_DIR/${DATASET}/ From a98df279fe7af77a5bc8474777363829aab98b3b Mon Sep 17 00:00:00 2001 From: Przemek Strzelczyk Date: Fri, 13 Sep 2019 19:12:50 +0200 Subject: [PATCH 08/44] [BERT/TF] Added multi-node support --- .../LanguageModeling/BERT/.dockerignore | 20 +- TensorFlow/LanguageModeling/BERT/.gitignore | 7 +- TensorFlow/LanguageModeling/BERT/Dockerfile | 13 +- TensorFlow/LanguageModeling/BERT/README.md | 651 ++++++++++++------ .../LanguageModeling/BERT/configurations.yml | 218 ++++++ .../BERT/data/BooksDownloader.py | 26 + .../BERT/data/BookscorpusTextFormatting.py | 32 + .../LanguageModeling/BERT/data/Downloader.py | 120 ++++ .../BERT/data/GLUEDownloader.py | 109 +++ .../data/GooglePretrainedWeightDownloader.py | 158 +++++ .../data/NVIDIAPretrainedWeightDownloader.py | 27 + .../BERT/data/PubMedDownloader.py | 93 +++ .../BERT/data/PubMedTextFormatting.py | 44 ++ .../BERT/data/SquadDownloader.py | 54 ++ .../BERT/data/TextSharding.py | 331 +++++++++ .../BERT/data/WikiDownloader.py | 58 ++ .../BERT/data/WikicorpusTextFormatting.py | 46 ++ .../LanguageModeling/BERT/data/__init__.py | 12 + .../LanguageModeling/BERT/data/bertPrep.py | 389 +++++++++++ .../data/bookcorpus/clean_and_merge_text.py | 15 - .../BERT/data/bookcorpus/config.sh | 27 - .../data/bookcorpus/create_pseudo_test_set.py | 18 - .../data/bookcorpus/create_pseudo_test_set.sh | 10 - .../BERT/data/bookcorpus/preprocessing.sh | 23 - .../data/bookcorpus/preprocessing_test_set.sh | 28 - .../preprocessing_test_set_xargs_wrapper.sh | 12 - .../bookcorpus/preprocessing_xargs_wrapper.sh | 13 - .../BERT/data/bookcorpus/run_preprocessing.sh | 28 - .../bookcorpus/sentence_segmentation_nltk.py | 20 - .../data/bookcorpus/shard_text_input_file.py | 41 -- .../BERT/data/create_datasets_from_start.sh | 46 ++ .../BERT/data/glue/download_glue_data.py | 153 ---- .../download_models.py | 123 ---- .../BERT/data/squad/squad_download.sh | 60 -- .../BERT/data/wikipedia_corpus/config.sh | 28 - .../create_pseudo_test_set.py | 18 - .../create_pseudo_test_set.sh | 10 - .../data/wikipedia_corpus/preprocessing.sh | 23 - .../preprocessing_test_set.sh | 28 - .../preprocessing_test_set_xargs_wrapper.sh | 12 - .../preprocessing_xargs_wrapper.sh | 13 - .../wikipedia_corpus/remove_tags_and_clean.py | 30 - .../wikipedia_corpus/run_preprocessing.sh | 49 -- .../wikipedia_corpus/shard_text_input_file.py | 39 -- .../wiki_sentence_segmentation_nltk.py | 20 - .../wiki_sentence_segmentation_spacy.py | 22 - .../wiki_sentence_segmentation_spacy_pipe.py | 33 - .../LanguageModeling/BERT/optimization.py | 279 ++++++-- TensorFlow/LanguageModeling/BERT/run.sub | 73 ++ .../LanguageModeling/BERT/run_classifier.py | 59 +- .../LanguageModeling/BERT/run_pretraining.py | 195 ++++-- .../LanguageModeling/BERT/run_pretraining.sh | 19 - TensorFlow/LanguageModeling/BERT/run_squad.py | 14 +- .../BERT/run_squad_trtis_client.py | 13 + .../BERT/scripts/data_download.sh | 15 +- .../BERT/scripts/data_download_helper.sh | 17 - .../scripts/finetune_inference_benchmark.sh | 21 +- .../BERT/scripts/finetune_train_benchmark.sh | 34 +- .../LanguageModeling/BERT/scripts/run_glue.sh | 96 +-- .../BERT/scripts/run_glue_inference.sh | 78 +++ .../BERT/scripts/run_pretraining.sh | 102 --- .../BERT/scripts/run_pretraining_adam.sh | 111 +++ .../BERT/scripts/run_pretraining_lamb.sh | 60 ++ .../scripts/run_pretraining_lamb_phase1.sh | 103 +++ .../scripts/run_pretraining_lamb_phase2.sh | 115 ++++ .../BERT/scripts/run_squad.sh | 98 +-- .../BERT/scripts/run_squad_inference.sh | 54 +- .../BERT/scripts/trtis/export_model.sh | 20 +- .../BERT/scripts/trtis/generate_figures.sh | 19 +- .../BERT/scripts/trtis/run_client.sh | 19 +- .../BERT/scripts/trtis/run_perf_client.sh | 14 +- .../BERT/scripts/trtis/run_trtis.sh | 21 +- .../scripts/trtis/wait_for_trtis_server.sh | 13 + .../LanguageModeling/BERT/tokenization.py | 498 ++++++++------ .../BERT/utils/create_glue_data.py | 13 + .../BERT/utils/create_pretraining_data.py | 575 +++++++++------- .../BERT/utils/create_squad_data.py | 13 + .../LanguageModeling/BERT/utils/utils.py | 13 + 78 files changed, 4120 insertions(+), 2004 deletions(-) create mode 100644 TensorFlow/LanguageModeling/BERT/configurations.yml create mode 100644 TensorFlow/LanguageModeling/BERT/data/BooksDownloader.py create mode 100644 TensorFlow/LanguageModeling/BERT/data/BookscorpusTextFormatting.py create mode 100644 TensorFlow/LanguageModeling/BERT/data/Downloader.py create mode 100644 TensorFlow/LanguageModeling/BERT/data/GLUEDownloader.py create mode 100644 TensorFlow/LanguageModeling/BERT/data/GooglePretrainedWeightDownloader.py create mode 100644 TensorFlow/LanguageModeling/BERT/data/NVIDIAPretrainedWeightDownloader.py create mode 100644 TensorFlow/LanguageModeling/BERT/data/PubMedDownloader.py create mode 100644 TensorFlow/LanguageModeling/BERT/data/PubMedTextFormatting.py create mode 100644 TensorFlow/LanguageModeling/BERT/data/SquadDownloader.py create mode 100644 TensorFlow/LanguageModeling/BERT/data/TextSharding.py create mode 100644 TensorFlow/LanguageModeling/BERT/data/WikiDownloader.py create mode 100644 TensorFlow/LanguageModeling/BERT/data/WikicorpusTextFormatting.py create mode 100644 TensorFlow/LanguageModeling/BERT/data/__init__.py create mode 100644 TensorFlow/LanguageModeling/BERT/data/bertPrep.py delete mode 100644 TensorFlow/LanguageModeling/BERT/data/bookcorpus/clean_and_merge_text.py delete mode 100644 TensorFlow/LanguageModeling/BERT/data/bookcorpus/config.sh delete mode 100644 TensorFlow/LanguageModeling/BERT/data/bookcorpus/create_pseudo_test_set.py delete mode 100755 TensorFlow/LanguageModeling/BERT/data/bookcorpus/create_pseudo_test_set.sh delete mode 100755 TensorFlow/LanguageModeling/BERT/data/bookcorpus/preprocessing.sh delete mode 100755 TensorFlow/LanguageModeling/BERT/data/bookcorpus/preprocessing_test_set.sh delete mode 100755 TensorFlow/LanguageModeling/BERT/data/bookcorpus/preprocessing_test_set_xargs_wrapper.sh delete mode 100755 TensorFlow/LanguageModeling/BERT/data/bookcorpus/preprocessing_xargs_wrapper.sh delete mode 100755 TensorFlow/LanguageModeling/BERT/data/bookcorpus/run_preprocessing.sh delete mode 100644 TensorFlow/LanguageModeling/BERT/data/bookcorpus/sentence_segmentation_nltk.py delete mode 100644 TensorFlow/LanguageModeling/BERT/data/bookcorpus/shard_text_input_file.py create mode 100755 TensorFlow/LanguageModeling/BERT/data/create_datasets_from_start.sh delete mode 100644 TensorFlow/LanguageModeling/BERT/data/glue/download_glue_data.py delete mode 100644 TensorFlow/LanguageModeling/BERT/data/pretrained_models_google/download_models.py delete mode 100755 TensorFlow/LanguageModeling/BERT/data/squad/squad_download.sh delete mode 100644 TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/config.sh delete mode 100644 TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/create_pseudo_test_set.py delete mode 100755 TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/create_pseudo_test_set.sh delete mode 100755 TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/preprocessing.sh delete mode 100755 TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/preprocessing_test_set.sh delete mode 100755 TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/preprocessing_test_set_xargs_wrapper.sh delete mode 100755 TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/preprocessing_xargs_wrapper.sh delete mode 100644 TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/remove_tags_and_clean.py delete mode 100755 TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/run_preprocessing.sh delete mode 100644 TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/shard_text_input_file.py delete mode 100644 TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/wiki_sentence_segmentation_nltk.py delete mode 100644 TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/wiki_sentence_segmentation_spacy.py delete mode 100644 TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/wiki_sentence_segmentation_spacy_pipe.py create mode 100644 TensorFlow/LanguageModeling/BERT/run.sub delete mode 100755 TensorFlow/LanguageModeling/BERT/run_pretraining.sh delete mode 100755 TensorFlow/LanguageModeling/BERT/scripts/data_download_helper.sh create mode 100644 TensorFlow/LanguageModeling/BERT/scripts/run_glue_inference.sh delete mode 100755 TensorFlow/LanguageModeling/BERT/scripts/run_pretraining.sh create mode 100755 TensorFlow/LanguageModeling/BERT/scripts/run_pretraining_adam.sh create mode 100644 TensorFlow/LanguageModeling/BERT/scripts/run_pretraining_lamb.sh create mode 100755 TensorFlow/LanguageModeling/BERT/scripts/run_pretraining_lamb_phase1.sh create mode 100755 TensorFlow/LanguageModeling/BERT/scripts/run_pretraining_lamb_phase2.sh diff --git a/TensorFlow/LanguageModeling/BERT/.dockerignore b/TensorFlow/LanguageModeling/BERT/.dockerignore index cc912280..6e13e7db 100644 --- a/TensorFlow/LanguageModeling/BERT/.dockerignore +++ b/TensorFlow/LanguageModeling/BERT/.dockerignore @@ -1,6 +1,24 @@ +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + .idea/ .git/ __pycache__/ results/ -data/ +data/download +data/extracted +data/formatted_one_article_per_line +data/sharded +data/hdf5* +data/tfrecord* checkpoints/ diff --git a/TensorFlow/LanguageModeling/BERT/.gitignore b/TensorFlow/LanguageModeling/BERT/.gitignore index 28c67509..0185ce8e 100644 --- a/TensorFlow/LanguageModeling/BERT/.gitignore +++ b/TensorFlow/LanguageModeling/BERT/.gitignore @@ -9,7 +9,12 @@ __pycache__/ *.so #Data -data/*/*/ +data/download +data/extracted +data/formatted_one_article_per_line +data/sharded +data/hdf5* +data/tfrecord* data/*/*.zip #Resutls diff --git a/TensorFlow/LanguageModeling/BERT/Dockerfile b/TensorFlow/LanguageModeling/BERT/Dockerfile index dba047f6..046f6553 100644 --- a/TensorFlow/LanguageModeling/BERT/Dockerfile +++ b/TensorFlow/LanguageModeling/BERT/Dockerfile @@ -1,4 +1,4 @@ -ARG FROM_IMAGE_NAME=nvcr.io/nvidia/tensorflow:19.06-py3 +ARG FROM_IMAGE_NAME=nvcr.io/nvidia/tensorflow:19.08-py3 FROM tensorrtserver_client as trt @@ -12,16 +12,19 @@ WORKDIR /workspace RUN git clone https://github.com/openai/gradient-checkpointing.git RUN git clone https://github.com/attardi/wikiextractor.git RUN git clone https://github.com/soskek/bookcorpus.git +RUN git clone https://github.com/titipata/pubmed_parser -# Copy the perf_client over +RUN pip3 install /workspace/pubmed_parser + +#Copy the perf_client over COPY --from=trt /workspace/build/perf_client /workspace/build/perf_client -# Copy the python wheel and install with pip +#Copy the python wheel and install with pip COPY --from=trt /workspace/build/dist/dist/tensorrtserver*.whl /tmp/ RUN pip install /tmp/tensorrtserver*.whl && rm /tmp/tensorrtserver*.whl - WORKDIR /workspace/bert COPY . . -ENV PYTHONPATH=/workspace/bert +ENV PYTHONPATH /workspace/bert +ENV BERT_PREP_WORKING_DIR /workspace/bert/data diff --git a/TensorFlow/LanguageModeling/BERT/README.md b/TensorFlow/LanguageModeling/BERT/README.md index 06bfd93d..8264926b 100644 --- a/TensorFlow/LanguageModeling/BERT/README.md +++ b/TensorFlow/LanguageModeling/BERT/README.md @@ -1,21 +1,21 @@ # BERT For TensorFlow -This repository provides a script and recipe to train BERT to achieve state of the art accuracy and is tested and maintained by NVIDIA. +This repository provides a script and recipe to train the BERT model for TensorFlow to achieve state-of-the-art accuracy, and is tested and maintained by NVIDIA. +## Table Of Contents -## Table Of Contents: -* [Model overview](#model-overview) +- [Model overview](#model-overview) * [Model architecture](#model-architecture) * [Default configuration](#default-configuration) * [Feature support matrix](#feature-support-matrix) * [Features](#features) - * [Mixed Precision training](#mixed-precision-training) - * [Enabling Mixed Precision](#enabling-mixed-precision) - * [Glossary](#glossary) -* [Setup](#setup) + * [Mixed precision training](#mixed-precision-training) + * [Enabling mixed precision](#enabling-mixed-precision) + * [Glossary](#glossary) +- [Setup](#setup) * [Requirements](#requirements) -* [Quick Start Guide](#quick-start-guide) -* [Advanced](#advanced) +- [Quick Start Guide](#quick-start-guide) +- [Advanced](#advanced) * [Scripts and sample code](#scripts-and-sample-code) * [Parameters](#parameters) * [Command-line options](#command-line-options) @@ -25,54 +25,76 @@ This repository provides a script and recipe to train BERT to achieve state of t * [Training process](#training-process) * [Pre-training](#pre-training) * [Fine tuning](#fine-tuning) + * [Multi-node](#multi-node) * [Inference process](#inference-process) * [Deploying the BERT model using TensorRT Inference Server](#deploying-the-bert-model-using-tensorrt-inference-server) * [Performance analysis for TensorRT Inference Server](#performance-analysis-for-tensorrt-inference-server) * [Advanced Details](#advanced-details) * [Running the TensorRT Inference Server and client](#running-the-tensorrt-inference-server-and-client) -* [Performance](#performance) +- [Performance](#performance) * [Benchmarking](#benchmarking) * [Training performance benchmark](#training-performance-benchmark) * [Inference performance benchmark](#inference-performance-benchmark) * [Results](#results) * [Training accuracy results](#training-accuracy-results) - * [Training accuracy: NVIDIA DGX-1 (8x V100 32G)](#training-accuracy-nvidia-dgx-1-(8x-v100-32G)) + * [Pre-training accuracy: single-node](#pre-training-accuracy-single-node) + * [Pre-training accuracy: multi-node](#pre-training-accuracy-multi-node) + * [Fine-tuning accuracy for SQuAD: NVIDIA DGX-2 (16x V100 32G)](#fine-tuning-accuracy-for-squad-nvidia-dgx-2-16x-v100-32g) * [Training stability test](#training-stability-test) + * [Pre-training SQuAD stability test: NVIDIA DGX-2 (512x V100 32G)](#fine-tuning-squad-stability-test-nvidia-dgx-2-512x-v100-32g) + * [Fine-tuning SQuAD stability test: NVIDIA DGX-2 (16x V100 32G)](#fine-tuning-squad-stability-test-nvidia-dgx-2-16x-v100-32g) * [Training performance results](#training-performance-results) * [Training performance: NVIDIA DGX-1 (8x V100 16G)](#training-performance-nvidia-dgx-1-8x-v100-16g) + * [Pre-training training performance: single-node on 16G](#pre-training-training-performance-single-node-on-16g) + * [Pre-training training performance: multi-node on 16G](#pre-training-training-performance-multi-node-on-16g) + * [Fine-tuning training performance for SQuAD on 16G](#fine-tuning-training-performance-for-squad-on-16g) * [Training performance: NVIDIA DGX-1 (8x V100 32G)](#training-performance-nvidia-dgx-1-8x-v100-32g) + * [Pre-training training performance: single-node on 32G](#pre-training-training-performance-single-node-on-32g) + * [Fine-tuning training performance for SQuAD on 32G](#fine-tuning-training-performance-for-squad-on-32g) * [Training performance: NVIDIA DGX-2 (16x V100 32G)](#training-performance-nvidia-dgx-2-16x-v100-32g) + * [Pre-training training performance: single-node on DGX-2 32G](#pre-training-training-performance-single-node-on-dgx-2-32g) + * [Pre-training training performance: multi-node on DGX-2 32G](#pre-training-training-performance-multi-node-on-dgx-2-32g) + * [Fine-tuning training performance for SQuAD on DGX-2 32G](#fine-tuning-training-performance-for-squad-on-dgx-2-32g) * [Inference performance results](#inference-performance-results) * [Inference performance: NVIDIA DGX-1 (1x V100 16G)](#inference-performance-nvidia-dgx-1-1x-v100-16g) + * [Pre-training inference performance on 16G](#pre-training-inference-performance-on-16g) + * [Fine-tuning inference performance for SQuAD on 16G](#fine-tuning-inference-performance-for-squad-on-16g) * [Inference performance: NVIDIA DGX-1 (1x V100 32G)](#inference-performance-nvidia-dgx-1-1x-v100-32g) + * [Pre-training inference performance on 32G](#pre-training-inference-performance-on-32g) + * [Fine-tuning inference performance for SQuAD on 32G](#fine-tuning-inference-performance-for-squad-on-32g) * [Inference performance: NVIDIA DGX-2 (1x V100 32G)](#inference-performance-nvidia-dgx-2-1x-v100-32g) -* [Release notes](#release-notes) + * [Pre-training inference performance on DGX-2 32G](#pre-training-inference-performance-on-dgx-2-32g) + * [Fine-tuning inference performance for SQuAD on DGX-2 32G](#fine-tuning-inference-performance-for-squad-on-dgx-2-32g) +- [Release notes](#release-notes) * [Changelog](#changelog) * [Known issues](#known-issues) + + + ## Model overview BERT, or Bidirectional Encoder Representations from Transformers, is a new method of pre-training language representations which obtains state-of-the-art results on a wide array of Natural Language Processing (NLP) tasks. This model is based on the [BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding](https://arxiv.org/abs/1810.04805) paper. NVIDIA's BERT is an optimized version of [Google's official implementation](https://github.com/google-research/bert), leveraging mixed precision arithmetic and Tensor Cores on V100 GPUs for faster training times while maintaining target accuracy. - Other publicly available implementations of BERT include: -1. [Hugging Face](https://github.com/huggingface/pytorch-pretrained-BERT) -2. [codertimo](https://github.com/codertimo/BERT-pytorch) -3. [gluon-nlp](https://github.com/dmlc/gluon-nlp/tree/master/scripts/bert) +1. [NVIDIA PyTorch](https://github.com/NVIDIA/DeepLearningExamples/tree/master/PyTorch/LanguageModeling/BERT) +2. [Hugging Face](https://github.com/huggingface/pytorch-pretrained-BERT) +3. [codertimo](https://github.com/codertimo/BERT-pytorch) +4. [gluon-nlp](https://github.com/dmlc/gluon-nlp/tree/master/scripts/bert) +5. [Google's official implementation](https://github.com/google-research/bert) - -This model is trained with mixed precision using Tensor Cores on NVIDIA Volta and Turing GPUs. Therefore, researchers can get results faster than training without Tensor Cores, while experiencing the benefits of mixed precision training. This model is tested against each NGC monthly container release to ensure consistent accuracy and performance over time. +This model is trained with mixed precision using Tensor Cores on NVIDIA Volta and Turing GPUs. Therefore, researchers can get results upto 4x faster than training without Tensor Cores, while experiencing the benefits of mixed precision training. This model is tested against each NGC monthly container release to ensure consistent accuracy and performance over time. ### Model architecture -BERT's model architecture is a multi-layer bidirectional Transformer encoder. Based on the model size, we have the following two default configurations of BERT. +BERT's model architecture is a multi-layer bidirectional Transformer encoder. Based on the model size, we have the following two default configurations of BERT: | **Model** | **Hidden layers** | **Hidden unit size** | **Attention heads** | **Feedforward filter size** | **Max sequence length** | **Parameters** | |:---------:|:----------:|:----:|:---:|:--------:|:---:|:----:| |BERTBASE |12 encoder| 768| 12|4 x 768|512|110M| |BERTLARGE|24 encoder|1024| 16|4 x 1024|512|330M| -BERT training consists of two steps, pre-training the language model in an unsupervised fashion on vast amounts of unannotated datasets, and then using this pre-trained model for fine-tuning for various NLP tasks, such as question and answer, sentence classification, or sentiment analysis. Fine-tuning typically adds an extra layer or two for the specific task and further trains the model using a task-specific annotated dataset, starting from the pre-trained backbone weights. The end-to-end process can be summarized using Figure 1 and the results are covered in the following sections. +BERT training consists of two steps, pre-training the language model in an unsupervised fashion on vast amounts of unannotated datasets, and then using this pre-trained model for fine-tuning for various NLP tasks, such as question and answer, sentence classification, or sentiment analysis. Fine-tuning typically adds an extra layer or two for the specific task and further trains the model using a task-specific annotated dataset, starting from the pre-trained backbone weights. The end-to-end process in depicted in the following image: ![](data/images/bert_pipeline.png?raw=true) @@ -81,18 +103,19 @@ Figure 1: BERT Pipeline ### Default configuration This repository contains scripts to interactively launch data download, training, benchmarking and inference routines in a Docker container for both pre-training and fine tuning for Question Answering. The major differences between the official implementation of the paper and our version of BERT are as follows: + - Mixed precision support with TensorFlow Automatic Mixed Precision (TF-AMP), which enables mixed precision training without any changes to the code-base by performing automatic graph rewrites and loss scaling controlled by an environmental variable. - Scripts to download dataset for: - - Pre-training - [Wikipedia](https://dumps.wikimedia.org/), [Books Corpus](http://yknzhu.wixsite.com/mbweb) - - Fine Tuning - [SQuAD](https://rajpurkar.github.io/SQuAD-explorer/) (Stanford Question Answering Dataset), Pretrained Weights from Google + - Pre-training - [Wikipedia](https://dumps.wikimedia.org/), [BookCorpus](http://yknzhu.wixsite.com/mbweb) + - Fine tuning - [SQuAD](https://rajpurkar.github.io/SQuAD-explorer/) (Stanford Question Answering Dataset) + - Fine tuning - [GLUE](https://gluebenchmark.com/) (The General Language Understanding Evaluation benchmark) + - Pretrained weights from Google - Custom fused CUDA kernels for faster computations -- Multi-GPU/Multi-Node support using Horovod - +- Multi-GPU/Multi-node support using Horovod The following performance optimizations were implemented in this model: - [XLA](https://www.tensorflow.org/xla) support (experimental). - These techniques and optimizations improve model performance and reduce training time, allowing you to perform various NLP tasks with no additional effort. @@ -102,16 +125,22 @@ The following features are supported by this model. | **Feature** | **BERT** | |:-----------------------:|:--------------------------:| -| Horovod Multi-GPU | Yes | +| Horovod Multi-GPU | Yes | +| Horovod Multi-Node | Yes | +| Automatic mixed precision (AMP) | Yes | +| LAMB | Yes | #### Features -Horovod - Horovod is a distributed training framework for TensorFlow, Keras, PyTorch and MXNet. The goal of Horovod is to make distributed deep learning fast and easy to use. For more information about how to get started with Horovod, see the [Horovod: Official repository](https://github.com/horovod/horovod). +Multi-GPU training with Horovod - Our model uses Horovod to implement efficient multi-GPU training with NCCL. For details, see example sources in this repository or see the [TensorFlow tutorial](https://github.com/horovod/horovod/#usage) + +[LAMB](https://arxiv.org/pdf/1904.00962.pdf) stands for Layerwise Adaptive Moments based optimizer, is a large batch optimization technique that helps accelerate training of deep neural networks using large minibatches. It allows using a global batch size of 65536 and 32768 on sequence lengths 128 and 512 respectively, compared to a batch size of 256 for Adam. The optimized implementation accumulates 1024 gradients batches in phase 1 and 4096 steps in phase 2 before updating weights once. This results in 27% training speedup on a single DGX2 node. On multi-node systems, LAMB allows scaling up to 1024 GPUs resulting in training speedups of up to 17x in comparison to [Adam](https://arxiv.org/pdf/1412.6980.pdf). Adam has limitations on the learning rate that can be used since it is applied globally on all parameters whereas LAMB follows a layerwise learning rate strategy. + ### Mixed precision training Mixed precision is the combined use of different numerical precision in a computational method. [Mixed precision](https://arxiv.org/abs/1710.03740) training offers significant computational speedup by performing operations in half-precision format, while storing minimal information in single-precision to retain as much information as possible in critical parts of the network. Since the introduction of [Tensor Cores](https://developer.nvidia.com/tensor-cores) in the Volta and Turing architecture, significant training speedups are experienced by switching to mixed precision -- up to 3x overall speedup on the most arithmetically intense model architectures. Using mixed precision training requires two steps: -1. Porting the model to use the FP16 data type where appropriate. +1. Porting the model to use the FP16 data type where appropriate. 2. Adding loss scaling to preserve small gradient values. The ability to train deep learning networks with lower precision was introduced in the Pascal architecture and first supported in [CUDA 8](https://devblogs.nvidia.com/parallelforall/tag/fp16/) in the NVIDIA Deep Learning SDK. @@ -120,25 +149,26 @@ For information about: - How to train using mixed precision, see the [Mixed Precision Training](https://arxiv.org/abs/1710.03740) paper and [Training With Mixed Precision](https://docs.nvidia.com/deeplearning/sdk/Mixed-Precision-training/index.html) documentation. - Techniques used for mixed precision training, see the [Mixed Precision Training of Deep Neural Networks](https://devblogs.nvidia.com/mixed-precision-training-deep-neural-networks/) blog. - How to access and enable AMP for TensorFlow, see [Using TF-AMP](https://docs.nvidia.com/deeplearning/dgx/tensorflow-user-guide/index.html#tfamp) from the TensorFlow User Guide. -- APEX tools for mixed precision training, see the [NVIDIA Apex: Tools for Easy Mixed Precision Training in PyTorch](https://devblogs.nvidia.com/apex-pytorch-easy-mixed-precision-training/). #### Enabling mixed precision -Automatic Mixed Precision (AMP) for TensorFlow to enables the full [mixed precision methodology](https://docs.nvidia.com/deeplearning/sdk/mixed-precision-training/index.html#tensorflow) in your existing TensorFlow model code. AMP enables mixed precision training on Volta and Turing GPUs automatically. The TensorFlow framework code makes all necessary model changes internally. -In TF-AMP, the computational graph is optimized to use as few casts as necessary and maximize the use of FP16, and the loss scaling is automatically applied inside of supported optimizers. AMP can be configured to work with the existing `tf.contrib` loss scaling manager by disabling the AMP scaling with a single environment variable to perform only the automatic mixed precision optimization. It accomplishes this by automatically rewriting all computation graphs with the necessary operations to enable mixed precision training and automatic loss scaling. +Automatic Mixed Precision (AMP) for TensorFlow enables the full [mixed precision methodology](https://docs.nvidia.com/deeplearning/sdk/mixed-precision-training/index.html#tensorflow) in your existing TensorFlow model code. AMP enables mixed precision training on Volta and Turing GPUs automatically. The TensorFlow framework code makes all necessary model changes internally. + +In TF-AMP, the computational graph is optimized to use as few casts as necessary and maximizes the use of FP16, and the loss scaling is automatically applied inside of supported optimizers. AMP can be configured to work with the existing `tf.contrib` loss scaling manager by disabling the AMP scaling with a single environment variable to perform only the automatic mixed precision optimization. It accomplishes this by automatically rewriting all computation graphs with the necessary operations to enable mixed precision training and automatic loss scaling. ### Glossary -Fine-tuning +**Fine-tuning** Training an already pretrained model further using a task specific dataset for subject-specific refinements, by adding task-specific layers on top if required. -Language Model +**Language Model** Assigns a probability distribution over a sequence of words. Given a sequence of words, it assigns a probability to the whole sequence. -Pre-training + +**Pre-training** Training a model on vast amounts of data on the same (or different) task to build general understandings. -Transformer +**Transformer** The paper [Attention Is All You Need](https://arxiv.org/abs/1706.03762) introduces a novel architecture called Transformer that uses an attention mechanism and transforms one sequence into another. @@ -154,7 +184,6 @@ This repository contains `Dockerfile` which extends the TensorFlow NGC container - [TensorFlow 19.06-py3+](https://ngc.nvidia.com/catalog/containers/nvidia:tensorflow) NGC container - [NVIDIA Volta](https://www.nvidia.com/en-us/data-center/volta-gpu-architecture/) or [Turing](https://www.nvidia.com/en-us/geforce/turing/) based GPU - For more information about how to get started with NGC containers, see the following sections from the NVIDIA GPU Cloud Documentation and the Deep Learning Documentation: - [Getting Started Using NVIDIA GPU Cloud](https://docs.nvidia.com/ngc/ngc-getting-started-guide/index.html) - [Accessing And Pulling From The NGC Container Registry](https://docs.nvidia.com/deeplearning/frameworks/user-guide/index.html#accessing_registry) @@ -162,6 +191,11 @@ For more information about how to get started with NGC containers, see the follo For those unable to use the TensorFlow NGC container, to set up the required environment or create your own container, see the versioned [NVIDIA Container Support Matrix](https://docs.nvidia.com/deeplearning/frameworks/support-matrix/index.html). +For multi-node, the sample provided in this repository requires [Enroot](https://github.com/NVIDIA/enroot) and [Pyxis](https://github.com/NVIDIA/pyxis) set up on a [SLURM](https://slurm.schedmd.com) cluster. + +More information on how to set up and launch can be found in the [Multi-node Documentation](https://docs.nvidia.com/ngc/multi-node-bert-user-guide). + + ## Quick Start Guide To pretrain or fine tune your model for Question Answering using mixed precision with Tensor Cores or using FP32, perform the following steps using the default parameters of the BERT model. @@ -181,64 +215,71 @@ bash scripts/docker/build.sh 3. Download and preprocess the dataset. -This repository provides scripts to download, verify and extract the SQuaD dataset and pretrained weights for fine tuning as well as Wikipedia and BookCorpus dataset for pre-training. +This repository provides scripts to download, verify and extract the SQuAD dataset, GLUE dataset and pretrained weights for fine tuning as well as Wikipedia and BookCorpus dataset for pre-training. -To download, verify, and extract the required datasets, issue: +To download, verify, and extract the required datasets, run: ```bash -bash scripts/data_download.sh +bash scripts/data_download.sh ``` The script launches a Docker container with the current directory mounted and downloads the datasets to a `data/` folder on the host. -Note : The dataset is 170GB+ and takes 15+ hours to download. Expired dataset links are ignored during data download. +Note: The dataset is 170GB+ and takes 15+ hours to download. Expired dataset links are ignored during data download. +4. Download the pretrained models from NGC. -4. Download pretrained models from NGC. - -We have uploaded checkpoints for both fine tuning and pre-training for various configurations on the NGC Model Registry. You can download them directly from the [NGC model catalog](https://ngc.nvidia.com/catalog/models). Download them to the BERT directory to easily access them in your scripts. - +We have uploaded checkpoints for both fine tuning and pre-training for various configurations on the NGC Model Registry. You can download them directly from the [NGC model catalog](https://ngc.nvidia.com/catalog/models). Download them to the `results/models/` to easily access them in your scripts. 5. Start an interactive session in the NGC container to run training/inference. -After you build the container image and download the data, you can start an interactive CLI session as follows: +After you build the container image and download the data, you can start an interactive CLI session as follows: ```bash bash scripts/docker/launch.sh ``` The `launch.sh` script assumes that the datasets are in the following locations by default after downloading the data. -- SQuAD v1.1 - `data/squad/v1.1` -- SQuaD v2.0 - `data/squad/v2.0` -- BERT Large - `data/pretrained_models_google/uncased_L-24_H-1024_A-16` -- BERT Base - `data/pretrained_models_google/uncased_L-12_H-768_A-12` -- BERT - `data/pretrained_models_google/uncased_L-24_H-1024_A-16` -- Wikipedia - `data/wikipedia_corpus/final_tfrecords_sharded` -- Books Corpus - `data/bookcorpus/final_tfrecords_sharded` + +- SQuAD v1.1 - `data/download/squad/v1.1` +- SQuAD v2.0 - `data/download/squad/v2.0` +- GLUE The Corpus of Linguistic Acceptability (CoLA) - `data/download/CoLA` +- GLUE Microsoft Research Paraphrase Corpus (MRPC) - `data/download/MRPC` +- GLUE The Multi-Genre NLI Corpus (MNLI) - `data/download/MNLI` +- BERT Large - `data/download/google_pretrained_weights/uncased_L-24_H-1024_A-16` +- BERT Base - `data/download/google_pretrained_weights/uncased_L-12_H-768_A-12` +- BERT - `data/download/google_pretrained_weights/uncased_L-24_H-1024_A-16` +- Wikipedia + BookCorpus TFRecords - `data/tfrecords/books_wiki_en_corpus` 6. Start pre-training. -BERT is designed to pre-train deep bidirectional representations for language representations. The following scripts are to replicate pre-training on Wikipedia and Books Corpus from the [paper](https://arxiv.org/pdf/1810.04805.pdf). These scripts are general and can be used for pre-training language representations on any corpus of choice. +BERT is designed to pre-train deep bidirectional representations for language representations. The following scripts are to replicate pre-training on Wikipedia and BookCorpus from the [LAMB paper](https://arxiv.org/pdf/1904.00962.pdf). These scripts are general and can be used for pre-training language representations on any corpus of choice. -From within the container, you can use the following script to run pre-training. +From within the container, you can use the following script to run pre-training using LAMB. ```bash -bash scripts/run_pretraining.sh +bash scripts/run_pretraining_lamb.sh ``` -For FP16 training with XLA using a DGX-1 V100 32G, run: +For BERT Large FP16 training with XLA using a DGX-1 V100 32G, run: ```bash -bash scripts/run_pretraining.sh 14 8 5e-5 fp16 true 8 5000 2285000 5000 true +bash scripts/run_pretraining_lamb.sh 64 8 8 7.5e-4 5e-4 fp16 true 8 2000 200 7820 100 128 512 large ``` -For FP32 training without XLA using a DGX-1 V100 32G, run: +For BERT Large FP32 training without XLA using a DGX-1 V100 32G, run: ```bash -bash scripts/run_pretraining.sh 6 6 2e-5 fp32 false 8 2000 5333333 5000 true +bash scripts/run_pretraining_lamb.sh 64 8 8 7.5e-4 5e-4 fp32 false 8 2000 200 7820 100 128 512 large +``` + +Alternatively, to run pre-training with Adam as in the original [BERT paper](https://arxiv.org/pdf/1810.04805.pdf) from within the container, run: + +```bash +bash scripts/run_pretraining_adam.sh ``` 7. Start fine tuning. -The above pretrained BERT representations can be fine tuned with just one additional output layer for a state-of-the-art Question Answering system. From within the container, you can use the following script to run fine-training for SQuaD. +The above pretrained BERT representations can be fine tuned with just one additional output layer for a state-of-the-art Question Answering system. From within the container, you can use the following script to run fine-training for SQuAD. ```bash bash scripts/run_squad.sh @@ -246,19 +287,25 @@ bash scripts/run_squad.sh +``` + +The GLUE tasks supported include CoLA, MRPC and MNLI. + 8. Start validation/evaluation. -The `run_squad_inference.sh` script runs inference on a checkpoint fine tuned for SQuaD and evaluates the validity of predictions on the basis of exact match and F1 score. +The `run_squad_inference.sh` script runs inference on a checkpoint fine tuned for SQuAD and evaluates the validity of predictions on the basis of exact match and F1 score. ```bash bash scripts/run_squad_inference.sh @@ -274,7 +321,13 @@ For SQuAD 1.1 FP32 inference without XLA using a DGX-1 V100 32G, run: bash scripts/run_squad_inference.sh /results/model.ckpt 8 fp32 false 384 128 large 1.1 ``` +Alternatively, to run inference on GLUE benchmark, run: +```bash +bash scripts/run_glue_inference.sh +``` + ## Advanced + The following sections provide greater details of the dataset, running training and inference, and the training results. ### Scripts and sample code @@ -282,23 +335,27 @@ The following sections provide greater details of the dataset, running training In the root directory, the most important files are: * `run_pretraining.py` - Serves as entry point for pre-training * `run_squad.py` - Serves as entry point for SQuAD training -* Dockerfile - Container with the basic set of dependencies to run BERT +* `run_classifier.py` - Serves as entry point for GLUE training +* `Dockerfile` - Container with the basic set of dependencies to run BERT The `scripts/` folder encapsulates all the one-click scripts required for running various functionalities supported such as: * `run_squad.sh` - Runs SQuAD training and inference using `run_squad.py` file -* `run_pretraining.sh` - Runs pre-training using `run_pretraining.py` file -* `data_download.sh` - Downloads datasets using files in `data/` folder +* `run_glue.sh` - Runs GLUE training and inference using the `run_classifier.py` file +* `run_pretraining_adam.sh` - Runs pre-training with Adam optimizer using the `run_pretraining.py` file +* `run_pretraining_lamb.sh` - Runs pre-training with LAMB optimizer using the `run_pretraining.py` file in two phases. Phase 1 does 90% of training with sequence length = 128. In phase 2, the remaining 10% of the training is done with sequence length = 512. +* `data_download.sh` - Downloads datasets using files in the `data/` folder * `finetune_train_benchmark.sh` - Captures performance metrics of training for multiple configurations * `finetune_inference_benchmark.sh` - Captures performance metrics of inference for multiple configurations Other folders included in the root directory are: -* `data/` - Necessary folders and scripts to download datasets required for fine tuning and pre-training BERT +* `data/` - Necessary folders and scripts to download datasets required for fine tuning and pre-training BERT. * `utils/` - Necessary files for preprocessing data before feeding into BERT and hooks for obtaining performance metrics from BERT. ### Parameters Aside from the options to set hyperparameters, the relevant options to control the behaviour of the `run_pretraining.py` script are: -```bash + +``` --[no]use_fp16: Whether to enable AMP ops.(default: 'false') --bert_config_file: The config json file corresponding to the pre-trained BERT model. This specifies the model architecture. --[no]do_eval: Whether to run evaluation on the dev set.(default: 'false') @@ -306,15 +363,18 @@ Aside from the options to set hyperparameters, the relevant options to control t --eval_batch_size: Total batch size for eval.(default: '8')(an integer) --[no]horovod: Whether to use Horovod for multi-gpu runs(default: 'false') --init_checkpoint: Initial checkpoint (usually from a pre-trained BERT model). - --input_file: Input TF example files (can be a glob or comma separated). - --iterations_per_loop: How many steps to make in each estimator call.(default: '1000') + --input_files_dir: Input TF example files (can be a dir or comma separated). --output_dir: The output directory where the model checkpoints will be written. + --optimizer_type: Optimizer used for training - LAMB or ADAM + --num_accumulation_steps: Number of accumulation steps before gradient update. Global batch size = num_accumulation_steps * train_batch_size + --allreduce_post_accumulation: Whether to all reduce after accumulation of N steps or after each step ``` Aside from the options to set hyperparameters, some relevant options to control the behaviour of the `run_squad.py` script are: -```bash + +``` --bert_config_file: The config json file corresponding to the pre-trained BERT model. This specifies the model architecture. ---output_dir: The output directory where the model checkpoints will be written. + --output_dir: The output directory where the model checkpoints will be written. --[no]do_predict: Whether to run evaluation on the dev set. (default: 'false') --[no]do_train: Whether to run training. (default: 'false') --learning_rate: The initial learning rate for Adam.(default: '5e-06')(a number) @@ -325,43 +385,65 @@ Aside from the options to set hyperparameters, some relevant options to control --train_batch_size: Total batch size for training.(default: '8')(an integer) --[no]use_fp16: Whether to enable AMP ops.(default: 'false') --[no]use_xla: Whether to enable XLA JIT compilation.(default: 'false') - --[no]verbose_logging: If true, all of the warnings related to data processing will be printed. A number of warnings are expected for a normal SQuAD evaluation.(default: 'false') --[no]version_2_with_negative: If true, the SQuAD examples contain some that do not have an answer.(default: 'false') ``` +Aside from the options to set hyperparameters, some relevant options to control the behaviour of the `run_classifier.py` script are: + +``` + --bert_config_file: The config json file corresponding to the pre-trained BERT model. This specifies the model architecture. + --data_dir: The input data dir. Should contain the .tsv files (or other data files) for the task. + --[no]do_eval: Whether to run eval on the dev set. + (default: 'false') + --[no]do_predict: Whether to run the model in inference mode on the test set.(default: 'false') + --[no]do_train: Whether to run training.(default: 'false') + --[no]horovod: Whether to use Horovod for multi-gpu runs(default: 'false') + --init_checkpoint: Initial checkpoint (usually from a pre-trained BERT model). + --max_seq_length: The maximum total input sequence length after WordPiece tokenization. Sequences longer than this will be truncated, and sequences shorter than this will be padded.(default: '128')(an integer) + --num_train_epochs: Total number of training epochs to perform.(default: '3.0')(a number) + --output_dir: The output directory where the model checkpoints will be written. + --task_name: The name of the task to train. + --train_batch_size: Total batch size for training.(default: '32')(an integer) + --[no]use_fp16: Whether to use fp32 or fp16 arithmetic on GPU. + (default: 'false') + --[no]use_xla: Whether to enable XLA JIT compilation. + (default: 'false') + --vocab_file: The vocabulary file that the BERT model was trained on. + --warmup_proportion: Proportion of training to perform linear learning rate warmup for. E.g., 0.1 = 10% of training.(default: '0.1')(a number) +``` + + ### Command-line options -To see the full list of available options and their descriptions, use the `-h` or `--help` command-line option with the python file, for example: +To see the full list of available options and their descriptions, use the `-h` or `--help` command-line option with the Python file, for example: ```bash python run_pretraining.py --help python run_squad.py --help +python run_classifier.py --help ``` ### Getting the data -For pre-training BERT, we use the concatenation of Wikipedia (2500M words) as well as Books Corpus (800M words). For Wikipedia, we extract only the text passages from [here](ftp://ftpmirror.your.org/pub/wikimedia/dumps/enwiki/20190301/enwiki-20190301-pages-articles-multistream.xml.bz2) and ignore headers list and tables. It is structured as a document level corpus rather than a shuffled sentence level corpus because it is critical to extract long contiguous sentences. The next step is to run `create_pretraining_data.py` with the document level corpus as input, which generates input data and labels for the masked language modeling and next sentence prediction tasks. Pre-training can also be performed on any corpus of your choice. The collection of data generation scripts are intended to be modular to allow modifications for additional preprocessing steps or to use additional data. They can hence, easily be modified for an arbitrary corpus. +For pre-training BERT, we use the concatenation of Wikipedia (2500M words) as well as BookCorpus (800M words). For Wikipedia, we extract only the text passages from [here](ftp://ftpmirror.your.org/pub/wikimedia/dumps/enwiki/latest/enwiki-latest-pages-articles-multistream.xml.bz2) and ignore headers list and tables. It is structured as a document level corpus rather than a shuffled sentence level corpus because it is critical to extract long contiguous sentences. -The preparation of an individual pre-training dataset is described in the `run_preprocessing.sh` script found in the `data/bookcorpus` and `data/wikipedia_corpus` folders. The component steps to prepare the datasets are as follows: +The next step is to run `create_pretraining_data.py` with the document level corpus as input, which generates input data and labels for the masked language modeling and next sentence prediction tasks. Pre-training can also be performed on any corpus of your choice. The collection of data generation scripts are intended to be modular to allow modifications for additional preprocessing steps or to use additional data. They can hence easily be modified for an arbitrary corpus. -1. Data download and extract - the dataset is downloaded and extracted +The preparation of an individual pre-training dataset is described in the `create_datasets_from_start.sh` script found in the `data/` folder. The component steps to prepare the datasets are as follows: -2. Clean and format - document tags, etc. are removed from the dataset. The end result of this step is a `{dataset_name}.txt` file that contains the entire corpus. Each line in the text file contains an entire document from the corpus. - -3. Sentence segmentation - the corpus text file is processed into separate sentences. The result of this step is a `{dataset_name}.segmented.nltk.txt` file in a `final_text_file_single` directory that contains the entire corpus, with each sentence having its own line. Documents are separated by a new line between documents. - -4. Sharding - the sentence segmented corpus file is split into a number of smaller text documents. The sharding is configured so that a document will not be split between two shards. - -5. TFRecord file creation - each text file shard is processed by the `create_pretraining_data.py` script to produce a corresponding TFRecord file. The script generates input data and labels for masked language modeling and sentence prediction tasks for the input text shard. +1. Data download and extract - the dataset is downloaded and extracted. +2. Clean and format - document tags, etc. are removed from the dataset. The end result of this step is a `{dataset_name_one_article_per_line}.txt` file that contains the entire corpus. Each line in the text file contains an entire document from the corpus. One file per dataset is created in the `formatted_one_article_per_line` folder. +3. Sharding - the sentence segmented corpus file is split into a number of smaller text documents. The sharding is configured so that a document will not be split between two shards. Sentence segmentation is performed at this time using NLTK. +4. TFRecord file creation - each text file shard is processed by the `create_pretraining_data.py` script to produce a corresponding TFRecord file. The script generates input data and labels for masked language modeling and sentence prediction tasks for the input text shard. -For fine tuning BERT for the task of Question Answering. We use SQuaD for this task. SQuaD v1.1 has 100,000+ question-answer pairs on 500+ articles. SQuaD v2.0 combines v1.1 with an additional 50,000 new unanswerable questions and must not only answer questions but also determine when that is not possible. +For fine tuning BERT for the task of Question Answering, we use SQuAD and GLUE. SQuAD v1.1 has 100,000+ question-answer pairs on 500+ articles. SQuAD v2.0 combines v1.1 with an additional 50,000 new unanswerable questions and must not only answer questions but also determine when that is not possible. GLUE consists of single-sentence tasks, similarity and paraphrase tasks and inference tasks. We support one of each: CoLA, MNLI and MRPC. #### Dataset guidelines The procedure to prepare a text corpus for pre-training is described in the previous section. This section provides additional insight into how exactly raw text is processed so that it is ready for pre-training. -First, raw text is tokenized using [WordPiece tokenization](https://arxiv.org/pdf/1609.08144.pdf). A [CLS] token is inserted at the start of every sequence, and the two sentences in the sequence are separated with a [SEP] token. +First, raw text is tokenized using [WordPiece tokenization](https://arxiv.org/pdf/1609.08144.pdf). A [CLS] token is inserted at the start of every sequence, and the two sentences in the sequence are separated by a [SEP] token. Note: BERT pre-training looks at pairs of sentences at a time. A sentence embedding token [A] is added to the first sentence and token [B] to the next. @@ -373,7 +455,7 @@ The `create_pretraining_data.py` script takes in raw text and creates training i #### Multi-dataset -We are able to combine multiple datasets into a single dataset for pre-training on a diverse text corpus. Once TFRecords have been created for each component dataset, then one can simply create a combined dataset by adding the directory to `SOURCES` in `run_pretraining.sh`. This will feed all matching files to the input pipeline in `run_pretraining.py`. However, note that in the training process only one TFRecord file is consumed at a time, therefore, the training instances of any given training batch will all belong to the same source dataset. +We are able to combine multiple datasets into a single dataset for pre-training on a diverse text corpus. Once TFRecords have been created for each component dataset, you can create a combined dataset by adding the directory to `SOURCES` in `run_pretraining_*.sh`. This will feed all matching files to the input pipeline in `run_pretraining.py`. However, in the training process, only one TFRecord file is consumed at a time, therefore, the training instances of any given training batch will all belong to the same source dataset. ### Training process @@ -381,61 +463,73 @@ The training process consists of two steps: pre-training and fine tuning. #### Pre-training -Pre-training is performed using the `run_pretraining.py` script along with parameters defined in the `scripts/run_pretraining.sh`. +Pre-training is performed using the `run_pretraining.py` script along with parameters defined in the `scripts/run_pretraining_lamb.sh`. - -The `run_pretraining.sh` script runs a job on a single node that trains the BERT-large model from scratch using the Wikipedia and Book corpus datasets as training data. By default, the training script: -- Runs on 8 GPUs with training batch size of 14 and evaluation batch size of 8 per GPU. +The `run_pretraining_lamb.sh` script runs a job on a single node that trains the BERT-large model from scratch using the Wikipedia and BookCorpus datasets as training data. By default, the training script: +- Runs on 8 GPUs. - Has FP16 precision enabled. - Is XLA enabled. -- Runs for 1144000 steps with 10000 warm-up steps. -- Saves a checkpoint every 5000 iterations (keeps only the latest checkpoint) and at the end of training. All checkpoints, evaluation results and training logs are saved to the `/results` directory (in the container which can be mounted to a local directory). - Creates a log file containing all the output. -- Evaluates the model at the end of training. To skip evaluation, modify `--do_eval` to `False`. +- Saves a checkpoint every 100 iterations (keeps only the latest checkpoint) and at the end of training. All checkpoints, evaluation results and training logs are saved to the `/results` directory (in the container which can be mounted to a local directory). +- Evaluates the model at the end of each phase. -These parameters will train Wikipedia and Books Corpus to reasonable accuracy on a DGX1 with 32GB V100 cards. If you want to match Google’s best results from the BERT paper, you should either train for twice as many steps (2,288,000 steps) on a DGX-1, or train on 16 GPUs on a DGX-2. The DGX-2 having 16 GPUs will be able to fit a batch size twice as large as a DGX-1 (224 vs 112), hence the DGX-2 can finish in half as many steps. +- Phase 1 + - Runs 7038 steps with 2000 warmup steps + - Sets Maximum sequence length as 128 + - Sets Global Batch size as 64K +- Phase 2 + - Runs 1564 steps with 200 warm-up steps + - Sets Maximum sequence length as 512 + - Sets Global Batch size as 32K + +These parameters train Wikipedia and BookCorpus with reasonable accuracy on a DGX-1 with 32GB V100 cards. For example: ```bash -run_pretraining.sh +scripts/run_pretraining_lamb.sh ``` Where: -- is per-GPU batch size used for training. Batch size varies with precision, larger batch sizes run more efficiently, but require more memory. +- `` is per-GPU batch size used for training in the respective phase. Batch size varies with precision, larger batch sizes run more efficiently, but require more memory. -- is per-GPU batch size used for evaluation after training. +- `` is per-GPU batch size used for evaluation after training. -- is the default rate of 1e-4 is good for global batch size 256. +- `` is the default rate of 1e-4 is good for global batch size 256. -- is the type of math in your model, can be either `fp32` or `amp`. Specifically: +- `` is the default rate of 1e-4 is good for global batch size 256. + +- `` is the type of math in your model, can be either `fp32` or `fp16`. Specifically: - `fp32` is 32-bit IEEE single precision floats. - - `amp` is Automatic rewrite of TensorFlow compute graph to take advantage of 16-bit arithmetic whenever it is safe. + - `fp16` is Automatic rewrite of TensorFlow compute graph to take advantage of 16-bit arithmetic whenever it is safe. -- is the number of GPUs to use for training. Must be equal to or smaller than the number of GPUs attached to your node. +- `` is the number of GPUs to use for training. Must be equal to or smaller than the number of GPUs attached to your node. -- is the number of warm-up steps at the start of training. +- `` is the number of warm-up steps at the start of training in the respective phase. -- is the total number of training steps. +- `` is the total number of training steps in both phases combined. -- controls how often checkpoints are saved. Default is 5000 steps. +- `` controls how often checkpoints are saved. Default is 100 steps. -- is a flag that indicates whether output should be written to a logfile or not (acceptable values are ‘true’ or ‘false’, ‘true’ indicates output should be saved to a logfile.) +- `` is used to mimic higher batch sizes in the respective phase by accumulating gradients N times before weight update. -The following sample code, trains BERT-large from scratch on a single DGX-2 using FP16 arithmetic. This will take around 156 hours / 6.5 days. Checkpoints are written out every 5000 steps and all printouts are saved to a logfile. +- `` is used to indicate whether to pretrain BERT Large or BERT Base model + +The following sample code trains BERT-large from scratch on a single DGX-2 using FP16 arithmetic. This will take around 4.5 days. ```bash -bert_tf/scripts/run_pretraining.sh 14 8 1e-4 fp16_xla 16 10000 1144000 5000 true +bert_tf/scripts/run_pretraining_lamb.sh 32 8 8 3.75e-4 2.5e-4 fp16 trye 16 2000 200 7820 100 128 512 256 large ``` #### Fine tuning Fine tuning is performed using the `run_squad.py` script along with parameters defined in `scripts/run_squad.sh`. -The `run_squad.sh` script trains a model and performs evaluation on the SQuaD dataset. By default, the training script: -- Trains for SQuAD v1.1 dataset -- Trains on BERT Large Model +The `run_squad.sh` script trains a model and performs evaluation on the SQuAD dataset. By default, the training script: + +- Trains for SQuAD v1.1 dataset. +- Trains on BERT Large Model. - Uses 8 GPUs and batch size of 10 on each GPU. - Has FP16 precision enabled. - Is XLA enabled. @@ -446,7 +540,7 @@ The `run_squad.sh` script trains a model and performs evaluation on the SQuaD da This script outputs checkpoints to the `/results` directory, by default, inside the container. Mount point of `/results` can be changed in the `scripts/docker/launch.sh` file. The training log contains information about: - Loss for the final step - Training and evaluation performance -- F1 and exact match score on the Dev Set of SQuaD after evaluation. +- F1 and exact match score on the Dev Set of SQuAD after evaluation. The summary after training is printed in the following format: ```bash @@ -458,8 +552,9 @@ I0312 23:14:00.550973 140287431493376 run_squad.py:1397] 0 Inference Performance ``` Multi-GPU training is enabled with the Horovod TensorFlow module. The following example runs training on 8 GPUs: + ```bash -BERT_DIR=data/pretrained_models_google/uncased_L-24_H-1024_A-16 +BERT_DIR=data/download/google_pretrained_weights/uncased_L-24_H-1024_A-16 mpi_command="mpirun -np 8 -H localhost:8 \ --allow-run-as-root -bind-to none -map-by slot \ @@ -471,21 +566,43 @@ mpi_command="mpirun -np 8 -H localhost:8 \ --output_dir=/results ``` +#### Multi-node + + +Multi-node runs can be launched on a pyxis/enroot Slurm cluster (see [Requirements](#requirements)) with the `run.sub` script with the following command for a 4-node DGX1 example for both phase 1 and phase 2: +``` +BATCHSIZE=16 LEARNING_RATE='1.875e-4' NUM_ACCUMULATION_STEPS=128 PHASE=1 sbatch -N4 --ntasks-per-node=8 run.sub +BATCHSIZE=2 LEARNING_RATE='1.25e-4' NUM_ACCUMULATION_STEPS=512 PHASE=1 sbatch -N4 --ntasks-per-node=8 run.sub +``` + + +Checkpoint after phase 1 will be saved in `checkpointdir` specified in `run.sub`. The checkpoint will be automatically picked up to resume training on phase 2. Note that phase 2 should be run after phase 1. + +Variables to re-run the [Training performance results](#training-performance-results) are available in the `configurations.yml` file. + +The batch variables `BATCHSIZE`, `LEARNING_RATE`, `NUM_ACCUMULATION_STEPS` refer to the Python arguments `train_batch_size`, `learning_rate`, `num_accumulation_steps` respectively. +The variable `PHASE` refers to phase specific arguments available in `run.sub`. + +Note that the `run.sub` script is a starting point that has to be adapted depending on the environment. In particular, variables such as `datadir` handle the location of the files for each phase. + +Refer to the files contents to see the full list of variables to adjust for your system. + ### Inference process Inference on a fine tuned Question Answering system is performed using the `run_squad.py` script along with parameters defined in `scripts/run_squad_inference.sh`. Inference is supported on a single GPU. -The `run_squad_inference.sh` script trains a model and performs evaluation on the SQuaD dataset. By default, the inferencing script: +The `run_squad_inference.sh` script trains a model and performs evaluation on the SQuAD dataset. By default, the inferencing script: + - Uses SQuAD v1.1 dataset - Has FP16 precision enabled - Is XLA enabled -- Evaulates the latest checkpoint present in `/results` with a batch size of 8 +- Evaluates the latest checkpoint present in `/results` with a batch size of 8 -This script outputs predictions file to `/results/predictions.json` and computes F1 score and exact match score using SQuaD's evaluate file. Mount point of `/results` can be changed in the `scripts/docker/launch.sh` file. +This script outputs predictions file to `/results/predictions.json` and computes F1 score and exact match score using SQuAD's evaluate file. Mount point of `/results` can be changed in the `scripts/docker/launch.sh` file. The output log contains information about: Inference performance -Inference Accuracy (F1 and exact match scores) on the Dev Set of SQuaD after evaluation. +Inference Accuracy (F1 and exact match scores) on the Dev Set of SQuAD after evaluation. The summary after inference is printed in the following format: ```bash @@ -499,14 +616,14 @@ I0312 23:14:00.550973 140287431493376 run_squad.py:1397] 0 Inference Performance The [NVIDIA TensorRT Inference Server](https://github.com/NVIDIA/tensorrt-inference-server) provides a datacenter and cloud inferencing solution optimized for NVIDIA GPUs. The server provides an inference service via an HTTP or gRPC endpoint, allowing remote clients to request inferencing for any number of GPU or CPU models being managed by the server. A typical TensorRT Inference Server pipeline can be broken down into the following 8 steps: -Client serializes the inference request into a message and sends it to the server (Client Send) -Message travels over the network from the client to the server (Network) -Message arrives at server, and is deserialized (Server Receive) -Request is placed on the queue (Server Queue) -Request is removed from the queue and computed (Server Compute) -Completed request is serialized in a message and sent back to the client (Server Send) -Completed message travels over network from the server to the client (Network) -Completed message is deserialized by the client and processed as a completed inference request (Client Receive) +1. Client serializes the inference request into a message and sends it to the server (Client Send) +2. Message travels over the network from the client to the server (Network) +3. Message arrives at server, and is deserialized (Server Receive) +4. Request is placed on the queue (Server Queue) +5. Request is removed from the queue and computed (Server Compute) +6. Completed request is serialized in a message and sent back to the client (Server Send) +7. Completed message travels over network from the server to the client (Network) +8. Completed message is deserialized by the client and processed as a completed inference request (Client Receive) Generally, for local clients, steps 1-4 and 6-8 will only occupy a small fraction of time, compared to steps 5-6. As backend deep learning systems like BERT are rarely exposed directly to end users, but instead only interfacing with local front-end servers, for the sake of BERT, we can consider that all clients are local. In this section, we will go over how to launch TensorRT Inference Server and client and get the best performant solution that fits your specific application needs. @@ -515,33 +632,35 @@ Note: The following instructions are run from outside the container and call `do #### Performance analysis for TensorRT Inference Server -Based on the figures 2 and 3 below, we recommend using the Dynamic Batcher with `max_batch_size = 8`, `max_queue_delay_microseconds` as large as possible to fit within your latency window (The values used below are extremely large to exaggerate their effect), and only 1 instance of the engine. The largest improvements to both throughput and latency come from increasing the batch size due to efficiency gains in the GPU with larger batches. The Dynamic Batcher combines the best of both worlds by efficiently batching together a large number of simultaneous requests, while also keeping latency down for infrequent requests. We recommend only 1 instance of the engine due to the negligible improvement to throughput at the cost of significant increases in latency. Many models can benefit from multiple engine instances but as the figures below show, that is not the case for this model. - +Based on the figures 2 and 3 below, we recommend using the Dynamic Batcher with `max_batch_size = 8`, `max_queue_delay_microseconds` as large as possible to fit within your latency window (the values used below are extremely large to exaggerate their effect), and only 1 instance of the engine. The largest improvements to both throughput and latency come from increasing the batch size due to efficiency gains in the GPU with larger batches. The Dynamic Batcher combines the best of both worlds by efficiently batching together a large number of simultaneous requests, while also keeping latency down for infrequent requests. We recommend only 1 instance of the engine due to the negligible improvement to throughput at the cost of significant increases in latency. Many models can benefit from multiple engine instances but as the figures below show, that is not the case for this model. ![](data/images/trtis_base_summary.png?raw=true) -Figure 2: Latency vs Throughput for BERT Base, fp16, Sequence Length = 128 using Various configurations available in TRTIS +Figure 2: Latency vs Throughput for BERT Base, FP16, Sequence Length = 128 using various configurations available in TensorRT Inference Server ![](data/images/trtis_large_summary.png?raw=true) -Figure 3: Latency vs Throughput for BERT Large, fp16, Sequence Length = 384 using Various configurations available in TRTIS +Figure 3: Latency vs Throughput for BERT Large, FP16, Sequence Length = 384 using various configurations available in TensorRT Inference Server ##### Advanced Details This section digs deeper into the performance numbers and configurations corresponding to running TensorRT Inference Server for BERT fine tuning for Question Answering. It explains the tradeoffs in selecting maximum batch sizes, batching techniques and number of inference engines on the same GPU to understand how we arrived at the optimal configuration specified previously. -Results can be reproduced by running `generate_figures.sh`. It exports the Tensorflow BERT model as a `tensorflow_savedmodel` that TensorRT Inference Server accepts, builds a matching [TensorRT Inference Server model config](https://docs.nvidia.com/deeplearning/sdk/tensorrt-inference-server-guide/docs/model_configuration.html#), starts the server on localhost in a detached state and runs [perf_client](https://docs.nvidia.com/deeplearning/sdk/tensorrt-inference-server-guide/docs/client.html#performance-example-application) for various configurations. +Results can be reproduced by running `generate_figures.sh`. It exports the TensorFlow BERT model as a `tensorflow_savedmodel` that TensorRT Inference Server accepts, builds a matching [TensorRT Inference Server model config](https://docs.nvidia.com/deeplearning/sdk/tensorrt-inference-server-guide/docs/model_configuration.html#), starts the server on localhost in a detached state and runs [perf_client](https://docs.nvidia.com/deeplearning/sdk/tensorrt-inference-server-guide/docs/client.html#performance-example-application) for various configurations. ```bash bash scripts/trtis/generate_figures.sh ``` -All results below are obtained on 1 DGX-1 V100 32 GB GPU for BERT Base, Sequence Length = 128 and FP16 precision running on a local server. Latencies are indicated by bar plots using the left axis. Throughput is indicated by the blue line plot using the right axis. X-axis indicates the concurrency - the maximum number of inference requests that can be in the pipeline at any given time. For example, when the concurrency is set to 1, the client waits for an inference request to be completed (Step 8) before it sends another to the server (Step 1). A high number of concurrent requests can reduce the impact of network latency on overall throughput +All results below are obtained on a single DGX-1 V100 32GB GPU for BERT Base, Sequence Length = 128 and FP16 precision running on a local server. Latencies are indicated by bar plots using the left axis. Throughput is indicated by the blue line plot using the right axis. X-axis indicates the concurrency - the maximum number of inference requests that can be in the pipeline at any given time. For example, when the concurrency is set to 1, the client waits for an inference request to be completed (Step 8) before it sends another to the server (Step 1). A high number of concurrent requests can reduce the impact of network latency on overall throughput. -1. Maximum batch size +###### Maximum batch size -As we can see in figure 4 below, the throughput at BS=1, Client Concurrent Requests = 64 is 119 and in figure 5 below, the throughput at BS=8, Client Concurrent Requests = 8 is 517, respectively giving a speedup of ~4.3x (Note: We compare BS=1, Client Concurrent Requests = 64 to BS=8, Client Concurrent Requests = 8 to keep the Total Number of Outstanding Requests equal between the two different modes. Where Total Number of Outstanding Requests = Batch Size * Client Concurrent Requests. This is also why there are 8 times as many bars on the BS=1 chart than the BS=8 chart). Increasing the batch size from 1 to 8 results in an increase in compute time by 1.8x (8.38ms to 15.46ms) showing that computation is more efficient at higher batch sizes. Hence, an optimal batch size would be the maximum batch size that can both fit in memory and is within the preferred latency threshold. +As we can see in Figure 4, the throughput at BS=1, Client Concurrent Requests = 64 is 119 and in Figure 5, the throughput at BS=8, Client Concurrent Requests = 8 is 517, respectively giving a speedup of ~4.3x +Note: We compare BS=1, Client Concurrent Requests = 64 to BS=8, Client Concurrent Requests = 8 to keep the Total Number of Outstanding Requests equal between the two different modes. Where Total Number of Outstanding Requests = Batch Size * Client Concurrent Requests. This is also why there are 8 times as many bars on the BS=1 chart than the BS=8 chart. + +Increasing the batch size from 1 to 8 results in an increase in compute time by 1.8x (8.38ms to 15.46ms) showing that computation is more efficient at higher batch sizes. Hence, an optimal batch size would be the maximum batch size that can both fit in memory and is within the preferred latency threshold. ![](data/images/trtis_bs_1.png?raw=true) @@ -551,13 +670,13 @@ Figure 4: Latency & Throughput vs Concurrency at Batch size = 1 Figure 5: Latency & Throughput vs Concurrency at Batch size = 8 -2. Batching techniques +###### Batching techniques Static batching is a feature of the inference server that allows inference requests to be served as they are received. It is preferred in scenarios where low latency is desired at the cost of throughput when the GPU is under utilized. -Dynamic batching is a feature of the inference server that allows inference requests to be combined by the server, so that a batch is created dynamically, resulting in an increased throughput. It is preferred in scenarios where we would like to maximize throughput and GPU utilization at the cost of higher latencies. User can set the [Dynamic Batcher parameters](https://docs.nvidia.com/deeplearning/sdk/tensorrt-inference-server-master-branch-guide/docs/model_configuration.html#dynamic-batcher) `max_queue_delay_microseconds` to indicate the maximum amount of time they are willing to wait and ‘preferred_batchsize’ to indicate their optimal batch sizes in the TensorRT Inference Server model config. +Dynamic batching is a feature of the inference server that allows inference requests to be combined by the server, so that a batch is created dynamically, resulting in an increased throughput. It is preferred in scenarios where we would like to maximize throughput and GPU utilization at the cost of higher latencies. You can set the [Dynamic Batcher parameters](https://docs.nvidia.com/deeplearning/sdk/tensorrt-inference-server-master-branch-guide/docs/model_configuration.html#dynamic-batcher) `max_queue_delay_microseconds` to indicate the maximum amount of time you are willing to wait and ‘preferred_batchsize’ to indicate your optimal batch sizes in the TensorRT Inference Server model config. -The figures 6 & 7 below emphasize the increase in overall throughput with dynamic batching. At low numbers of concurrent requests, the increased throughput comes at the cost of increasing latency as the requests are queued up to `max_queue_delay_microseconds`. The effect of `preferred_batchsize` for dynamic batching is visually depicted by the dip in Server Queue time at integer multiples of the preferred batch sizes. At higher numbers of concurrent requests, observe that the throughput approach a maximum limit as we saturate the GPU utilization. +Figures 6 and 7 emphasize the increase in overall throughput with dynamic batching. At low numbers of concurrent requests, the increased throughput comes at the cost of increasing latency as the requests are queued up to `max_queue_delay_microseconds`. The effect of `preferred_batchsize` for dynamic batching is visually depicted by the dip in Server Queue time at integer multiples of the preferred batch sizes. At higher numbers of concurrent requests, observe that the throughput approach a maximum limit as we saturate the GPU utilization. ![](data/images/trtis_static.png?raw=true) @@ -567,12 +686,11 @@ Figure 6: Latency & Throughput vs Concurrency using Static Batching at `Batch si Figure 7: Latency & Throughput vs Concurrency using Dynamic Batching at `Batch size` = 1, `preferred_batchsize` = [4, 8] and `max_queue_delay_microseconds` = 5000 -3. Model execution instance count +###### Model execution instance count TensorRT Inference Server enables us to launch multiple engines in separate CUDA streams by setting the `instance_group_count` parameter to improve both latency and throughput. Multiple engines are useful when the model doesn’t saturate the GPU allowing the GPU to run multiple instances of the model in parallel. -From the figures 8 & 9 below, we can see a drop in queue time as more models are available to serve an inference request. However, this is countered by an increase in compute time as multiple models compete for resources. Since BERT is a large model which utilizes the majority of the GPU, the benefit to running multiple engines is not seen. - +Figures 8 and 9 show a drop in queue time as more models are available to serve an inference request. However, this is countered by an increase in compute time as multiple models compete for resources. Since BERT is a large model which utilizes the majority of the GPU, the benefit to running multiple engines is not seen. ![](data/images/trtis_ec_1.png?raw=true) @@ -584,9 +702,9 @@ Figure 8: Latency & Throughput vs Concurrency at Batch size = 1, Engine Count = Figure 9: Latency & Throughput vs Concurrency at Batch size = 1, Engine count = 4 (Four copies the model loaded in GPU memory) -#### Run the TensorRT Inference Server and client +#### Running the TensorRT Inference Server and client -The `run_trtis.sh` script exports the Tensorflow BERT model as a `tensorflow_savedmodel` that TensorRT Inference Server accepts, builds a matching [TensorRT Inference Server model config](https://docs.nvidia.com/deeplearning/sdk/tensorrt-inference-server-guide/docs/model_configuration.html#), starts the server on local host in a detached state, runs client and then evaluates the validity of predictions on the basis of exact match and F1 score all in one step. +The `run_trtis.sh` script exports the TensorFlow BERT model as a `tensorflow_savedmodel` that TensorRT Inference Server accepts, builds a matching [TensorRT Inference Server model config](https://docs.nvidia.com/deeplearning/sdk/tensorrt-inference-server-guide/docs/model_configuration.html#), starts the server on local host in a detached state, runs client and then evaluates the validity of predictions on the basis of exact match and F1 score all in one step. ```bash bash scripts/trtis/run_trtis.sh @@ -621,58 +739,123 @@ This script runs 1024 eval iterations by default on the SQuAD v1.1 dataset and e ### Results -The following sections provide details on how we achieved our performance and accuracy in training and inference for Question Answering fine tuning. All results are on BERT-large model for a sequence length of 384 on SQuAD v1.1 unless otherwise mentioned. +The following sections provide details on how we achieved our performance and accuracy in training and inference for pre-training using LAMB optimizer as well as fine tuning for Question Answering. All results are on BERT-large model unless otherwise mentioned. All fine tuning results are on SQuAD v1.1 using a sequence length of 384 unless otherwise mentioned. #### Training accuracy results -##### NVIDIA DGX-1 (8x V100 16G) +##### Training accuracy -Our results were obtained by running the `run_squad.py` training script in the TensorFlow 19.06-py3 NGC container on NVIDIA DGX-1 with 8x V100 16G GPUs. +###### Pre-training accuracy: single-node + +Our results were obtained by running the `scripts/run_pretraining_lamb.sh` training script in the TensorFlow 19.06-py3 NGC container. + +| **DGX System** | **GPUs** | **Batch size / GPU: Phase1, Phase2** | **Accumulation Steps: Phase1, Phase2** | **Final Loss - mixed precision** | **Time to Train - mixed precision (Hrs)** | +|:---:|:---:|:----:|:----:|:---:|:----:| +| DGX1 | 8 | 16, 2 | x, y | 247.51 | 1.43 | +| DGX2 | 16 | 64, 8 | x, y | 108.16 | 1.58 | + +###### Pre-training accuracy: multi-node + +Our results were obtained by running the `scripts/run_pretraining_lamb.sh` training script in the TensorFlow 19.08-py3 NGC container. + +| **DGX System** | **Nodes** | **Precision** | **Batch Size/GPU: Phase1, Phase2** | **Accumulation Steps: Phase1, Phase2** | **Final Loss** | **Time to Train (Hrs)** | +|----------------|-----------|---------------|------------------------------------|----------------------------------------|----------------|-------------------------| +| DGX1 | 4 | FP16 | 32, 2 | 32, 128 | 48.66 | 1.48 | +| DGX1 | 16 | FP16 | 32, 2 | 32, 128 | 24.35 | 1.53 | +| DGX1 | 32 | FP16 | 32, 2 | 32, 128 | 12.98 | 1.61 | +| DGX1 | 32 | FP32 | 32, 2 | 32, 128 | 30.92 | 1.49 | +| DGX2H | 4 | FP16 | 64, 8 | 16, 64 | 25.85 | 1.56 | +| DGX2H | 16 | FP16 | 64, 8 | 8, 32 | 7.9 | 1.57 | +| DGX2H | 32 | FP16 | 64, 8 | 4, 16 | 4.77 | 1.61 | +| DGX2H | 32 | FP32 | 32, 4 | 8, 32 | 12.72 | 1.53 | + +Note: Time to train includes upto 16 minutes of start up time for every restart. Experiments were run on clusters with a maximum wall clock time of 8 hours and 2 hours for DGX1 and DGX2H systems respectively. + +###### Fine-tuning accuracy for SQuAD: NVIDIA DGX-2 (16x V100 32G) + +Our results were obtained by running the `scripts/run_squad.sh` training script in the TensorFlow 19.06-py3 NGC container on NVIDIA DGX-2 with 16x V100 32G GPUs. | **GPUs** | **Batch size / GPU** | **Accuracy - FP32** | **Accuracy - mixed precision** | **Time to Train - FP32 (Hrs)** | **Time to Train - mixed precision (Hrs)** | |:---:|:----:|:----:|:---:|:----:|:----:| -| 8 | 4 |90.84|90.86|0.97|0.64| +| 16 | 4 |90.94|90.84|0.38|0.27| ##### Training stability test +###### Pre-training stability test: NVIDIA DGX-2 (512x V100 32G) + +The following tables compare `Final Loss` scores across 5 different training runs with different seeds, for both FP16. The runs showcase consistent convergence on all 5 seeds with very little deviation. + +| **FP16, 512x GPUs** | **seed 1** | **seed 2** | **seed 3** | **seed 4** | **seed 5** | **mean** | **std** | +|:-----------:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:| +|Final Loss |1.57 |1.598 |1.614 |1.583 |1.584 |1.5898|0.017 | + +###### Fine-tuning SQuAD stability test: NVIDIA DGX-2 (16x V100 32G) + The following tables compare `F1` scores across 5 different training runs with different seeds, for both FP16 and FP32 respectively. The runs showcase consistent convergence on all 5 seeds with very little deviation. | **FP16, 8x GPUs** | **seed 1** | **seed 2** | **seed 3** | **seed 4** | **seed 5** | **mean** | **std** | |:-----------:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:| -|F1 |90.75|90.82|90.89|91.05|90.79|90.86|0.12| -|Exact match|83.85|83.93|83.95|84.25|83.59|83.91|0.24| +|F1 |90.99|90.67|91.00|90.91|90.61|90.84|0.18| +|Exact match|84.12|83.60|84.02|84.05|83.47|83.85|0.29| | **FP32, 8x GPUs** | **seed 1** | **seed 2** | **seed 3** | **seed 4** | **seed 5** | **mean** | **std** | |:-----------:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:| -|F1 |90.70|90.80|90.89|91.08|90.73|90.84|0.15 | -|Exact match|83.82|83.77|84.23|84.19|83.63|83.93|0.27 | +|F1 |90.74|90.82|91.09|91.16|90.89|90.94|0.18 | +|Exact match|83.82|83.64|84.03|84.23|84.03|83.95|0.23 | #### Training performance results -Our results were obtained by running batch sizes up to 3x GPUs on a 16GB V100 and up to 10x GPUs on a 32G V100 with mixed precision. - - ##### Training performance: NVIDIA DGX-1 (8x V100 16G) +###### Pre-training training performance: single-node on 16G + +Our results were obtained by running the `scripts/run_pretraining_lamb.sh` training script in the TensorFlow 19.06-py3 NGC container on NVIDIA DGX-1 with 8x V100 16G GPUs. Performance (in sentences per second) is the steady state throughput. + + +| **GPUs** | **Sequence Length**| **Batch size / GPU: mixed precision, FP32** | **Throughput - mixed precision** | **Throughput - FP32** | **Throughput speedup (FP32 to mixed precision)** | **Weak scaling - mixed precision** | **Weak scaling - FP32** | +|:-------:|:-----:|:-------:|:-------:|:-------:|:-------------:|:------:|:------:| +| 1 | 128 | 16, 8 | 80.1 | 23.1 | 3.47 | 1 | 1 | +| 4 | 128 | 16, 8 | 282.1 | 85 | 3.32 | 3.52 | 3.68 | +| 8 | 128 | 16, 8 | 540.4 | 166.1 | 3.25 | 6.75 | 7.19 | +| 1 | 512 | 4, 2 | 10.9 | 5.3 | 2.06 | 1 | 1 | +| 4 | 512 | 4, 2 | 35.6 | 19.5 | 1.83 | 3.27 | 3.68 | +| 8 | 512 | 4, 2 | 61.1 | 37.9 | 1.61 | 5.61 | 7.15 | + +Note: The respective values for FP32 runs that use a batch size of 16, 4 in sequence lengths 128 and 512 respectively are not available due to out of memory errors that arise. + +###### Pre-training training performance: multi-node on 16G + +Our results were obtained by running the `run.sub` training script in the TensorFlow 19.08-py3 NGC container using multiple NVIDIA DGX-1 with 8x V100 16G GPUs. Performance (in sentences per second) is the steady state throughput. + +| **Nodes** | **Sequence Length**| **Batch size / GPU: mixed precision, FP32** | **Throughput - mixed precision** | **Throughput - FP32** | **Throughput speedup (FP32 to mixed precision)** | **Weak scaling - mixed precision** | **Weak scaling - FP32** | +|:-------:|:-----:|:-------:|:-------:|:-------:|:-------------:|:------:|:------:| +| 1 | 128 | 16,8 | 440.3 | 167.9 | 2.62 | 1.00 | 1.00 | +| 4 | 128 | 16,8 | 1712.3 | 600.7 | 2.85 | 3.89 | 3.58 | +| 16 | 128 | 16,8 | 4833.5 | 2186.2 | 2.21 | 10.98 | 13.02 | +| 32 | 128 | 16,8 | 9742.9 | 4020.9 | 2.42 | 22.13 | 23.95 | +| 1 | 512 | 2,1 | 74.9 | 26 | 2.88 | 0.00 | 0.00 | +| 4 | 512 | 2,1 | 257.5 | 91.2 | 2.82 | 1.00 | 1.00 | +| 16 | 512 | 2,1 | 899.7 | 313 | 2.87 | 3.44 | 3.51 | +| 32 | 512 | 2,1 | 1737.1 | 579.4 | 3.0 | 23.19 | 22.28 | + +Note: The respective values for FP32 runs that use a batch size of 16, 2 in sequence lengths 128 and 512 respectively are not available due to out of memory errors that arise. + +###### Fine-tuning training performance for SQuAD on 16G + Our results were obtained by running the `scripts/run_squad.sh` training script in the TensorFlow 19.06-py3 NGC container on NVIDIA DGX-1 with 8x V100 16G GPUs. Performance (in sentences per second) is the mean throughput from 2 epochs. - | **GPUs** | **Batch size / GPU** | **Throughput - FP32** | **Throughput - mixed precision** | **Throughput speedup (FP32 to mixed precision)** | **Weak scaling - FP32** | **Weak scaling - mixed precision** | |:---:|:---:|:------:|:-----:|:----:|:----:|:----:| -| 1 | 2 | 7.19 |14.37|2.0 |1.0 |1.0 | -| 4 | 2 |25.61 |40.44|1.58 |3.56 |2.81| -| 8 | 2 |49.79 |74.61|1.5 |6.92 |5.19| - - -| **GPUs** | **Batch size / GPU** | **Throughput - FP32** | **Throughput - mixed precision** | **Throughput speedup (FP32 to mixed precision)** | **Weak scaling - FP32** | **Weak scaling - mixed precision** | -|:---:|:---:|:-----:|:-----:|:---:|:---:|:----:| -| 1 | 3 | - |17.2| - | - |1.0 | -| 4 | 3 | - |50.71| - | - |2.95 | -| 8 | 3 | - |91.88| - | - |5.34| +| 1 | 2 | 7.19 |14.37|2.0 |1.0 |1.0 | +| 4 | 2 |25.61 |40.44|1.58|3.56|2.81| +| 8 | 2 |49.79 |74.61|1.5 |6.92|5.19| +| 1 | 3 | - |17.2 | - | - |1.0 | +| 4 | 3 | - |50.71| - | - |2.95| +| 8 | 3 | - |91.88| - | - |5.34| Note: The respective values for FP32 runs that use a batch size of 3 are not available due to out of memory errors that arise. Batch size of 3 is only available on using FP16. @@ -682,6 +865,23 @@ To achieve these same results, follow the [Quick Start Guide](#quick-start-guide ##### Training performance: NVIDIA DGX-1 (8x V100 32G) +###### Pre-training training performance: single-node on 32G + +Our results were obtained by running the `scripts/run_pretraining_lamb.sh` training script in the TensorFlow 19.06-py3 NGC container on NVIDIA DGX-1 with 8x V100 32G GPUs. Performance (in sentences per second) is the steady state throughput. + +| **GPUs** | **Sequence Length**| **Batch size / GPU: mixed precision, FP32** | **Throughput - mixed precision** | **Throughput - FP32** | **Throughput speedup (FP32 to mixed precision)** | **Weak scaling - mixed precision** | **Weak scaling - FP32** | +|:-------:|:-----:|:-------:|:-------:|:-------:|:-------------:|:------:|:------:| +| 1 | 128 | 48,32 | 130.2 | 33.5 | 3.89 | 1 | 1 | +| 4 | 128 | 48,32 | 462.1 | 127.7 | 3.62 | 3.55 | 3.81 | +| 8 | 128 | 48,32 | 874.8 | 255.4 | 3.43 | 6.72 | 7.62 | +| 1 | 512 | 8, 4 | 22.1 | 6.3 | 3.51 | 1 | 1 | +| 4 | 512 | 8, 4 | 80.4 | 24 | 3.35 | 3.64 | 3.81 | +| 8 | 512 | 8, 4 | 155 | 47.1 | 3.29 | 7.01 | 7.48 | + +Note: The respective values for FP32 runs that use a batch size of 48, 8 in sequence lengths 128 and 512 respectively are not available due to out of memory errors that arise. + +###### Fine-tuning training performance for SQuAD on 32G + Our results were obtained by running the `scripts/run_squad.sh` training script in the TensorFlow 19.06-py3 NGC container on NVIDIA DGX-1 with 8x V100 32G GPUs. Performance (in sentences per second) is the mean throughput from 2 epochs. @@ -690,14 +890,9 @@ Our results were obtained by running the `scripts/run_squad.sh` training script | 1 | 4 | 8.74|20.55 |2.35|1.0 |1.0 | | 4 | 4 |32.22|57.58 |1.79|3.69|2.81| | 8 | 4 |62.69|100.22|1.60|7.17|4.88| - - -| **GPUs** | **Batch size / GPU** | **Throughput - FP32** | **Throughput - mixed precision** | **Throughput speedup (FP32 to mixed precision)** | **Weak scaling - FP32** | **Weak scaling - mixed precision** | -|---|---|-----|-------|---|---|----| -| 1 | 10| - | 31.33 | - | - |1.0 | -| 4 | 10| - | 94.19| - | - |3.0| -| 8 | 10| - | 155.53| - | - |4.96| - +| 1 | 10| - |31.33 | - | - |1.0 | +| 4 | 10| - |94.19 | - | - |3.0| +| 8 | 10| - |155.53| - | - |4.96| Note: The respective values for FP32 runs that use a batch size of 10 are not available due to out of memory errors that arise. Batch size of 10 is only available on using FP16. @@ -705,23 +900,54 @@ To achieve these same results, follow the [Quick Start Guide](#quick-start-guide ##### Training performance: NVIDIA DGX-2 (16x V100 32G) +###### Pre-training training performance: single-node on DGX-2 32G + +Our results were obtained by running the `scripts/run_pretraining_lamb.sh` training script in the TensorFlow 19.06-py3 NGC container on NVIDIA DGX-2 with 16x V100 32G GPUs. Performance (in sentences per second) is the steady state throughput. + +| **GPUs** | **Sequence Length**| **Batch size / GPU: mixed precision, FP32** | **Throughput - mixed precision** | **Throughput - FP32** | **Throughput speedup (FP32 to mixed precision)** | **Weak scaling - mixed precision** | **Weak scaling - FP32** | +|:-------:|:-----:|:-------:|:-------:|:-------:|:-------------:|:------:|:------:| +| 1 | 128 | 48,32 | 141.3 | 35.8 | 3.946927374 | 1 | 1 | +| 4 | 128 | 48,32 | 520.4 | 138.8 | 3.749279539 | 3.68 | 3.88 | +| 8 | 128 | 48,32 | 1024 | 275.1 | 3.722282806 | 7.25 | 7.68 | +| 16| 128 | 48,32 | 1907 | 533 | 3.577861163 | 13.5 | 14.89 | +| 1 | 512 | 8, 4 | 23.9 | 6.8 | 3.514705882 | 1 | 1 | +| 4 | 512 | 8, 4 | 89.8 | 25.8 | 3.480620155 | 3.76 | 3.79 | +| 8 | 512 | 8, 4 | 177.2 | 51 | 3.474509804 | 7.41 | 7.5 | +| 16| 512 | 8, 4 | 332.2 | 94.2 | 3.526539278 | 13.9 | 13.85 | + +Note: The respective values for FP32 runs that use a batch size of 48, 8 in sequence lengths 128 and 512 respectively are not available due to out of memory errors that arise. + +###### Pre-training training performance: multi-node on DGX-2 32G + +Our results were obtained by running the `run.sub` training script in the TensorFlow 19.08-py3 NGC container using multiple NVIDIA DGX-2 with 16x V100 32G GPUs. Performance (in sentences per second) is the steady state throughput. + + +| **Nodes** | **Sequence Length**| **Batch size / GPU: mixed precision, FP32** | **Throughput - mixed precision** | **Throughput - FP32** | **Throughput speedup (FP32 to mixed precision)** | **Weak scaling - mixed precision** | **Weak scaling - FP32** | +|:-------:|:-----:|:-------:|:-------:|:-------:|:-------------:|:------:|:------:| +| 1 | 128 | 32, 32 | 1806.7 | 599.3 | 3.01 | 1 | 1 | +| 4 | 128 | 32, 32 | 4088.7 | 1762.3 | 2.32 | 2.26 | 2.94 | +| 16 | 128 | 32, 32 | 14719.6 | 6400.2 | 2.30 | 8.15 | 10.68| +| 32 | 128 | 32, 32 | 27303.6 | 12203.6| 2.24 | 15.11| 20.36| +| 1 | 512 | 8, 4 | 269.7 | 109.6 | 2.46 | 1 | 1 | +| 4 | 512 | 8, 4 | 960.9 | 268.5 | 3.58 | 3.56 | 2.45 | +| 16 | 512 | 8, 4 | 3726.3 | 965 | 3.86 | 13.82| 8.8 | +| 32 | 512 | 8, 4 | 6192.7 | 1800.3 | 3.44 | 22.96| 16.43| + + +###### Fine-tuning training performance for SQuAD on DGX-2 32G + Our results were obtained by running the `scripts/run_squad.sh` training script in the TensorFlow 19.06-py3 NGC container on NVIDIA DGX-2 with 16x V100 32G GPUs. Performance (in sentences per second) is the mean throughput from 2 epochs. | **GPUs** | **Batch size / GPU** | **Throughput - FP32** | **Throughput - mixed precision** | **Throughput speedup (FP32 to mixed precision)** | **Weak scaling - FP32** | **Weak scaling - mixed precision** | |---|---|------|------|----|-----|-----| -| 1| 4 | 9.39 | 20.69 |2.20| 1.0 | 1.0 | -| 4| 4 | 34.63| 62.79|1.81| 3.69| 3.03| -| 8| 4 | 66.95|111.47|1.66| 7.13 | 5.39| -| 16| 4 |126.09|179.09|1.42| 13.43 |8.66| - - - -| **GPUs** | **Batch size / GPU** | **Throughput - FP32** | **Throughput - mixed precision** | **Throughput speedup (FP32 to mixed precision)** | **Weak scaling - FP32** | **Weak scaling - mixed precision** | -|---|---|---|------|---|---|-----| -| 1| 10| - | 32.72| - | - | 1.0 | -| 4| 10| - |100.73| - | - | 3.07 | -| 8| 10| - |168.92| - | - | 5.16 | -| 16| 10| - |249.54| - | - | 7.63 | +| 1| 4 | 9.39 | 20.69 |2.20| 1.0 | 1.0 | +| 4| 4 | 34.63| 62.79|1.81| 3.69 | 3.03 | +| 8| 4 | 66.95|111.47|1.66| 7.13 | 5.39 | +| 16| 4 |126.09|179.09|1.42| 13.43 |8.66 | +| 1| 10| - | 32.72| - | - | 1.0 | +| 4| 10| - |100.73| - | - | 3.07 | +| 8| 10| - |168.92| - | - | 5.16 | +| 16| 10| - |249.54| - | - | 7.63 | Note: The respective values for FP32 runs that use a batch size of 10 are not available due to out of memory errors that arise. Batch size of 10 is only available on using FP16. @@ -729,14 +955,23 @@ Note: The respective values for FP32 runs that use a batch size of 10 are not av To achieve these same results, follow the [Quick Start Guide](#quick-start-guide) outlined above. - #### Inference performance results ##### Inference performance: NVIDIA DGX-1 (1x V100 16G) +###### Pre-training inference performance on 16G + +Our results were obtained by running the `scripts/run_pretraining_lamb.sh` script in the TensorFlow 19.06-py3 NGC container on NVIDIA DGX-1 with 1x V100 16G GPUs. + +| **Sequence Length**| **Batch size / GPU: mixed precision, FP32** | **Throughput - mixed precision** | **Throughput - FP32** | **Throughput speedup (FP32 to mixed precision)** | +|:-----:|:-------:|:-------:|:-------:|:-------------:| +|128 |8, 8 |349.49 | 104.03 | 3.36 | + +###### Fine-tuning inference performance for SQuAD on 16G + Our results were obtained by running the `scripts/finetune_inference_benchmark.sh` script in the TensorFlow 19.06-py3 NGC container on NVIDIA DGX-1 with 1x V100 16G GPUs. Performance numbers (throughput in sentences per second and latency in milliseconds) were averaged from 1024 iterations. Latency is computed as the time taken for a batch to process as they are fed in one after another in the model ie no pipelining. -BERT LARGE Fp16 +BERT LARGE FP16 | Sequence Length | Batch Size | Throughput-Average(sent/sec) | Latency-Average(ms) | Latency-90%(ms) | Latency-95%(ms) | Latency-99%(ms) | |-----------------|------------|------------------------------|---------------------|-----------------|-----------------|-----------------| @@ -762,7 +997,7 @@ BERT LARGE FP32 | 384 | 4 | 40.16 | 99.6 | 100.76 | 101.62 | 103.4 | | 384 | 8 | 42.2 | 189.57 | 190.82 | 191.47 | 193.27 | -BERT BASE Fp16 +BERT BASE FP16 | Sequence Length | Batch Size | Throughput-Average(sent/sec) | Latency-Average(ms) | Latency-90%(ms) | Latency-95%(ms) | Latency-99%(ms) | |-----------------|------------|------------------------------|---------------------|-----------------|-----------------|-----------------| @@ -794,6 +1029,16 @@ To achieve these same results, follow the [Quick Start Guide](#quick-start-guide ##### Inference performance: NVIDIA DGX-1 (1x V100 32G) +###### Pre-training inference performance on 32G + +Our results were obtained by running the `scripts/run_pretraining_lamb.sh` script in the TensorFlow 19.06-py3 NGC container on NVIDIA DGX-1 with 1x V100 32G GPUs. + +| **Sequence Length**| **Batch size / GPU: mixed precision, FP32** | **Throughput - mixed precision** | **Throughput - FP32** | **Throughput speedup (FP32 to mixed precision)** | +|:-----:|:-------:|:-------:|:-------:|:-------------:| +|128 |8, 8 |304.88 | 100.88 | 3.02 | + +###### Fine-tuning inference performance for SQuAD on 32G + Our results were obtained by running the `scripts/finetune_inference_benchmark.sh` training script in the TensorFlow 19.06-py3 NGC container on NVIDIA DGX-1 with 1x V100 32G GPUs. Performance numbers (throughput in sentences per second and latency in milliseconds) were averaged from 1024 iterations. Latency is computed as the time taken for a batch to process as they are fed in one after another in the model ie no pipelining. BERT LARGE FP16 @@ -855,10 +1100,18 @@ To achieve these same results, follow the [Quick Start Guide](#quick-start-guide ##### Inference performance: NVIDIA DGX-2 (1x V100 32G) +###### Pre-training inference performance on DGX-2 32G + +Our results were obtained by running the `scripts/run_pretraining_lamb.sh` script in the TensorFlow 19.06-py3 NGC container on NVIDIA DGX-2 with 1x V100 32G GPUs. + +| **Sequence Length**| **Batch size / GPU: mixed precision, FP32** | **Throughput - mixed precision** | **Throughput - FP32** | **Throughput speedup (FP32 to mixed precision)** | +|:-----:|:-------:|:-------:|:-------:|:-------------:| +|128 |8, 8 |350.63 | 106.36 | 3.30 | + +###### Fine-tuning inference performance for SQuAD on DGX-2 32G + Our results were obtained by running the `scripts/finetune_inference_benchmark.sh` training script in the TensorFlow 19.06-py3 NGC container on NVIDIA DGX-2 with 1x V100 32G GPUs. Performance numbers (throughput in sentences per second and latency in milliseconds) were averaged from 1024 iterations. Latency is computed as the time taken for a batch to process as they are fed in one after another in the model ie no pipelining. - - BERT LARGE FP16 | Sequence Length | Batch Size | Throughput-Average(sent/sec) | Latency-Average(ms) | Latency-90%(ms) | Latency-95%(ms) | Latency-99%(ms) | @@ -900,6 +1153,8 @@ BERT BASE FP16 | 384 | 4 | 318.45 | 12.56 | 12.65 | 12.76 | 13.36 | | 384 | 8 | 380.14 | 21.05 | 21.1 | 21.25 | 21.83 | + + BERT BASE FP32 | Sequence Length | Batch Size | Throughput-Average(sent/sec) | Latency-Average(ms) | Latency-90%(ms) | Latency-95%(ms) | Latency-99%(ms) | @@ -913,18 +1168,26 @@ BERT BASE FP32 | 384 | 4 | 131.72 | 30.37 | 30.64 | 30.77 | 31.26 | | 384 | 8 | 139.75 | 57.25 | 57.74 | 58.08 | 59.53 | + To achieve these same results, follow the [Quick Start Guide](#quick-start-guide) outlined above. ## Release notes + ### Changelog -March 2019 -- Initial release +September 2019 +- Pre-training using LAMB +- Multi Node support +- Fine Tuning support for GLUE (CoLA, MNLI, MRPC) July 2019 - Results obtained using 19.06 - Inference Studies using TensorRT Inference Server +March 2019 +- Initial release + ### Known issues -There are no known issues with this model. \ No newline at end of file + +- There is a known performance regression with the 19.08 release on Tesla V100 boards with 16 GB memory, smaller batch sizes may be a better choice for this model on these GPUs with the 19.08 release. 32 GB GPUs are not affected. diff --git a/TensorFlow/LanguageModeling/BERT/configurations.yml b/TensorFlow/LanguageModeling/BERT/configurations.yml new file mode 100644 index 00000000..ec4639b3 --- /dev/null +++ b/TensorFlow/LanguageModeling/BERT/configurations.yml @@ -0,0 +1,218 @@ +# Copyright (c) 2018-2019, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#1 DGX1 phase1 +bert--DGX1: + <<: *BERT_ON_CLUSTER + <<: *DGX1 + variables: + <<: *DGX1_VARS + NNODES: "1" + BATCHSIZE: "8" + LEARNING_RATE: "7.5e-4" + NUM_ACCUMULATION_STEPS: "1024" + PHASE: "1" + +#4 DGX1 phase1 +bert--DGX1_n4: + <<: *BERT_ON_CLUSTER + <<: *DGX1 + variables: + <<: *DGX1_VARS + NNODES: "4" + BATCHSIZE: "8" + LEARNING_RATE: "1.875e-4" + NUM_ACCUMULATION_STEPS: "256" + PHASE: "1" + +#16 DGX1 phase1 +bert--DGX1_n16: + <<: *BERT_ON_CLUSTER + <<: *DGX1 + variables: + <<: *DGX1_VARS + NNODES: "16" + BATCHSIZE: "8" + LEARNING_RATE: "4.6875e-5" + NUM_ACCUMULATION_STEPS: "64" + PHASE: "1" + +#32 DGX1 phase1 +bert--DGX1_n32: + <<: *BERT_ON_CLUSTER + <<: *DGX1 + variables: + <<: *DGX1_VARS + NNODES: "32" + BATCHSIZE: "8" + LEARNING_RATE: "2.34375e-5" + NUM_ACCUMULATION_STEPS: "32" + PHASE: "1" + +#1 DGX2 phase1 +bert--DGX2: + <<: *BERT_ON_CLUSTER + <<: *DGX2 + variables: + <<: *DGX2_VARS + NNODES: "1" + BATCHSIZE: "32" + LEARNING_RATE: "3.75e-4" + NUM_ACCUMULATION_STEPS: "128" + PHASE: "1" + +#4 DGX2 phase1 +bert--DGX2_n4: + <<: *BERT_ON_CLUSTER + <<: *DGX2 + variables: + <<: *DGX2_VARS + NNODES: "4" + BATCHSIZE: "32" + LEARNING_RATE: "9.375e-5" + NUM_ACCUMULATION_STEPS: "32" + PHASE: "1" + +#16 DGX2 phase1 +bert--DGX2_n16: + <<: *BERT_ON_CLUSTER + <<: *DGX2 + variables: + <<: *DGX2_VARS + NNODES: "16" + BATCHSIZE: "256" + LEARNING_RATE: "3.75e-4" + NUM_ACCUMULATION_STEPS: "4" + PHASE: "1" + +#32 DGX2 phase1 +bert--DGX2_n32: + <<: *BERT_ON_CLUSTER + <<: *DGX2 + variables: + <<: *DGX2_VARS + NNODES: "32" + BATCHSIZE: "32" + LEARNING_RATE: "2.34375e-5" + NUM_ACCUMULATION_STEPS: "8" + PHASE: "1" + +#64 DGX2 phase1 +bert--DGX2_n64: + <<: *BERT_ON_CLUSTER + <<: *DGX2 + variables: + <<: *DGX2_VARS + NNODES: "32" + BATCHSIZE: "32" + LEARNING_RATE: "1.171875e-5" + NUM_ACCUMULATION_STEPS: "4" + PHASE: "1" + +#1 DGX1 phase2 +bert--DGX1_n1p2: + <<: *BERT_ON_CLUSTER + <<: *DGX1 + variables: + <<: *DGX1_VARS + NNODES: "1" + BATCHSIZE: "2" + LEARNING_RATE: "5e-4" + NUM_ACCUMULATION_STEPS: "4096" + PHASE: "2" + +#4 DGX1 phase2 +bert--DGX1_n4p2: + <<: *BERT_ON_CLUSTER + <<: *DGX1 + variables: + <<: *DGX1_VARS + NNODES: "4" + BATCHSIZE: "2" + LEARNING_RATE: "1.25e-4" + NUM_ACCUMULATION_STEPS: "512" + PHASE: "2" + +#16 DGX1 phase2 +bert--DGX1_n16p2: + <<: *BERT_ON_CLUSTER + <<: *DGX1 + variables: + <<: *DGX1_VARS + NNODES: "16" + BATCHSIZE: "2" + LEARNING_RATE: "1.5625e-5" + NUM_ACCUMULATION_STEPS: "128" + PHASE: "2" + +#32 DGX1 phase2 +bert--DGX1_n32p2: + <<: *BERT_ON_CLUSTER + <<: *DGX1 + variables: + <<: *DGX1_VARS + NNODES: "32" + BATCHSIZE: "2" + LEARNING_RATE: "1.5625e-5" + NUM_ACCUMULATION_STEPS: "64" + PHASE: "2" + +#1 DGX2 phase2 +bert--DGX2_n1p2: + <<: *BERT_ON_CLUSTER + <<: *DGX2 + variables: + <<: *DGX2_VARS + NNODES: "1" + BATCHSIZE: "8" + LEARNING_RATE: "2.5e-5" + NUM_ACCUMULATION_STEPS: "256" + PHASE: "2" + +#4 DGX2 phase2 +bert--DGX2_n4p2: + <<: *BERT_ON_CLUSTER + <<: *DGX2 + variables: + <<: *DGX2_VARS + NNODES: "4" + BATCHSIZE: "8" + LEARNING_RATE: "6.25e-5" + NUM_ACCUMULATION_STEPS: "64" + PHASE: "2" + +#16 DGX2 phase2 +bert--DGX2_n16p2: + <<: *BERT_ON_CLUSTER + <<: *DGX2 + variables: + <<: *DGX2_VARS + NNODES: "16" + BATCHSIZE: "8" + LEARNING_RATE: "1.5625e-5" + NUM_ACCUMULATION_STEPS: "16" + PHASE: "2" + +#32 DGX2 phase2 +bert--DGX2_n32p2: + <<: *BERT_ON_CLUSTER + <<: *DGX2 + variables: + <<: *DGX2_VARS + NNODES: "32" + BATCHSIZE: "8" + LEARNING_RATE: "7.8125e-6" + NUM_ACCUMULATION_STEPS: "8" + PHASE: "2" + diff --git a/TensorFlow/LanguageModeling/BERT/data/BooksDownloader.py b/TensorFlow/LanguageModeling/BERT/data/BooksDownloader.py new file mode 100644 index 00000000..53ee6c43 --- /dev/null +++ b/TensorFlow/LanguageModeling/BERT/data/BooksDownloader.py @@ -0,0 +1,26 @@ +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import subprocess + +class BooksDownloader: + def __init__(self, save_path): + self.save_path = save_path + pass + + + def download(self): + bookscorpus_download_command = 'python3 /workspace/bookcorpus/download_files.py --list /workspace/bookcorpus/url_list.jsonl --out' + bookscorpus_download_command += ' ' + self.save_path + '/bookscorpus' + bookscorpus_download_command += ' --trash-bad-count' + bookscorpus_download_process = subprocess.run(bookscorpus_download_command, shell=True, check=True) \ No newline at end of file diff --git a/TensorFlow/LanguageModeling/BERT/data/BookscorpusTextFormatting.py b/TensorFlow/LanguageModeling/BERT/data/BookscorpusTextFormatting.py new file mode 100644 index 00000000..22e48d4b --- /dev/null +++ b/TensorFlow/LanguageModeling/BERT/data/BookscorpusTextFormatting.py @@ -0,0 +1,32 @@ +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import glob +import os + +class BookscorpusTextFormatting: + def __init__(self, books_path, output_filename, recursive = False): + self.books_path = books_path + self.recursive = recursive + self.output_filename = output_filename + + + # This puts one book per line + def merge(self): + with open(self.output_filename, mode='w', newline='\n') as ofile: + for filename in glob.glob(self.books_path + '/' + '*.txt', recursive=True): + with open(filename, mode='r', encoding='utf-8-sig', newline='\n') as file: + for line in file: + if line.strip() != '': + ofile.write(line.strip() + ' ') + ofile.write("\n\n") \ No newline at end of file diff --git a/TensorFlow/LanguageModeling/BERT/data/Downloader.py b/TensorFlow/LanguageModeling/BERT/data/Downloader.py new file mode 100644 index 00000000..20b48c1d --- /dev/null +++ b/TensorFlow/LanguageModeling/BERT/data/Downloader.py @@ -0,0 +1,120 @@ +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from GooglePretrainedWeightDownloader import GooglePretrainedWeightDownloader +from NVIDIAPretrainedWeightDownloader import NVIDIAPretrainedWeightDownloader +from WikiDownloader import WikiDownloader +from BooksDownloader import BooksDownloader +from GLUEDownloader import GLUEDownloader +from SquadDownloader import SquadDownloader +from PubMedDownloader import PubMedDownloader + +class Downloader: + def __init__(self, dataset_name, save_path): + self.dataset_name = dataset_name + self.save_path = save_path + + + def download(self): + if self.dataset_name == 'bookscorpus': + self.download_bookscorpus() + + elif self.dataset_name == 'wikicorpus_en': + self.download_wikicorpus('en') + + elif self.dataset_name == 'wikicorpus_zh': + self.download_wikicorpus('zh') + + elif self.dataset_name == 'pubmed_baseline': + self.download_pubmed('baseline') + + elif self.dataset_name == 'pubmed_daily_update': + self.download_pubmed('daily_update') + + elif self.dataset_name == 'pubmed_fulltext': + self.download_pubmed('fulltext') + + elif self.dataset_name == 'pubmed_open_access': + self.download_pubmed('open_access') + + elif self.dataset_name == 'google_pretrained_weights': + self.download_google_pretrained_weights() + + elif self.dataset_name == 'nvidia_pretrained_weights': + self.download_nvidia_pretrained_weights() + + elif self.dataset_name == 'MRPC': + self.download_glue(self.dataset_name) + + elif self.dataset_name == 'MNLI': + self.download_glue(self.dataset_name) + + elif self.dataset_name == 'CoLA': + self.download_glue(self.dataset_name) + + elif self.dataset_name == 'squad': + self.download_squad() + + elif self.dataset_name == 'all': + self.download_bookscorpus() + self.download_wikicorpus('en') + self.download_wikicorpus('zh') + self.download_pubmed('baseline') + self.download_pubmed('daily_update') + self.download_pubmed('fulltext') + self.download_pubmed('open_access') + self.download_google_pretrained_weights() + self.download_nvidia_pretrained_weights() + self.download_glue("CoLA") + self.download_glue("MNLI") + self.download_glue("MRPC") + self.download_squad() + + else: + print(self.dataset_name) + assert False, 'Unknown dataset_name provided to downloader' + + + def download_bookscorpus(self): + downloader = BooksDownloader(self.save_path) + downloader.download() + + + def download_wikicorpus(self, language): + downloader = WikiDownloader(language, self.save_path) + downloader.download() + + + def download_pubmed(self, subset): + downloader = PubMedDownloader(subset, self.save_path) + downloader.download() + + + def download_google_pretrained_weights(self): + downloader = GooglePretrainedWeightDownloader(self.save_path) + downloader.download() + + + def download_nvidia_pretrained_weights(self): + downloader = NVIDIAPretrainedWeightDownloader(self.save_path) + downloader.download() + + + def download_glue(self, glue_task_name): + downloader = GLUEDownloader(glue_task_name, self.save_path) + downloader.download() + + + def download_squad(self): + downloader = SquadDownloader(self.save_path) + downloader.download() diff --git a/TensorFlow/LanguageModeling/BERT/data/GLUEDownloader.py b/TensorFlow/LanguageModeling/BERT/data/GLUEDownloader.py new file mode 100644 index 00000000..e270b371 --- /dev/null +++ b/TensorFlow/LanguageModeling/BERT/data/GLUEDownloader.py @@ -0,0 +1,109 @@ +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import bz2 +import os +import urllib +import sys +import zipfile +import io + +URLLIB=urllib +if sys.version_info >= (3, 0): + URLLIB=urllib.request + +class GLUEDownloader: + def __init__(self, task, save_path): + + # Documentation - Download link obtained from here: https://github.com/nyu-mll/GLUE-baselines/blob/master/download_glue_data.py + + self.TASK2PATH = {"CoLA":'https://firebasestorage.googleapis.com/v0/b/mtl-sentence-representations.appspot.com/o/data%2FCoLA.zip?alt=media&token=46d5e637-3411-4188-bc44-5809b5bfb5f4', + "SST":'https://firebasestorage.googleapis.com/v0/b/mtl-sentence-representations.appspot.com/o/data%2FSST-2.zip?alt=media&token=aabc5f6b-e466-44a2-b9b4-cf6337f84ac8', + "MRPC":{"mrpc_dev": 'https://firebasestorage.googleapis.com/v0/b/mtl-sentence-representations.appspot.com/o/data%2Fmrpc_dev_ids.tsv?alt=media&token=ec5c0836-31d5-48f4-b431-7480817f1adc', + "mrpc_train": 'https://dl.fbaipublicfiles.com/senteval/senteval_data/msr_paraphrase_train.txt', + "mrpc_test": 'https://dl.fbaipublicfiles.com/senteval/senteval_data/msr_paraphrase_test.txt'}, + "QQP":'https://firebasestorage.googleapis.com/v0/b/mtl-sentence-representations.appspot.com/o/data%2FQQP.zip?alt=media&token=700c6acf-160d-4d89-81d1-de4191d02cb5', + "STS":'https://firebasestorage.googleapis.com/v0/b/mtl-sentence-representations.appspot.com/o/data%2FSTS-B.zip?alt=media&token=bddb94a7-8706-4e0d-a694-1109e12273b5', + "MNLI":'https://firebasestorage.googleapis.com/v0/b/mtl-sentence-representations.appspot.com/o/data%2FMNLI.zip?alt=media&token=50329ea1-e339-40e2-809c-10c40afff3ce', + "SNLI":'https://firebasestorage.googleapis.com/v0/b/mtl-sentence-representations.appspot.com/o/data%2FSNLI.zip?alt=media&token=4afcfbb2-ff0c-4b2d-a09a-dbf07926f4df', + "QNLI":'https://firebasestorage.googleapis.com/v0/b/mtl-sentence-representations.appspot.com/o/data%2FQNLI.zip?alt=media&token=c24cad61-f2df-4f04-9ab6-aa576fa829d0', + "RTE":'https://firebasestorage.googleapis.com/v0/b/mtl-sentence-representations.appspot.com/o/data%2FRTE.zip?alt=media&token=5efa7e85-a0bb-4f19-8ea2-9e1840f077fb', + "WNLI":'https://firebasestorage.googleapis.com/v0/b/mtl-sentence-representations.appspot.com/o/data%2FWNLI.zip?alt=media&token=068ad0a0-ded7-4bd7-99a5-5e00222e0faf', + "diagnostic":'https://storage.googleapis.com/mtl-sentence-representations.appspot.com/tsvsWithoutLabels%2FAX.tsv?GoogleAccessId=firebase-adminsdk-0khhl@mtl-sentence-representations.iam.gserviceaccount.com&Expires=2498860800&Signature=DuQ2CSPt2Yfre0C%2BiISrVYrIFaZH1Lc7hBVZDD4ZyR7fZYOMNOUGpi8QxBmTNOrNPjR3z1cggo7WXFfrgECP6FBJSsURv8Ybrue8Ypt%2FTPxbuJ0Xc2FhDi%2BarnecCBFO77RSbfuz%2Bs95hRrYhTnByqu3U%2FYZPaj3tZt5QdfpH2IUROY8LiBXoXS46LE%2FgOQc%2FKN%2BA9SoscRDYsnxHfG0IjXGwHN%2Bf88q6hOmAxeNPx6moDulUF6XMUAaXCSFU%2BnRO2RDL9CapWxj%2BDl7syNyHhB7987hZ80B%2FwFkQ3MEs8auvt5XW1%2Bd4aCU7ytgM69r8JDCwibfhZxpaa4gd50QXQ%3D%3D'} + + + self.save_path = save_path + if not os.path.exists(self.save_path): + os.makedirs(self.save_path) + + self.task = task + + def download(self): + + if self.task == 'MRPC': + self.download_mrpc() + elif self.task == 'diagnostic': + self.download_diagnostic() + else: + self.download_and_extract(self.task) + + def download_and_extract(self, task): + print("Downloading and extracting %s..." % task) + data_file = "%s.zip" % task + URLLIB.urlretrieve(self.TASK2PATH[task], data_file) + print(data_file,"\n\n\n") + with zipfile.ZipFile(data_file) as zip_ref: + zip_ref.extractall(self.save_path) + os.remove(data_file) + print("\tCompleted!") + + def download_mrpc(self): + print("Processing MRPC...") + mrpc_dir = os.path.join(self.save_path, "MRPC") + if not os.path.isdir(mrpc_dir): + os.mkdir(mrpc_dir) + + mrpc_train_file = os.path.join(mrpc_dir, "msr_paraphrase_train.txt") + mrpc_dev_file = os.path.join(mrpc_dir, "dev_ids.tsv") + mrpc_test_file = os.path.join(mrpc_dir, "msr_paraphrase_test.txt") + + URLLIB.urlretrieve(self.TASK2PATH["MRPC"]["mrpc_train"], mrpc_train_file) + URLLIB.urlretrieve(self.TASK2PATH["MRPC"]["mrpc_test"], mrpc_test_file) + URLLIB.urlretrieve(self.TASK2PATH["MRPC"]["mrpc_dev"], mrpc_dev_file) + + dev_ids = [] + with io.open(os.path.join(mrpc_dir, "dev_ids.tsv"), encoding='utf-8') as ids_fh: + for row in ids_fh: + dev_ids.append(row.strip().split('\t')) + + with io.open(mrpc_train_file, encoding='utf-8') as data_fh, \ + io.open(os.path.join(mrpc_dir, "train.tsv"), 'w', encoding='utf-8') as train_fh, \ + io.open(os.path.join(mrpc_dir, "dev.tsv"), 'w', encoding='utf-8') as dev_fh: + header = data_fh.readline() + train_fh.write(header) + dev_fh.write(header) + for row in data_fh: + label, id1, id2, s1, s2 = row.strip().split('\t') + if [id1, id2] in dev_ids: + dev_fh.write("%s\t%s\t%s\t%s\t%s\n" % (label, id1, id2, s1, s2)) + else: + train_fh.write("%s\t%s\t%s\t%s\t%s\n" % (label, id1, id2, s1, s2)) + + with io.open(mrpc_test_file, encoding='utf-8') as data_fh, \ + io.open(os.path.join(mrpc_dir, "test.tsv"), 'w', encoding='utf-8') as test_fh: + header = data_fh.readline() + test_fh.write("index\t#1 ID\t#2 ID\t#1 String\t#2 String\n") + for idx, row in enumerate(data_fh): + label, id1, id2, s1, s2 = row.strip().split('\t') + test_fh.write("%d\t%s\t%s\t%s\t%s\n" % (idx, id1, id2, s1, s2)) + print("\tCompleted!") \ No newline at end of file diff --git a/TensorFlow/LanguageModeling/BERT/data/GooglePretrainedWeightDownloader.py b/TensorFlow/LanguageModeling/BERT/data/GooglePretrainedWeightDownloader.py new file mode 100644 index 00000000..bb0684d3 --- /dev/null +++ b/TensorFlow/LanguageModeling/BERT/data/GooglePretrainedWeightDownloader.py @@ -0,0 +1,158 @@ +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import hashlib +import os +import urllib.request +import zipfile + +class GooglePretrainedWeightDownloader: + def __init__(self, save_path): + self.save_path = save_path + '/google_pretrained_weights' + + if not os.path.exists(self.save_path): + os.makedirs(self.save_path) + + # Download urls + self.model_urls = { + 'bert_base_uncased': ('https://storage.googleapis.com/bert_models/2018_10_18/uncased_L-12_H-768_A-12.zip', 'uncased_L-12_H-768_A-12.zip'), + 'bert_large_uncased': ('https://storage.googleapis.com/bert_models/2018_10_18/uncased_L-24_H-1024_A-16.zip', 'uncased_L-24_H-1024_A-16.zip'), + 'bert_base_cased': ('https://storage.googleapis.com/bert_models/2018_10_18/cased_L-12_H-768_A-12.zip', 'cased_L-12_H-768_A-12.zip'), + 'bert_large_cased': ('https://storage.googleapis.com/bert_models/2018_10_18/cased_L-24_H-1024_A-16.zip', 'cased_L-24_H-1024_A-16.zip'), + 'bert_base_multilingual_cased': ('https://storage.googleapis.com/bert_models/2018_11_23/multi_cased_L-12_H-768_A-12.zip', 'multi_cased_L-12_H-768_A-12.zip'), + 'bert_large_multilingual_uncased': ('https://storage.googleapis.com/bert_models/2018_11_03/multilingual_L-12_H-768_A-12.zip', 'multilingual_L-12_H-768_A-12.zip'), + 'bert_base_chinese': ('https://storage.googleapis.com/bert_models/2018_11_03/chinese_L-12_H-768_A-12.zip', 'chinese_L-12_H-768_A-12.zip') + } + + # SHA256sum verification for file download integrity (and checking for changes from the download source over time) + self.bert_base_uncased_sha = { + 'bert_config.json': '7b4e5f53efbd058c67cda0aacfafb340113ea1b5797d9ce6ee411704ba21fcbc', + 'bert_model.ckpt.data-00000-of-00001': '58580dc5e0bf0ae0d2efd51d0e8272b2f808857f0a43a88aaf7549da6d7a8a84', + 'bert_model.ckpt.index': '04c1323086e2f1c5b7c0759d8d3e484afbb0ab45f51793daab9f647113a0117b', + 'bert_model.ckpt.meta': 'dd5682170a10c3ea0280c2e9b9a45fee894eb62da649bbdea37b38b0ded5f60e', + 'vocab.txt': '07eced375cec144d27c900241f3e339478dec958f92fddbc551f295c992038a3', + } + + self.bert_large_uncased_sha = { + 'bert_config.json': 'bfa42236d269e2aeb3a6d30412a33d15dbe8ea597e2b01dc9518c63cc6efafcb', + 'bert_model.ckpt.data-00000-of-00001': 'bc6b3363e3be458c99ecf64b7f472d2b7c67534fd8f564c0556a678f90f4eea1', + 'bert_model.ckpt.index': '68b52f2205ffc64dc627d1120cf399c1ef1cbc35ea5021d1afc889ffe2ce2093', + 'bert_model.ckpt.meta': '6fcce8ff7628f229a885a593625e3d5ff9687542d5ef128d9beb1b0c05edc4a1', + 'vocab.txt': '07eced375cec144d27c900241f3e339478dec958f92fddbc551f295c992038a3', + } + + self.bert_base_cased_sha = { + 'bert_config.json': 'f11dfb757bea16339a33e1bf327b0aade6e57fd9c29dc6b84f7ddb20682f48bc', + 'bert_model.ckpt.data-00000-of-00001': '734d5a1b68bf98d4e9cb6b6692725d00842a1937af73902e51776905d8f760ea', + 'bert_model.ckpt.index': '517d6ef5c41fc2ca1f595276d6fccf5521810d57f5a74e32616151557790f7b1', + 'bert_model.ckpt.meta': '5f8a9771ff25dadd61582abb4e3a748215a10a6b55947cbb66d0f0ba1694be98', + 'vocab.txt': 'eeaa9875b23b04b4c54ef759d03db9d1ba1554838f8fb26c5d96fa551df93d02', + } + + self.bert_large_cased_sha = { + 'bert_config.json': '7adb2125c8225da495656c982fd1c5f64ba8f20ad020838571a3f8a954c2df57', + 'bert_model.ckpt.data-00000-of-00001': '6ff33640f40d472f7a16af0c17b1179ca9dcc0373155fb05335b6a4dd1657ef0', + 'bert_model.ckpt.index': 'ef42a53f577fbe07381f4161b13c7cab4f4fc3b167cec6a9ae382c53d18049cf', + 'bert_model.ckpt.meta': 'd2ddff3ed33b80091eac95171e94149736ea74eb645e575d942ec4a5e01a40a1', + 'vocab.txt': 'eeaa9875b23b04b4c54ef759d03db9d1ba1554838f8fb26c5d96fa551df93d02', + } + + self.bert_base_multilingual_cased_sha = { + 'bert_config.json': 'e76c3964bc14a8bb37a5530cdc802699d2f4a6fddfab0611e153aa2528f234f0', + 'bert_model.ckpt.data-00000-of-00001': '55b8a2df41f69c60c5180e50a7c31b7cdf6238909390c4ddf05fbc0d37aa1ac5', + 'bert_model.ckpt.index': '7d8509c2a62b4e300feb55f8e5f1eef41638f4998dd4d887736f42d4f6a34b37', + 'bert_model.ckpt.meta': '95e5f1997e8831f1c31e5cf530f1a2e99f121e9cd20887f2dce6fe9e3343e3fa', + 'vocab.txt': 'fe0fda7c425b48c516fc8f160d594c8022a0808447475c1a7c6d6479763f310c', + } + + self.bert_large_multilingual_uncased_sha = { + 'bert_config.json': '49063bb061390211d2fdd108cada1ed86faa5f90b80c8f6fdddf406afa4c4624', + 'bert_model.ckpt.data-00000-of-00001': '3cd83912ebeb0efe2abf35c9f1d5a515d8e80295e61c49b75c8853f756658429', + 'bert_model.ckpt.index': '87c372c1a3b1dc7effaaa9103c80a81b3cbab04c7933ced224eec3b8ad2cc8e7', + 'bert_model.ckpt.meta': '27f504f34f02acaa6b0f60d65195ec3e3f9505ac14601c6a32b421d0c8413a29', + 'vocab.txt': '87b44292b452f6c05afa49b2e488e7eedf79ea4f4c39db6f2f4b37764228ef3f', + } + + self.bert_base_chinese_sha = { + 'bert_config.json': '7aaad0335058e2640bcb2c2e9a932b1cd9da200c46ea7b8957d54431f201c015', + 'bert_model.ckpt.data-00000-of-00001': '756699356b78ad0ef1ca9ba6528297bcb3dd1aef5feadd31f4775d7c7fc989ba', + 'bert_model.ckpt.index': '46315546e05ce62327b3e2cd1bed22836adcb2ff29735ec87721396edb21b82e', + 'bert_model.ckpt.meta': 'c0f8d51e1ab986604bc2b25d6ec0af7fd21ff94cf67081996ec3f3bf5d823047', + 'vocab.txt': '45bbac6b341c319adc98a532532882e91a9cefc0329aa57bac9ae761c27b291c', + } + + # Relate SHA to urls for loop below + self.model_sha = { + 'bert_base_uncased': self.bert_base_uncased_sha, + 'bert_large_uncased': self.bert_large_uncased_sha, + 'bert_base_cased': self.bert_base_cased_sha, + 'bert_large_cased': self.bert_large_cased_sha, + 'bert_base_multilingual_cased': self.bert_base_multilingual_cased_sha, + 'bert_large_multilingual_uncased': self.bert_large_multilingual_uncased_sha, + 'bert_base_chinese': self.bert_base_chinese_sha + } + + # Helper to get sha256sum of a file + def sha256sum(self, filename): + h = hashlib.sha256() + b = bytearray(128*1024) + mv = memoryview(b) + with open(filename, 'rb', buffering=0) as f: + for n in iter(lambda : f.readinto(mv), 0): + h.update(mv[:n]) + + return h.hexdigest() + + def download(self): + # Iterate over urls: download, unzip, verify sha256sum + found_mismatch_sha = False + for model in self.model_urls: + url = self.model_urls[model][0] + file = self.save_path + '/' + self.model_urls[model][1] + + print('Downloading', url) + response = urllib.request.urlopen(url) + with open(file, 'wb') as handle: + handle.write(response.read()) + + print('Unzipping', file) + zip = zipfile.ZipFile(file, 'r') + zip.extractall(self.save_path) + zip.close() + + sha_dict = self.model_sha[model] + for extracted_file in sha_dict: + sha = sha_dict[extracted_file] + if sha != self.sha256sum(file[:-4] + '/' + extracted_file): + found_mismatch_sha = True + print('SHA256sum does not match on file:', extracted_file, 'from download url:', url) + else: + print(file[:-4] + '/' + extracted_file, '\t', 'verified') + + if not found_mismatch_sha: + print("All downloads pass sha256sum verification.") + + def serialize(self): + pass + + def deserialize(self): + pass + + def listAvailableWeights(self): + print("Available Weight Datasets") + for item in self.model_urls: + print(item) + + def listLocallyStoredWeights(self): + pass + diff --git a/TensorFlow/LanguageModeling/BERT/data/NVIDIAPretrainedWeightDownloader.py b/TensorFlow/LanguageModeling/BERT/data/NVIDIAPretrainedWeightDownloader.py new file mode 100644 index 00000000..13c9a320 --- /dev/null +++ b/TensorFlow/LanguageModeling/BERT/data/NVIDIAPretrainedWeightDownloader.py @@ -0,0 +1,27 @@ +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os + +class NVIDIAPretrainedWeightDownloader: + def __init__(self, save_path): + self.save_path = save_path + '/nvidia_pretrained_weights' + + if not os.path.exists(self.save_path): + os.makedirs(self.save_path) + + pass + + + def download(self): + assert False, 'NVIDIAPretrainedWeightDownloader not implemented yet.' \ No newline at end of file diff --git a/TensorFlow/LanguageModeling/BERT/data/PubMedDownloader.py b/TensorFlow/LanguageModeling/BERT/data/PubMedDownloader.py new file mode 100644 index 00000000..a2aef07a --- /dev/null +++ b/TensorFlow/LanguageModeling/BERT/data/PubMedDownloader.py @@ -0,0 +1,93 @@ +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import bz2 +import glob +import gzip +import os +import urllib.request +import shutil +import sys + +class PubMedDownloader: + def __init__(self, subset, save_path): + self.subset = subset + # Modifying self.save_path in two steps to handle creation of subdirectories + self.save_path = save_path + '/pubmed' + '/' + + if not os.path.exists(self.save_path): + os.makedirs(self.save_path) + + self.save_path = self.save_path + '/' + subset + + if not os.path.exists(self.save_path): + os.makedirs(self.save_path) + + self.download_urls = { + 'baseline' : 'ftp://ftp.ncbi.nlm.nih.gov/pubmed/baseline/', + 'daily_update' : 'ftp://ftp.ncbi.nlm.nih.gov/pubmed/updatefiles/', + 'fulltext' : 'ftp://ftp.ncbi.nlm.nih.gov/pub/pmc/oa_bulk/', + 'open_access' : 'ftp://ftp.ncbi.nlm.nih.gov/pub/pmc/oa_bulk/' + } + + + def download(self): + print('subset:', self.subset) + url = self.download_urls[self.subset] + self.download_files(url) + self.extract_files() + + + def download_files(self, url): + url = self.download_urls[self.subset] + output = os.popen('curl ' + url).read() + + if self.subset == 'fulltext' or self.subset == 'open_access': + line_split = 'comm_use' if self.subset == 'fulltext' else 'non_comm_use' + for line in output.splitlines(): + if line[-10:] == 'xml.tar.gz' and \ + line.split(' ')[-1].split('.')[0] == line_split: + file = os.path.join(self.save_path, line.split(' ')[-1]) + if not os.path.isfile(file): + print('Downloading', file) + response = urllib.request.urlopen(url + line.split(' ')[-1]) + with open(file, "wb") as handle: + handle.write(response.read()) + + elif self.subset == 'baseline' or self.subset == 'daily_update': + for line in output.splitlines(): + if line[-3:] == '.gz': + file = os.path.join(self.save_path, line.split(' ')[-1]) + if not os.path.isfile(file): + print('Downloading', file) + response = urllib.request.urlopen(url + line.split(' ')[-1]) + with open(file, "wb") as handle: + handle.write(response.read()) + else: + assert False, 'Invalid PubMed dataset/subset specified.' + + def extract_files(self): + files = glob.glob(self.save_path + '/*.xml.gz') + + for file in files: + print('file:', file) + input = gzip.GzipFile(file, mode='rb') + s = input.read() + input.close() + + out = open(file[:-3], mode='wb') + out.write(s) + out.close() + + + diff --git a/TensorFlow/LanguageModeling/BERT/data/PubMedTextFormatting.py b/TensorFlow/LanguageModeling/BERT/data/PubMedTextFormatting.py new file mode 100644 index 00000000..6caded2f --- /dev/null +++ b/TensorFlow/LanguageModeling/BERT/data/PubMedTextFormatting.py @@ -0,0 +1,44 @@ +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import glob +import os +import pubmed_parser as pmp + +class PubMedTextFormatting: + def __init__(self, pubmed_path, output_filename, recursive = False): + self.pubmed_path = pubmed_path + self.recursive = recursive + self.output_filename = output_filename + + + # This puts one article per line + def merge(self): + print('PubMed path:', self.pubmed_path) + + with open(self.output_filename, mode='w', newline='\n') as ofile: + for filename in glob.glob(self.pubmed_path + '/*.xml', recursive=self.recursive): + print('file:', filename) + dicts_out = pmp.parse_medline_xml(filename) + for dict_out in dicts_out: + if not dict_out['abstract']: + continue + try: + for line in dict_out['abstract'].splitlines(): + if len(line) < 30: + continue + ofile.write(line.strip() + " ") + ofile.write("\n\n") + except: + ofile.write("\n\n") + continue diff --git a/TensorFlow/LanguageModeling/BERT/data/SquadDownloader.py b/TensorFlow/LanguageModeling/BERT/data/SquadDownloader.py new file mode 100644 index 00000000..6d64ffc6 --- /dev/null +++ b/TensorFlow/LanguageModeling/BERT/data/SquadDownloader.py @@ -0,0 +1,54 @@ +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import bz2 +import os +import urllib.request +import sys + +class SquadDownloader: + def __init__(self, save_path): + self.save_path = save_path + '/squad' + + if not os.path.exists(self.save_path): + os.makedirs(self.save_path) + + if not os.path.exists(self.save_path + '/v1.1'): + os.makedirs(self.save_path + '/v1.1') + + if not os.path.exists(self.save_path + '/v2.0'): + os.makedirs(self.save_path + '/v2.0') + + self.download_urls = { + 'https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v1.1.json' : 'v1.1/train-v1.1.json', + 'https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json' : 'v1.1/dev-v1.1.json', + 'https://worksheets.codalab.org/rest/bundles/0xbcd57bee090b421c982906709c8c27e1/contents/blob/' : 'v1.1/evaluate-v1.1.py', + 'https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v2.0.json' : 'v2.0/train-v2.0.json', + 'https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v2.0.json' : 'v2.0/dev-v2.0.json', + 'https://worksheets.codalab.org/rest/bundles/0x6b567e1cf2e041ec80d7098f031c5c9e/contents/blob/' : 'v2.0/evaluate-v2.0.py', + } + + def download(self): + for item in self.download_urls: + url = item + file = self.download_urls[item] + + print('Downloading:', url) + if os.path.isfile(self.save_path + '/' + file): + print('** Download file already exists, skipping download') + else: + response = urllib.request.urlopen(url) + with open(self.save_path + '/' + file, "wb") as handle: + handle.write(response.read()) + + diff --git a/TensorFlow/LanguageModeling/BERT/data/TextSharding.py b/TensorFlow/LanguageModeling/BERT/data/TextSharding.py new file mode 100644 index 00000000..85012a53 --- /dev/null +++ b/TensorFlow/LanguageModeling/BERT/data/TextSharding.py @@ -0,0 +1,331 @@ +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from collections import defaultdict +from itertools import islice + +import multiprocessing +import os +import statistics + +class Sharding: + def __init__(self, input_files, output_name_prefix, n_training_shards, n_test_shards, fraction_test_set): + assert len(input_files) > 0, 'The input file list must contain at least one file.' + assert n_training_shards > 0, 'There must be at least one output shard.' + assert n_test_shards > 0, 'There must be at least one output shard.' + + self.n_training_shards = n_training_shards + self.n_test_shards = n_test_shards + self.fraction_test_set = fraction_test_set + + self.input_files = input_files + + self.output_name_prefix = output_name_prefix + self.output_training_identifier = '_training' + self.output_test_identifier = '_test' + self.output_file_extension = '.txt' + + self.articles = {} # key: integer identifier, value: list of articles + self.sentences = {} # key: integer identifier, value: list of sentences + self.output_training_files = {} # key: filename, value: list of articles to go into file + self.output_test_files = {} # key: filename, value: list of articles to go into file + + self.init_output_files() + + + # Remember, the input files contain one article per line (the whitespace check is to skip extraneous blank lines) + def load_articles(self): + print('Start: Loading Articles') + + global_article_count = 0 + for input_file in self.input_files: + print('input file:', input_file) + with open(input_file, mode='r', newline='\n') as f: + for i, line in enumerate(f): + if line.strip(): + self.articles[global_article_count] = line.rstrip() + global_article_count += 1 + + print('End: Loading Articles: There are', len(self.articles), 'articles.') + + + def segment_articles_into_sentences(self, segmenter): + print('Start: Sentence Segmentation') + if len(self.articles) is 0: + self.load_articles() + + assert len(self.articles) is not 0, 'Please check that input files are present and contain data.' + + # TODO: WIP: multiprocessing (create independent ranges and spawn processes) + use_multiprocessing = 'serial' + + def chunks(data, size=len(self.articles)): + it = iter(data) + for i in range(0, len(data), size): + yield {k: data[k] for k in islice(it, size)} + + if use_multiprocessing == 'manager': + manager = multiprocessing.Manager() + return_dict = manager.dict() + jobs = [] + n_processes = 7 # in addition to the main process, total = n_proc+1 + + def work(articles, return_dict): + sentences = {} + for i, article in enumerate(articles): + sentences[i] = segmenter.segment_string(articles[article]) + + if i % 5000 == 0: + print('Segmenting article', i) + + return_dict.update(sentences) + + for item in chunks(self.articles, len(self.articles)): + p = multiprocessing.Process(target=work, args=(item, return_dict)) + + # Busy wait + while len(jobs) >= n_processes: + pass + + jobs.append(p) + p.start() + + for proc in jobs: + proc.join() + + elif use_multiprocessing == 'queue': + work_queue = multiprocessing.Queue() + jobs = [] + + for item in chunks(self.articles, len(self.articles)): + pass + + else: # serial option + for i, article in enumerate(self.articles): + self.sentences[i] = segmenter.segment_string(self.articles[article]) + + if i % 5000 == 0: + print('Segmenting article', i) + + print('End: Sentence Segmentation') + + + def init_output_files(self): + print('Start: Init Output Files') + assert len(self.output_training_files) is 0, 'Internal storage self.output_files already contains data. This function is intended to be used by the constructor only.' + assert len(self.output_test_files) is 0, 'Internal storage self.output_files already contains data. This function is intended to be used by the constructor only.' + + for i in range(self.n_training_shards): + name = self.output_name_prefix + self.output_training_identifier + '_' + str(i) + self.output_file_extension + self.output_training_files[name] = [] + + for i in range(self.n_test_shards): + name = self.output_name_prefix + self.output_test_identifier + '_' + str(i) + self.output_file_extension + self.output_test_files[name] = [] + + print('End: Init Output Files') + + + def get_sentences_per_shard(self, shard): + result = 0 + for article_id in shard: + result += len(self.sentences[article_id]) + + return result + + + def distribute_articles_over_shards(self): + print('Start: Distribute Articles Over Shards') + assert len(self.articles) >= self.n_training_shards + self.n_test_shards, 'There are fewer articles than shards. Please add more data or reduce the number of shards requested.' + + # Create dictionary with - key: sentence count per article, value: article id number + sentence_counts = defaultdict(lambda: []) + + max_sentences = 0 + total_sentences = 0 + + for article_id in self.sentences: + current_length = len(self.sentences[article_id]) + sentence_counts[current_length].append(article_id) + max_sentences = max(max_sentences, current_length) + total_sentences += current_length + + n_sentences_assigned_to_training = int((1 - self.fraction_test_set) * total_sentences) + nominal_sentences_per_training_shard = n_sentences_assigned_to_training // self.n_training_shards + nominal_sentences_per_test_shard = (total_sentences - n_sentences_assigned_to_training) // self.n_test_shards + + consumed_article_set = set({}) + unused_article_set = set(self.articles.keys()) + + # Make first pass and add one article worth of lines per file + for file in self.output_training_files: + current_article_id = sentence_counts[max_sentences][-1] + sentence_counts[max_sentences].pop(-1) + self.output_training_files[file].append(current_article_id) + consumed_article_set.add(current_article_id) + unused_article_set.remove(current_article_id) + + # Maintain the max sentence count + while len(sentence_counts[max_sentences]) == 0 and max_sentences > 0: + max_sentences -= 1 + + if len(self.sentences[current_article_id]) > nominal_sentences_per_training_shard: + nominal_sentences_per_training_shard = len(self.sentences[current_article_id]) + print('Warning: A single article contains more than the nominal number of sentences per training shard.') + + for file in self.output_test_files: + current_article_id = sentence_counts[max_sentences][-1] + sentence_counts[max_sentences].pop(-1) + self.output_test_files[file].append(current_article_id) + consumed_article_set.add(current_article_id) + unused_article_set.remove(current_article_id) + + # Maintain the max sentence count + while len(sentence_counts[max_sentences]) == 0 and max_sentences > 0: + max_sentences -= 1 + + if len(self.sentences[current_article_id]) > nominal_sentences_per_test_shard: + nominal_sentences_per_test_shard = len(self.sentences[current_article_id]) + print('Warning: A single article contains more than the nominal number of sentences per test shard.') + + training_counts = [] + test_counts = [] + + for shard in self.output_training_files: + training_counts.append(self.get_sentences_per_shard(self.output_training_files[shard])) + + for shard in self.output_test_files: + test_counts.append(self.get_sentences_per_shard(self.output_test_files[shard])) + + training_median = statistics.median(training_counts) + test_median = statistics.median(test_counts) + + # Make subsequent passes over files to find articles to add without going over limit + history_remaining = [] + n_history_remaining = 4 + + while len(consumed_article_set) < len(self.articles): + for fidx, file in enumerate(self.output_training_files): + nominal_next_article_size = min(nominal_sentences_per_training_shard - training_counts[fidx], max_sentences) + + # Maintain the max sentence count + while len(sentence_counts[max_sentences]) == 0 and max_sentences > 0: + max_sentences -= 1 + + while len(sentence_counts[nominal_next_article_size]) == 0 and nominal_next_article_size > 0: + nominal_next_article_size -= 1 + + if nominal_next_article_size not in sentence_counts or nominal_next_article_size is 0 or training_counts[fidx] > training_median: + continue # skip adding to this file, will come back later if no file can accept unused articles + + current_article_id = sentence_counts[nominal_next_article_size][-1] + sentence_counts[nominal_next_article_size].pop(-1) + + self.output_training_files[file].append(current_article_id) + consumed_article_set.add(current_article_id) + unused_article_set.remove(current_article_id) + + for fidx, file in enumerate(self.output_test_files): + nominal_next_article_size = min(nominal_sentences_per_test_shard - test_counts[fidx], max_sentences) + + # Maintain the max sentence count + while len(sentence_counts[max_sentences]) == 0 and max_sentences > 0: + max_sentences -= 1 + + while len(sentence_counts[nominal_next_article_size]) == 0 and nominal_next_article_size > 0: + nominal_next_article_size -= 1 + + if nominal_next_article_size not in sentence_counts or nominal_next_article_size is 0 or test_counts[fidx] > test_median: + continue # skip adding to this file, will come back later if no file can accept unused articles + + current_article_id = sentence_counts[nominal_next_article_size][-1] + sentence_counts[nominal_next_article_size].pop(-1) + + self.output_test_files[file].append(current_article_id) + consumed_article_set.add(current_article_id) + unused_article_set.remove(current_article_id) + + # If unable to place articles a few times, bump up nominal sizes by fraction until articles get placed + if len(history_remaining) == n_history_remaining: + history_remaining.pop(0) + history_remaining.append(len(unused_article_set)) + + history_same = True + for i in range(1, len(history_remaining)): + history_same = history_same and (history_remaining[i-1] == history_remaining[i]) + + if history_same: + nominal_sentences_per_training_shard += 1 + # nominal_sentences_per_test_shard += 1 + + training_counts = [] + test_counts = [] + for shard in self.output_training_files: + training_counts.append(self.get_sentences_per_shard(self.output_training_files[shard])) + + for shard in self.output_test_files: + test_counts.append(self.get_sentences_per_shard(self.output_test_files[shard])) + + training_median = statistics.median(training_counts) + test_median = statistics.median(test_counts) + + print('Distributing data over shards:', len(unused_article_set), 'articles remaining.') + + + if len(unused_article_set) != 0: + print('Warning: Some articles did not make it into output files.') + + + for shard in self.output_training_files: + print('Training shard:', self.get_sentences_per_shard(self.output_training_files[shard])) + + for shard in self.output_test_files: + print('Test shard:', self.get_sentences_per_shard(self.output_test_files[shard])) + + print('End: Distribute Articles Over Shards') + + + def write_shards_to_disk(self): + print('Start: Write Shards to Disk') + for shard in self.output_training_files: + self.write_single_shard(shard, self.output_training_files[shard], 'training') + + for shard in self.output_test_files: + self.write_single_shard(shard, self.output_test_files[shard], 'test') + + print('End: Write Shards to Disk') + + + def write_single_shard(self, shard_name, shard, split): + shard_split = os.path.split(shard_name) + shard_name = shard_split[0] + '/' + split + '/' + shard_split[1] + + with open(shard_name, mode='w', newline='\n') as f: + for article_id in shard: + for line in self.sentences[article_id]: + f.write(line + '\n') + + f.write('\n') # Line break between articles + + +import nltk + +nltk.download('punkt') + +class NLTKSegmenter: + def __init(self): + pass + + def segment_string(self, article): + return nltk.tokenize.sent_tokenize(article) + diff --git a/TensorFlow/LanguageModeling/BERT/data/WikiDownloader.py b/TensorFlow/LanguageModeling/BERT/data/WikiDownloader.py new file mode 100644 index 00000000..87f95297 --- /dev/null +++ b/TensorFlow/LanguageModeling/BERT/data/WikiDownloader.py @@ -0,0 +1,58 @@ +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import bz2 +import os +import urllib.request +import sys +import subprocess + +class WikiDownloader: + def __init__(self, language, save_path): + self.save_path = save_path + '/wikicorpus_' + language + + if not os.path.exists(self.save_path): + os.makedirs(self.save_path) + + self.language = language + self.download_urls = { + 'en' : 'https://dumps.wikimedia.org/enwiki/latest/enwiki-latest-pages-articles.xml.bz2', + 'zh' : 'https://dumps.wikimedia.org/zhwiki/latest/zhwiki-latest-pages-articles.xml.bz2' + } + + self.output_files = { + 'en' : 'wikicorpus_en.xml.bz2', + 'zh' : 'wikicorpus_zh.xml.bz2' + } + + + def download(self): + if self.language in self.download_urls: + url = self.download_urls[self.language] + filename = self.output_files[self.language] + + print('Downloading:', url) + if os.path.isfile(self.save_path + '/' + filename): + print('** Download file already exists, skipping download') + else: + response = urllib.request.urlopen(url) + with open(self.save_path + '/' + filename, "wb") as handle: + handle.write(response.read()) + + # Always unzipping since this is relatively fast and will overwrite + print('Unzipping:', self.output_files[self.language]) + subprocess.run('bzip2 -dk ' + self.save_path + '/' + filename, shell=True, check=True) + + else: + assert False, 'WikiDownloader not implemented for this language yet.' + diff --git a/TensorFlow/LanguageModeling/BERT/data/WikicorpusTextFormatting.py b/TensorFlow/LanguageModeling/BERT/data/WikicorpusTextFormatting.py new file mode 100644 index 00000000..9d356b13 --- /dev/null +++ b/TensorFlow/LanguageModeling/BERT/data/WikicorpusTextFormatting.py @@ -0,0 +1,46 @@ +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import glob +import os + +class WikicorpusTextFormatting: + def __init__(self, wiki_path, output_filename, recursive = False): + self.wiki_path = wiki_path + self.recursive = recursive + self.output_filename = output_filename + + + # This puts one article per line + def merge(self): + with open(self.output_filename, mode='w', newline='\n') as ofile: + for dirname in glob.glob(self.wiki_path + '/*/', recursive=False): + for filename in glob.glob(dirname + 'wiki_*', recursive=self.recursive): + print(filename) + article_lines = [] + article_open = False + + with open(filename, mode='r', newline='\n') as file: + for line in file: + if '' in line: + article_open = False + for oline in article_lines[1:]: + if oline != '\n': + ofile.write(oline.rstrip() + " ") + ofile.write("\n\n") + article_lines = [] + else: + if article_open: + article_lines.append(line) \ No newline at end of file diff --git a/TensorFlow/LanguageModeling/BERT/data/__init__.py b/TensorFlow/LanguageModeling/BERT/data/__init__.py new file mode 100644 index 00000000..d49f0d05 --- /dev/null +++ b/TensorFlow/LanguageModeling/BERT/data/__init__.py @@ -0,0 +1,12 @@ +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. \ No newline at end of file diff --git a/TensorFlow/LanguageModeling/BERT/data/bertPrep.py b/TensorFlow/LanguageModeling/BERT/data/bertPrep.py new file mode 100644 index 00000000..d4135c47 --- /dev/null +++ b/TensorFlow/LanguageModeling/BERT/data/bertPrep.py @@ -0,0 +1,389 @@ +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import BookscorpusTextFormatting +import Downloader +import TextSharding +import WikicorpusTextFormatting +import PubMedTextFormatting + +import argparse +import itertools +import multiprocessing +import os +import pprint +import subprocess + + +def main(args): + working_dir = os.environ['BERT_PREP_WORKING_DIR'] + + print('Working Directory:', working_dir) + print('Action:', args.action) + print('Dataset Name:', args.dataset) + + if args.input_files: + args.input_files = args.input_files.split(',') + + hdf5_tfrecord_folder_prefix = "/lower_case_" + str(args.do_lower_case) + "_seq_len_" + str(args.max_seq_length) \ + + "_max_pred_" + str(args.max_predictions_per_seq) + "_masked_lm_prob_" + str(args.masked_lm_prob) \ + + "_random_seed_" + str(args.random_seed) + "_dupe_factor_" + str(args.dupe_factor) \ + + "_shard_" + str(args.n_training_shards) + "_test_split_" + str(int(args.fraction_test_set * 100)) + directory_structure = { + 'download' : working_dir + '/download', # Downloaded and decompressed + 'extracted' : working_dir +'/extracted', # Extracted from whatever the initial format is (e.g., wikiextractor) + 'formatted' : working_dir + '/formatted_one_article_per_line', # This is the level where all sources should look the same + 'sharded' : working_dir + '/sharded', + 'tfrecord' : working_dir + '/tfrecord' + hdf5_tfrecord_folder_prefix, + 'hdf5': working_dir + '/hdf5'+ hdf5_tfrecord_folder_prefix, + } + + print('\nDirectory Structure:') + pp = pprint.PrettyPrinter(indent=2) + pp.pprint(directory_structure) + print('') + + if args.action == 'download': + if not os.path.exists(directory_structure['download']): + os.makedirs(directory_structure['download']) + + downloader = Downloader.Downloader(args.dataset, directory_structure['download']) + downloader.download() + + elif args.action == 'text_formatting': + assert args.dataset != 'google_pretrained_weights' and args.dataset != 'nvidia_pretrained_weights' \ + and args.dataset != 'squad' and args.dataset != 'MRPC' and args.dataset != 'CoLA' and \ + args.dataset != 'MNLI', 'Cannot perform text_formatting on pretrained weights' + + if not os.path.exists(directory_structure['extracted']): + os.makedirs(directory_structure['extracted']) + + if not os.path.exists(directory_structure['formatted']): + os.makedirs(directory_structure['formatted']) + + if args.dataset == 'bookscorpus': + books_path = directory_structure['download'] + '/bookscorpus' + #books_path = directory_structure['download'] + output_filename = directory_structure['formatted'] + '/bookscorpus_one_book_per_line.txt' + books_formatter = BookscorpusTextFormatting.BookscorpusTextFormatting(books_path, output_filename, recursive=True) + books_formatter.merge() + + elif args.dataset == 'wikicorpus_en': + if args.skip_wikiextractor == 0: + path_to_wikiextractor_in_container = '/workspace/wikiextractor/WikiExtractor.py' + wikiextractor_command = path_to_wikiextractor_in_container + ' ' + directory_structure['download'] + '/' + args.dataset + '/wikicorpus_en.xml ' + '-b 100M --processes ' + str(args.n_processes) + ' -o ' + directory_structure['extracted'] + '/' + args.dataset + print('WikiExtractor Command:', wikiextractor_command) + wikiextractor_process = subprocess.run(wikiextractor_command, shell=True, check=True) + + wiki_path = directory_structure['extracted'] + '/wikicorpus_en' + output_filename = directory_structure['formatted'] + '/wikicorpus_en_one_article_per_line.txt' + wiki_formatter = WikicorpusTextFormatting.WikicorpusTextFormatting(wiki_path, output_filename, recursive=True) + wiki_formatter.merge() + + elif args.dataset == 'wikicorpus_zh': + assert False, 'wikicorpus_zh not fully supported at this time. The simplified/tradition Chinese data needs to be translated and properly segmented still, and should work once this step is added.' + if args.skip_wikiextractor == 0: + path_to_wikiextractor_in_container = '/workspace/wikiextractor/WikiExtractor.py' + wikiextractor_command = path_to_wikiextractor_in_container + ' ' + directory_structure['download'] + '/' + args.dataset + '/wikicorpus_zh.xml ' + '-b 100M --processes ' + str(args.n_processes) + ' -o ' + directory_structure['extracted'] + '/' + args.dataset + print('WikiExtractor Command:', wikiextractor_command) + wikiextractor_process = subprocess.run(wikiextractor_command, shell=True, check=True) + + wiki_path = directory_structure['extracted'] + '/wikicorpus_zh' + output_filename = directory_structure['formatted'] + '/wikicorpus_zh_one_article_per_line.txt' + wiki_formatter = WikicorpusTextFormatting.WikicorpusTextFormatting(wiki_path, output_filename, recursive=True) + wiki_formatter.merge() + + elif args.dataset == 'pubmed_baseline': + pubmed_path = directory_structure['download'] + '/pubmed' + '/baseline' + output_filename = directory_structure['formatted'] + '/pubmed_baseline_one_article_per_line.txt' + pubmed_formatter = PubMedTextFormatting.PubMedTextFormatting(pubmed_path, output_filename, recursive=True) + pubmed_formatter.merge() + + elif args.action == 'sharding': + # Note: books+wiki requires user to provide list of input_files (comma-separated with no spaces) + if args.dataset == 'bookscorpus' or 'wikicorpus' in args.dataset or 'books_wiki' in args.dataset or 'pubmed' in args.dataset: + if args.input_files is None: + if args.dataset == 'bookscorpus': + args.input_files = [directory_structure['formatted'] + '/bookscorpus_one_book_per_line.txt'] + elif args.dataset == 'wikicorpus_en': + args.input_files = [directory_structure['formatted'] + '/wikicorpus_en_one_article_per_line.txt'] + elif args.dataset == 'wikicorpus_zh': + args.input_files = [directory_structure['formatted'] + '/wikicorpus_zh_one_article_per_line.txt'] + elif args.dataset == 'books_wiki_en_corpus': + args.input_files = [directory_structure['formatted'] + '/bookscorpus_one_book_per_line.txt', directory_structure['formatted'] + '/wikicorpus_en_one_article_per_line.txt'] + elif args.dataset == 'pubmed_baseline': + args.input_files = [directory_structure['formatted'] + '/pubmed_baseline_one_article_per_line.txt'] + + output_file_prefix = directory_structure['sharded'] + '/' + args.dataset + '/' + args.dataset + + if not os.path.exists(directory_structure['sharded']): + os.makedirs(directory_structure['sharded']) + + if not os.path.exists(directory_structure['sharded'] + '/' + args.dataset): + os.makedirs(directory_structure['sharded'] + '/' + args.dataset) + + if not os.path.exists(directory_structure['sharded'] + '/' + args.dataset + '/training'): + os.makedirs(directory_structure['sharded'] + '/' + args.dataset + '/training') + + if not os.path.exists(directory_structure['sharded'] + '/' + args.dataset + '/test'): + os.makedirs(directory_structure['sharded'] + '/' + args.dataset + '/test') + + # Segmentation is here because all datasets look the same in one article/book/whatever per line format, and + # it seemed unnecessarily complicated to add an additional preprocessing step to call just for this. + # Different languages (e.g., Chinese simplified/traditional) may require translation and + # other packages to be called from here -- just add a conditional branch for those extra steps + segmenter = TextSharding.NLTKSegmenter() + sharding = TextSharding.Sharding(args.input_files, output_file_prefix, args.n_training_shards, args.n_test_shards, args.fraction_test_set) + + sharding.load_articles() + sharding.segment_articles_into_sentences(segmenter) + sharding.distribute_articles_over_shards() + sharding.write_shards_to_disk() + + else: + assert False, 'Unsupported dataset for sharding' + + elif args.action == 'create_tfrecord_files': + if not os.path.exists(directory_structure['tfrecord'] + "/" + args.dataset): + os.makedirs(directory_structure['tfrecord'] + "/" + args.dataset) + + if not os.path.exists(directory_structure['tfrecord'] + "/" + args.dataset + '/training'): + os.makedirs(directory_structure['tfrecord'] + "/" + args.dataset + '/training') + + if not os.path.exists(directory_structure['tfrecord'] + "/" + args.dataset + '/test'): + os.makedirs(directory_structure['tfrecord'] + "/" + args.dataset + '/test') + + last_process = None + + def create_record_worker(filename_prefix, shard_id, output_format='tfrecord', split='training'): + bert_preprocessing_command = 'python /workspace/bert/utils/create_pretraining_data.py' + bert_preprocessing_command += ' --input_file=' + directory_structure['sharded'] + '/' + args.dataset + '/' + split + '/' + filename_prefix + '_' + str(shard_id) + '.txt' + bert_preprocessing_command += ' --output_file=' + directory_structure['tfrecord'] + '/' + args.dataset + '/' + split + '/' + filename_prefix + '_' + str(shard_id) + '.' + output_format + bert_preprocessing_command += ' --vocab_file=' + args.vocab_file + bert_preprocessing_command += ' --do_lower_case' if args.do_lower_case else '' + bert_preprocessing_command += ' --max_seq_length=' + str(args.max_seq_length) + bert_preprocessing_command += ' --max_predictions_per_seq=' + str(args.max_predictions_per_seq) + bert_preprocessing_command += ' --masked_lm_prob=' + str(args.masked_lm_prob) + bert_preprocessing_command += ' --random_seed=' + str(args.random_seed) + bert_preprocessing_command += ' --dupe_factor=' + str(args.dupe_factor) + bert_preprocessing_process = subprocess.Popen(bert_preprocessing_command, shell=True) + bert_preprocessing_process.communicate() + + last_process = bert_preprocessing_process + + # This could be better optimized (fine if all take equal time) + if shard_id % args.n_processes == 0 and shard_id > 0: + bert_preprocessing_process.wait() + + return last_process + + output_file_prefix = args.dataset + + for i in range(args.n_training_shards): + last_process = create_record_worker(output_file_prefix + '_training', i, 'tfrecord', 'training') + + last_process.wait() + + for i in range(args.n_test_shards): + last_process = create_record_worker(output_file_prefix + '_test', i, 'tfrecord', 'test') + + last_process.wait() + + + elif args.action == 'create_hdf5_files': + assert False, 'HDF5 format not fully supported in this release.' + + if not os.path.exists(directory_structure['hdf5'] + "/" + args.dataset): + os.makedirs(directory_structure['hdf5'] + "/" + args.dataset) + + last_process = None + + def create_record_worker(filename_prefix, shard_id, output_format='hdf5'): + bert_preprocessing_command = 'python /workspace/bert/utils/create_pretraining_data.py' + bert_preprocessing_command += ' --input_file=' + directory_structure['sharded'] + '/' + args.dataset + '/' + filename_prefix + '_' + str(shard_id) + '.txt' + bert_preprocessing_command += ' --output_file=' + directory_structure['hdf5'] + '/' + args.dataset + '/' + filename_prefix + '_' + str(shard_id) + '.' + output_format + bert_preprocessing_command += ' --vocab_file=' + args.vocab_file + bert_preprocessing_command += ' --do_lower_case' if args.do_lower_case else '' + bert_preprocessing_command += ' --max_seq_length=' + args.max_seq_length + bert_preprocessing_command += ' --max_predictions_per_seq=' + args.max_predictions_per_seq + bert_preprocessing_command += ' --masked_lm_prob=' + args.masked_lm_prob + bert_preprocessing_command += ' --random_seed=' + args.random_seed + bert_preprocessing_command += ' --dupe_factor=' + args.dupe_factor + bert_preprocessing_process = subprocess.Popen(bert_preprocessing_command, shell=True) + bert_preprocessing_process.communicate() + + last_process = bert_preprocessing_process + + # This could be better optimized (fine if all take equal time) + if shard_id % args.n_processes == 0 and shard_id > 0: + bert_preprocessing_process.wait() + + for i in range(args.n_training_shards): + create_record_worker(args.output_file_prefix + '_training', i) + + last_process.wait() + + for i in range(args.n_test_shards): + create_record_worker(args.output_file_prefix + '_test', i) + + last_process.wait() + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description='Preprocessing Application for Everything BERT-related' + ) + + parser.add_argument( + '--action', + type=str, + help='Specify the action you want the app to take. e.g., generate vocab, segment, create tfrecords', + choices={ + 'download', # Download and verify mdf5/sha sums + 'text_formatting', # Convert into a file that contains one article/book per line + 'sharding', # Convert previous formatted text into shards containing one sentence per line + 'create_tfrecord_files', # Turn each shard into a TFrecord with masking and next sentence prediction info + 'create_hdf5_files' # Turn each shard into a HDF5 file with masking and next sentence prediction info + } + ) + + parser.add_argument( + '--dataset', + type=str, + help='Specify the dataset to perform --action on', + choices={ + 'bookscorpus', + 'wikicorpus_en', + 'wikicorpus_zh', + 'books_wiki_en_corpus', + 'pubmed_baseline', + 'pubmed_daily_update', + 'pubmed_fulltext', + 'pubmed_open_access', + 'google_pretrained_weights', + 'nvidia_pretrained_weights', + 'squad', + 'MRPC', + 'CoLA', + 'MNLI', + 'all' + } + ) + + parser.add_argument( + '--input_files', + type=str, + help='Specify the input files in a comma-separated list (no spaces)' + ) + + parser.add_argument( + '--n_training_shards', + type=int, + help='Specify the number of training shards to generate', + default=256 + ) + + parser.add_argument( + '--n_test_shards', + type=int, + help='Specify the number of test shards to generate', + default=256 + ) + + parser.add_argument( + '--fraction_test_set', + type=float, + help='Specify the fraction (0..1) of the data to withhold for the test data split (based on number of sequences)', + default=0.2 + ) + + parser.add_argument( + '--segmentation_method', + type=str, + help='Specify your choice of sentence segmentation', + choices={ + 'nltk' + }, + default='nltk' + ) + + parser.add_argument( + '--n_processes', + type=int, + help='Specify the max number of processes to allow at one time', + default=4 + ) + + parser.add_argument( + '--random_seed', + type=int, + help='Specify the base seed to use for any random number generation', + default=12345 + ) + + parser.add_argument( + '--dupe_factor', + type=int, + help='Specify the duplication factor', + default=5 + ) + + parser.add_argument( + '--masked_lm_prob', + type=float, + help='Specify the probability for masked lm', + default=0.15 + ) + + parser.add_argument( + '--max_seq_length', + type=int, + help='Specify the maximum sequence length', + default=512 + ) + + parser.add_argument( + '--max_predictions_per_seq', + type=int, + help='Specify the maximum number of masked words per sequence', + default=20 + ) + + parser.add_argument( + '--do_lower_case', + type=int, + help='Specify whether it is cased (0) or uncased (1) (any number greater than 0 will be treated as uncased)', + default=1 + ) + + parser.add_argument( + '--vocab_file', + type=str, + help='Specify absolute path to vocab file to use)' + ) + + parser.add_argument( + '--skip_wikiextractor', + type=int, + help='Specify whether to skip wikiextractor step 0=False, 1=True', + default=0 + ) + + parser.add_argument( + '--interactive_json_config_generator', + type=str, + help='Specify the action you want the app to take. e.g., generate vocab, segment, create tfrecords' + ) + + args = parser.parse_args() + main(args) diff --git a/TensorFlow/LanguageModeling/BERT/data/bookcorpus/clean_and_merge_text.py b/TensorFlow/LanguageModeling/BERT/data/bookcorpus/clean_and_merge_text.py deleted file mode 100644 index 0b297b1d..00000000 --- a/TensorFlow/LanguageModeling/BERT/data/bookcorpus/clean_and_merge_text.py +++ /dev/null @@ -1,15 +0,0 @@ -# NVIDIA - -import glob -import os - -output_file = os.environ['WORKING_DIR'] + '/intermediate_files/bookcorpus.txt' -download_path = os.environ['WORKING_DIR'] + '/download/' - -with open(output_file, "w") as ofile: - for filename in glob.glob(download_path + '*.txt', recursive=True): - with open(filename, mode='r', encoding="utf-8-sig") as file: - for line in file: - if line.strip() != "": - ofile.write(line.strip() + " ") - ofile.write("\n\n ") diff --git a/TensorFlow/LanguageModeling/BERT/data/bookcorpus/config.sh b/TensorFlow/LanguageModeling/BERT/data/bookcorpus/config.sh deleted file mode 100644 index e14a1acd..00000000 --- a/TensorFlow/LanguageModeling/BERT/data/bookcorpus/config.sh +++ /dev/null @@ -1,27 +0,0 @@ -#! /bin/bash - -set -e - -USE_BERT_LARGE=true -MAX_SEQUENCE_LENGTH=512 -MAX_PREDICTIONS_PER_SEQUENCE=80 -MASKED_LM_PROB=0.15 -SEED=12345 -DUPE_FACTOR=5 -DO_LOWER_CASE="True" -N_LINES_PER_SHARD_APPROX=396000 # Default=396000 creates 256 shards - -N_PROCS_PREPROCESS=4 # Adjust this based on memory requirements and available number of cores -export WORKING_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - -BERT_BASE_DIR="${WORKING_DIR}/../pretrained_models_google/uncased_L-12_H-768_A-12" -BERT_LARGE_DIR="${WORKING_DIR}/../pretrained_models_google/uncased_L-24_H-1024_A-16" - -if [ "$USE_BERT_LARGE" = true ] ; then - VOCAB_FILE="${BERT_LARGE_DIR}/vocab.txt" -else - VOCAB_FILE="${BERT_BASE_DIR}/vocab.txt" -fi - -OUTPUT_DIR="${WORKING_DIR}/final_tfrecords_sharded/bert_large_bookcorpus_seq_${MAX_SEQUENCE_LENGTH}_pred_${MAX_PREDICTIONS_PER_SEQUENCE}" - diff --git a/TensorFlow/LanguageModeling/BERT/data/bookcorpus/create_pseudo_test_set.py b/TensorFlow/LanguageModeling/BERT/data/bookcorpus/create_pseudo_test_set.py deleted file mode 100644 index 194f15b7..00000000 --- a/TensorFlow/LanguageModeling/BERT/data/bookcorpus/create_pseudo_test_set.py +++ /dev/null @@ -1,18 +0,0 @@ -# NVIDIA - -import glob -import os -import random -import shutil - -input_dir = os.environ['WORKING_DIR'] + '/final_text_files_sharded/' -output_dir = os.environ['WORKING_DIR'] + '/test_set_text_files/' - -random.seed(13254) -n_shards_to_keep = 3 - -file_glob = glob.glob(input_dir + '/*', recursive=False) -file_glob = random.sample(file_glob, n_shards_to_keep) - -for filename in file_glob: - shutil.copy(filename, output_dir) diff --git a/TensorFlow/LanguageModeling/BERT/data/bookcorpus/create_pseudo_test_set.sh b/TensorFlow/LanguageModeling/BERT/data/bookcorpus/create_pseudo_test_set.sh deleted file mode 100755 index 34fa09e9..00000000 --- a/TensorFlow/LanguageModeling/BERT/data/bookcorpus/create_pseudo_test_set.sh +++ /dev/null @@ -1,10 +0,0 @@ -#! /bin/bash - -source /workspace/bert/data/bookcorpus/config.sh - -# Convert test set sharded text files into tfrecords that are ready for BERT pretraining -echo "Creating test set tfrecords for each text shard" -mkdir -p ${WORKING_DIR}/test_set_text_files -mkdir -p ${WORKING_DIR}/test_set_tfrecords -python3 ${WORKING_DIR}/create_pseudo_test_set.py -. ${WORKING_DIR}/preprocessing_test_set_xargs_wrapper.sh ${N_PROCS_PREPROCESS} diff --git a/TensorFlow/LanguageModeling/BERT/data/bookcorpus/preprocessing.sh b/TensorFlow/LanguageModeling/BERT/data/bookcorpus/preprocessing.sh deleted file mode 100755 index 9adbd268..00000000 --- a/TensorFlow/LanguageModeling/BERT/data/bookcorpus/preprocessing.sh +++ /dev/null @@ -1,23 +0,0 @@ -#! /bin/bash - -SHARD_INDEX=${1} -INPUT_FILE="${WORKING_DIR}/final_text_files_sharded/bookcorpus.segmented.part.${SHARD_INDEX}.txt" - -source /workspace/bert/data/bookcorpus/config.sh - -OUTPUT_DIR=${WORKING_DIR}/final_tfrecords_sharded -mkdir -p ${OUTPUT_DIR} - -OUTPUT_FILE="${OUTPUT_DIR}/tf_examples.tfrecord000${SHARD_INDEX}" - -python /workspace/bert/utils/create_pretraining_data.py \ - --input_file=${INPUT_FILE} \ - --output_file=${OUTPUT_FILE} \ - --vocab_file=${VOCAB_FILE} \ - --do_lower_case=${DO_LOWER_CASE} \ - --max_seq_length=${MAX_SEQUENCE_LENGTH} \ - --max_predictions_per_seq=${MAX_PREDICTIONS_PER_SEQUENCE} \ - --masked_lm_prob=${MASKED_LM_PROB} \ - --random_seed=${SEED} \ - --dupe_factor=${DUPE_FACTOR} - diff --git a/TensorFlow/LanguageModeling/BERT/data/bookcorpus/preprocessing_test_set.sh b/TensorFlow/LanguageModeling/BERT/data/bookcorpus/preprocessing_test_set.sh deleted file mode 100755 index f1f5ad10..00000000 --- a/TensorFlow/LanguageModeling/BERT/data/bookcorpus/preprocessing_test_set.sh +++ /dev/null @@ -1,28 +0,0 @@ -#! /bin/bash - -INPUT_FILE=${1} - -source /workspace/bert/data/bookcorpus/config.sh - -OUTPUT_DIR=${WORKING_DIR}/test_set_tfrecords -mkdir -p ${OUTPUT_DIR} - -#SHARD_INDEX=$(( echo ${INPUT_FILE} | egrep -o [0-9]+ )) -SHARD_INDEX=$( eval echo ${INPUT_FILE} | sed -e s/[^0-9]//g ) -OUTPUT_FILE="${OUTPUT_DIR}/tf_examples.tfrecord000${SHARD_INDEX}" - -SEED=13254 - -echo "Shard index ${SHARD_INDEX}" - -python /workspace/bert/utils/create_pretraining_data.py \ - --input_file=${INPUT_FILE} \ - --output_file=${OUTPUT_FILE} \ - --vocab_file=${VOCAB_FILE} \ - --do_lower_case=${DO_LOWER_CASE} \ - --max_seq_length=${MAX_SEQUENCE_LENGTH} \ - --max_predictions_per_seq=${MAX_PREDICTIONS_PER_SEQUENCE} \ - --masked_lm_prob=${MASKED_LM_PROB} \ - --random_seed=${SEED} \ - --dupe_factor=${DUPE_FACTOR} - diff --git a/TensorFlow/LanguageModeling/BERT/data/bookcorpus/preprocessing_test_set_xargs_wrapper.sh b/TensorFlow/LanguageModeling/BERT/data/bookcorpus/preprocessing_test_set_xargs_wrapper.sh deleted file mode 100755 index f41516b7..00000000 --- a/TensorFlow/LanguageModeling/BERT/data/bookcorpus/preprocessing_test_set_xargs_wrapper.sh +++ /dev/null @@ -1,12 +0,0 @@ -#! /bin/bash - -source /workspace/bert/data/bookcorpus/config.sh - -SHARD_COUNT=0 -rm -rf /workspace/bert/data/bookcorpus/xarg_list.txt -touch /workspace/bert/data/bookcorpus/xarg_list.txt -for file in /workspace/bert/data/bookcorpus/test_set_text_files/*; do - echo ${file} >> /workspace/bert/data/bookcorpus/xarg_list.txt -done - -xargs -n 1 --max-procs=${N_PROCS_PREPROCESS} --arg-file=/workspace/bert/data/bookcorpus/xarg_list.txt /workspace/bert/data/bookcorpus/preprocessing_test_set.sh diff --git a/TensorFlow/LanguageModeling/BERT/data/bookcorpus/preprocessing_xargs_wrapper.sh b/TensorFlow/LanguageModeling/BERT/data/bookcorpus/preprocessing_xargs_wrapper.sh deleted file mode 100755 index 387069ef..00000000 --- a/TensorFlow/LanguageModeling/BERT/data/bookcorpus/preprocessing_xargs_wrapper.sh +++ /dev/null @@ -1,13 +0,0 @@ -#! /bin/bash - -source /workspace/bert/data/bookcorpus/config.sh - -SHARD_COUNT=0 -rm -rf /workspace/bert/data/bookcorpus/xarg_list.txt -touch /workspace/bert/data/bookcorpus/xarg_list.txt -for file in /workspace/bert/data/bookcorpus/final_text_files_sharded/*; do - echo ${SHARD_COUNT} >> /workspace/bert/data/bookcorpus/xarg_list.txt - SHARD_COUNT=$((SHARD_COUNT+1)) -done - -xargs -n 1 --max-procs=${N_PROCS_PREPROCESS} --arg-file=/workspace/bert/data/bookcorpus/xarg_list.txt /workspace/bert/data/bookcorpus/preprocessing.sh diff --git a/TensorFlow/LanguageModeling/BERT/data/bookcorpus/run_preprocessing.sh b/TensorFlow/LanguageModeling/BERT/data/bookcorpus/run_preprocessing.sh deleted file mode 100755 index f660e22c..00000000 --- a/TensorFlow/LanguageModeling/BERT/data/bookcorpus/run_preprocessing.sh +++ /dev/null @@ -1,28 +0,0 @@ -#! /bin/bash - -source /workspace/bert/data/bookcorpus/config.sh - -# Download books -mkdir -p download -python3 /workspace/bookcorpus/download_files.py --list /workspace/bookcorpus/url_list.jsonl --out ${WORKING_DIR}/download --trash-bad-count - -# Clean and prep (one book per line) -mkdir -p ${WORKING_DIR}/intermediate_files -python3 ${WORKING_DIR}/clean_and_merge_text.py - -# Split books into one-sentence-per-line format for use with BERT scripts -echo "Applying sentence segmentation to get one sentence per line" -mkdir -p ${WORKING_DIR}/final_text_file_single -python3 ${WORKING_DIR}/sentence_segmentation_nltk.py -# Note: NLTK can be replaced with Spacy, although it is slower (2 variations provided) - -# Shard finalized text so that it has a chance of fitting in memory when creating pretraining data into tfrecords (choose appropriate number of shards for distributed training) -echo "Shard text files - size is approximate to prevent splitting a book across shards" -mkdir -p ${WORKING_DIR}/final_text_files_sharded -python3 ${WORKING_DIR}/shard_text_input_file.py - -# Convert sharded text files into tfrecords that are ready for BERT pretraining -echo "Creating tfrecords for each text shard" -mkdir -p ${WORKING_DIR}/final_tfrecords_sharded -. ${WORKING_DIR}/preprocessing_xargs_wrapper.sh ${N_PROCS_PREPROCESS} - diff --git a/TensorFlow/LanguageModeling/BERT/data/bookcorpus/sentence_segmentation_nltk.py b/TensorFlow/LanguageModeling/BERT/data/bookcorpus/sentence_segmentation_nltk.py deleted file mode 100644 index 038205b6..00000000 --- a/TensorFlow/LanguageModeling/BERT/data/bookcorpus/sentence_segmentation_nltk.py +++ /dev/null @@ -1,20 +0,0 @@ -# NVIDIA - -import nltk -import os - -nltk.download('punkt') - -input_file = os.environ['WORKING_DIR'] + '/intermediate_files/bookcorpus.txt' -output_file = os.environ['WORKING_DIR'] + '/final_text_file_single/bookcorpus.segmented.nltk.txt' - -doc_seperator = "\n" - -with open(input_file) as ifile: - with open(output_file, "w") as ofile: - for line in ifile: - if line != "\n": - sent_list = nltk.tokenize.sent_tokenize(line) - for sent in sent_list: - ofile.write(sent + "\n") - ofile.write(doc_seperator) diff --git a/TensorFlow/LanguageModeling/BERT/data/bookcorpus/shard_text_input_file.py b/TensorFlow/LanguageModeling/BERT/data/bookcorpus/shard_text_input_file.py deleted file mode 100644 index 5efe0be4..00000000 --- a/TensorFlow/LanguageModeling/BERT/data/bookcorpus/shard_text_input_file.py +++ /dev/null @@ -1,41 +0,0 @@ -# NVIDIA - -import os - -input_file = os.environ['WORKING_DIR'] + '/final_text_file_single/bookcorpus.segmented.nltk.txt' -output_file = os.environ['WORKING_DIR'] + '/final_text_files_sharded/bookcorpus.segmented.part.' - -doc_seperator = "\n" - -line_buffer = [] -shard_size = 396000 # Approximate, will split at next article break -line_counter = 0 -shard_index = 0 - -ifile_lines = 0 -with open(input_file) as ifile: - for line in ifile: - ifile_lines += 1 - -print("Input file contains", ifile_lines, "lines.") - -iline_counter = 1 -with open(input_file) as ifile: - for line in ifile: - if line_counter < shard_size and iline_counter < ifile_lines: - line_buffer.append(line) - line_counter += 1 - iline_counter += 1 - elif line_counter >= shard_size and line != "\n" and iline_counter < ifile_lines: - line_buffer.append(line) - line_counter += 1 - iline_counter += 1 - else: - with open(output_file + str(shard_index) + ".txt", "w") as ofile: - for oline in line_buffer: - ofile.write(oline) - line_buffer = [] - line_counter = 0 - shard_index += 1 - - diff --git a/TensorFlow/LanguageModeling/BERT/data/create_datasets_from_start.sh b/TensorFlow/LanguageModeling/BERT/data/create_datasets_from_start.sh new file mode 100755 index 00000000..f21914e4 --- /dev/null +++ b/TensorFlow/LanguageModeling/BERT/data/create_datasets_from_start.sh @@ -0,0 +1,46 @@ +#!/bin/bash + +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +export BERT_PREP_WORKING_DIR="${BERT_PREP_WORKING_DIR}" + +# Download +python3 ${BERT_PREP_WORKING_DIR}/bertPrep.py --action download --dataset bookscorpus +python3 ${BERT_PREP_WORKING_DIR}/bertPrep.py --action download --dataset wikicorpus_en + +python3 ${BERT_PREP_WORKING_DIR}/bertPrep.py --action download --dataset google_pretrained_weights # Includes vocab + +python3 ${BERT_PREP_WORKING_DIR}/bertPrep.py --action download --dataset squad +python3 ${BERT_PREP_WORKING_DIR}/bertPrep.py --action download --dataset "CoLA" +python3 ${BERT_PREP_WORKING_DIR}/bertPrep.py --action download --dataset "MRPC" +python3 ${BERT_PREP_WORKING_DIR}/bertPrep.py --action download --dataset "MNLI" + + +# Properly format the text files +python3 ${BERT_PREP_WORKING_DIR}/bertPrep.py --action text_formatting --dataset bookscorpus +python3 ${BERT_PREP_WORKING_DIR}/bertPrep.py --action text_formatting --dataset wikicorpus_en + + +# Shard the text files (group wiki+books then shard) +python3 ${BERT_PREP_WORKING_DIR}/bertPrep.py --action sharding --dataset books_wiki_en_corpus + + +# Create TFRecord files Phase 1 +python3 ${BERT_PREP_WORKING_DIR}/bertPrep.py --action create_tfrecord_files --dataset books_wiki_en_corpus --max_seq_length 128 \ + --max_predictions_per_seq 20 --vocab_file ${BERT_PREP_WORKING_DIR}/download/google_pretrained_weights/uncased_L-24_H-1024_A-16/vocab.txt + + +# Create TFRecord files Phase 2 +python3 ${BERT_PREP_WORKING_DIR}/bertPrep.py --action create_tfrecord_files --dataset books_wiki_en_corpus --max_seq_length 512 \ + --max_predictions_per_seq 80 --vocab_file ${BERT_PREP_WORKING_DIR}/download/google_pretrained_weights/uncased_L-24_H-1024_A-16/vocab.txt diff --git a/TensorFlow/LanguageModeling/BERT/data/glue/download_glue_data.py b/TensorFlow/LanguageModeling/BERT/data/glue/download_glue_data.py deleted file mode 100644 index 7f452d6c..00000000 --- a/TensorFlow/LanguageModeling/BERT/data/glue/download_glue_data.py +++ /dev/null @@ -1,153 +0,0 @@ -# -# -# @unpublished{wang2018glue -# title={{GLUE}: A Multi-Task Benchmark and Analysis Platform for -# Natural Language Understanding} -# author={Wang, Alex and Singh, Amanpreet and Michael, Julian and Hill, -# Felix and Levy, Omer and Bowman, Samuel R.} -# note={arXiv preprint 1804.07461} -# year={2018} -# } -# -# Script for downloading all GLUE data. -# Note: for legal reasons, we are unable to host MRPC. -# You can either use the version hosted by the SentEval team, which is already tokenized, -# or you can download the original data from (https://download.microsoft.com/download/D/4/6/D46FF87A-F6B9-4252-AA8B-3604ED519838/MSRParaphraseCorpus.msi) and extract the data from it manually. -# For Windows users, you can run the .msi file. For Mac and Linux users, consider an external library such as 'cabextract' (see below for an example). -# You should then rename and place specific files in a folder (see below for an example). -# mkdir MRPC -# cabextract MSRParaphraseCorpus.msi -d MRPC -# cat MRPC/_2DEC3DBE877E4DB192D17C0256E90F1D | tr -d $'\r' > MRPC/msr_paraphrase_train.txt -# cat MRPC/_D7B391F9EAFF4B1B8BCE8F21B20B1B61 | tr -d $'\r' > MRPC/msr_paraphrase_test.txt -# rm MRPC/_* -# rm MSRParaphraseCorpus.msi - - -import os -import sys -import shutil -import argparse -import tempfile -import urllib -import io -if sys.version_info >= (3, 0): - import urllib.request -import zipfile - -URLLIB=urllib -if sys.version_info >= (3, 0): - URLLIB=urllib.request - -TASKS = ["CoLA", "SST", "MRPC", "QQP", "STS", "MNLI", "SNLI", "QNLI", "RTE", "WNLI", "diagnostic"] -TASK2PATH = {"CoLA":'https://firebasestorage.googleapis.com/v0/b/mtl-sentence-representations.appspot.com/o/data%2FCoLA.zip?alt=media&token=46d5e637-3411-4188-bc44-5809b5bfb5f4', - "SST":'https://firebasestorage.googleapis.com/v0/b/mtl-sentence-representations.appspot.com/o/data%2FSST-2.zip?alt=media&token=aabc5f6b-e466-44a2-b9b4-cf6337f84ac8', - "MRPC":'https://firebasestorage.googleapis.com/v0/b/mtl-sentence-representations.appspot.com/o/data%2Fmrpc_dev_ids.tsv?alt=media&token=ec5c0836-31d5-48f4-b431-7480817f1adc', - "QQP":'https://firebasestorage.googleapis.com/v0/b/mtl-sentence-representations.appspot.com/o/data%2FQQP.zip?alt=media&token=700c6acf-160d-4d89-81d1-de4191d02cb5', - "STS":'https://firebasestorage.googleapis.com/v0/b/mtl-sentence-representations.appspot.com/o/data%2FSTS-B.zip?alt=media&token=bddb94a7-8706-4e0d-a694-1109e12273b5', - "MNLI":'https://firebasestorage.googleapis.com/v0/b/mtl-sentence-representations.appspot.com/o/data%2FMNLI.zip?alt=media&token=50329ea1-e339-40e2-809c-10c40afff3ce', - "SNLI":'https://firebasestorage.googleapis.com/v0/b/mtl-sentence-representations.appspot.com/o/data%2FSNLI.zip?alt=media&token=4afcfbb2-ff0c-4b2d-a09a-dbf07926f4df', - "QNLI":'https://firebasestorage.googleapis.com/v0/b/mtl-sentence-representations.appspot.com/o/data%2FQNLI.zip?alt=media&token=c24cad61-f2df-4f04-9ab6-aa576fa829d0', - "RTE":'https://firebasestorage.googleapis.com/v0/b/mtl-sentence-representations.appspot.com/o/data%2FRTE.zip?alt=media&token=5efa7e85-a0bb-4f19-8ea2-9e1840f077fb', - "WNLI":'https://firebasestorage.googleapis.com/v0/b/mtl-sentence-representations.appspot.com/o/data%2FWNLI.zip?alt=media&token=068ad0a0-ded7-4bd7-99a5-5e00222e0faf', - "diagnostic":'https://storage.googleapis.com/mtl-sentence-representations.appspot.com/tsvsWithoutLabels%2FAX.tsv?GoogleAccessId=firebase-adminsdk-0khhl@mtl-sentence-representations.iam.gserviceaccount.com&Expires=2498860800&Signature=DuQ2CSPt2Yfre0C%2BiISrVYrIFaZH1Lc7hBVZDD4ZyR7fZYOMNOUGpi8QxBmTNOrNPjR3z1cggo7WXFfrgECP6FBJSsURv8Ybrue8Ypt%2FTPxbuJ0Xc2FhDi%2BarnecCBFO77RSbfuz%2Bs95hRrYhTnByqu3U%2FYZPaj3tZt5QdfpH2IUROY8LiBXoXS46LE%2FgOQc%2FKN%2BA9SoscRDYsnxHfG0IjXGwHN%2Bf88q6hOmAxeNPx6moDulUF6XMUAaXCSFU%2BnRO2RDL9CapWxj%2BDl7syNyHhB7987hZ80B%2FwFkQ3MEs8auvt5XW1%2Bd4aCU7ytgM69r8JDCwibfhZxpaa4gd50QXQ%3D%3D'} - -MRPC_TRAIN = 'https://dl.fbaipublicfiles.com/senteval/senteval_data/msr_paraphrase_train.txt' -MRPC_TEST = 'https://dl.fbaipublicfiles.com/senteval/senteval_data/msr_paraphrase_test.txt' - -def download_and_extract(task, data_dir): - print("Downloading and extracting %s..." % task) - data_file = "%s.zip" % task - URLLIB.urlretrieve(TASK2PATH[task], data_file) - with zipfile.ZipFile(data_file) as zip_ref: - zip_ref.extractall(data_dir) - os.remove(data_file) - print("\tCompleted!") - -def format_mrpc(data_dir, path_to_data): - print("Processing MRPC...") - mrpc_dir = os.path.join(data_dir, "MRPC") - if not os.path.isdir(mrpc_dir): - os.mkdir(mrpc_dir) - if path_to_data: - mrpc_train_file = os.path.join(path_to_data, "msr_paraphrase_train.txt") - mrpc_test_file = os.path.join(path_to_data, "msr_paraphrase_test.txt") - else: - mrpc_train_file = os.path.join(mrpc_dir, "msr_paraphrase_train.txt") - mrpc_test_file = os.path.join(mrpc_dir, "msr_paraphrase_test.txt") - URLLIB.urlretrieve(MRPC_TRAIN, mrpc_train_file) - URLLIB.urlretrieve(MRPC_TEST, mrpc_test_file) - assert os.path.isfile(mrpc_train_file), "Train data not found at %s" % mrpc_train_file - assert os.path.isfile(mrpc_test_file), "Test data not found at %s" % mrpc_test_file - URLLIB.urlretrieve(TASK2PATH["MRPC"], os.path.join(mrpc_dir, "dev_ids.tsv")) - - dev_ids = [] - with io.open(os.path.join(mrpc_dir, "dev_ids.tsv"), encoding='utf-8') as ids_fh: - for row in ids_fh: - dev_ids.append(row.strip().split('\t')) - - with io.open(mrpc_train_file, encoding='utf-8') as data_fh, \ - io.open(os.path.join(mrpc_dir, "train.tsv"), 'w', encoding='utf-8') as train_fh, \ - io.open(os.path.join(mrpc_dir, "dev.tsv"), 'w', encoding='utf-8') as dev_fh: - header = data_fh.readline() - train_fh.write(header) - dev_fh.write(header) - for row in data_fh: - label, id1, id2, s1, s2 = row.strip().split('\t') - if [id1, id2] in dev_ids: - dev_fh.write("%s\t%s\t%s\t%s\t%s\n" % (label, id1, id2, s1, s2)) - else: - train_fh.write("%s\t%s\t%s\t%s\t%s\n" % (label, id1, id2, s1, s2)) - - with io.open(mrpc_test_file, encoding='utf-8') as data_fh, \ - io.open(os.path.join(mrpc_dir, "test.tsv"), 'w', encoding='utf-8') as test_fh: - header = data_fh.readline() - test_fh.write("index\t#1 ID\t#2 ID\t#1 String\t#2 String\n") - for idx, row in enumerate(data_fh): - label, id1, id2, s1, s2 = row.strip().split('\t') - test_fh.write("%d\t%s\t%s\t%s\t%s\n" % (idx, id1, id2, s1, s2)) - print("\tCompleted!") - -def download_diagnostic(data_dir): - print("Downloading and extracting diagnostic...") - if not os.path.isdir(os.path.join(data_dir, "diagnostic")): - os.mkdir(os.path.join(data_dir, "diagnostic")) - data_file = os.path.join(data_dir, "diagnostic", "diagnostic.tsv") - URLLIB.urlretrieve(TASK2PATH["diagnostic"], data_file) - print("\tCompleted!") - return - -def get_tasks(task_names): - task_names = task_names.split(',') - if "all" in task_names: - tasks = TASKS - else: - tasks = [] - for task_name in task_names: - assert task_name in TASKS, "Task %s not found!" % task_name - tasks.append(task_name) - return tasks - -def main(arguments): - parser = argparse.ArgumentParser() - parser.add_argument('-d', '--data_dir', help='directory to save data to', type=str, default='.') - parser.add_argument('-t', '--tasks', help='tasks to download data for as a comma separated string', - type=str, default='all') - parser.add_argument('--path_to_mrpc', help='path to directory containing extracted MRPC data, msr_paraphrase_train.txt and msr_paraphrase_text.txt', - type=str, default='') - args = parser.parse_args(arguments) - - if not os.path.isdir(args.data_dir): - os.mkdir(args.data_dir) - tasks = get_tasks(args.tasks) - - for task in tasks: - if task == 'MRPC': - format_mrpc(args.data_dir, args.path_to_mrpc) - elif task == 'diagnostic': - download_diagnostic(args.data_dir) - else: - download_and_extract(task, args.data_dir) - - -if __name__ == '__main__': - sys.exit(main(sys.argv[1:])) \ No newline at end of file diff --git a/TensorFlow/LanguageModeling/BERT/data/pretrained_models_google/download_models.py b/TensorFlow/LanguageModeling/BERT/data/pretrained_models_google/download_models.py deleted file mode 100644 index e671c194..00000000 --- a/TensorFlow/LanguageModeling/BERT/data/pretrained_models_google/download_models.py +++ /dev/null @@ -1,123 +0,0 @@ -# NVIDIA - -import hashlib -import urllib.request -import zipfile - -# Download urls -model_urls = { - 'bert_base_uncased' : ('https://storage.googleapis.com/bert_models/2018_10_18/uncased_L-12_H-768_A-12.zip', 'uncased_L-12_H-768_A-12.zip'), - 'bert_large_uncased' : ('https://storage.googleapis.com/bert_models/2018_10_18/uncased_L-24_H-1024_A-16.zip', 'uncased_L-24_H-1024_A-16.zip'), - 'bert_base_cased' : ('https://storage.googleapis.com/bert_models/2018_10_18/cased_L-12_H-768_A-12.zip', 'cased_L-12_H-768_A-12.zip'), - 'bert_large_cased' : ('https://storage.googleapis.com/bert_models/2018_10_18/cased_L-24_H-1024_A-16.zip', 'cased_L-24_H-1024_A-16.zip'), - 'bert_base_multilingual_cased' : ('https://storage.googleapis.com/bert_models/2018_11_23/multi_cased_L-12_H-768_A-12.zip', 'multi_cased_L-12_H-768_A-12.zip'), - 'bert_large_multilingual_uncased' : ('https://storage.googleapis.com/bert_models/2018_11_03/multilingual_L-12_H-768_A-12.zip', 'multilingual_L-12_H-768_A-12.zip'), - 'bert_base_chinese' : ('https://storage.googleapis.com/bert_models/2018_11_03/chinese_L-12_H-768_A-12.zip', 'chinese_L-12_H-768_A-12.zip') -} - -# SHA256sum verification for file download integrity (and checking for changes from the download source over time) -bert_base_uncased_sha = { - 'bert_config.json' : '7b4e5f53efbd058c67cda0aacfafb340113ea1b5797d9ce6ee411704ba21fcbc', - 'bert_model.ckpt.data-00000-of-00001' : '58580dc5e0bf0ae0d2efd51d0e8272b2f808857f0a43a88aaf7549da6d7a8a84', - 'bert_model.ckpt.index' : '04c1323086e2f1c5b7c0759d8d3e484afbb0ab45f51793daab9f647113a0117b', - 'bert_model.ckpt.meta' : 'dd5682170a10c3ea0280c2e9b9a45fee894eb62da649bbdea37b38b0ded5f60e', - 'vocab.txt' : '07eced375cec144d27c900241f3e339478dec958f92fddbc551f295c992038a3', -} - -bert_large_uncased_sha = { - 'bert_config.json' : 'bfa42236d269e2aeb3a6d30412a33d15dbe8ea597e2b01dc9518c63cc6efafcb', - 'bert_model.ckpt.data-00000-of-00001' : 'bc6b3363e3be458c99ecf64b7f472d2b7c67534fd8f564c0556a678f90f4eea1', - 'bert_model.ckpt.index' : '68b52f2205ffc64dc627d1120cf399c1ef1cbc35ea5021d1afc889ffe2ce2093', - 'bert_model.ckpt.meta' : '6fcce8ff7628f229a885a593625e3d5ff9687542d5ef128d9beb1b0c05edc4a1', - 'vocab.txt' : '07eced375cec144d27c900241f3e339478dec958f92fddbc551f295c992038a3', -} - -bert_base_cased_sha = { - 'bert_config.json' : 'f11dfb757bea16339a33e1bf327b0aade6e57fd9c29dc6b84f7ddb20682f48bc', - 'bert_model.ckpt.data-00000-of-00001' : '734d5a1b68bf98d4e9cb6b6692725d00842a1937af73902e51776905d8f760ea', - 'bert_model.ckpt.index' : '517d6ef5c41fc2ca1f595276d6fccf5521810d57f5a74e32616151557790f7b1', - 'bert_model.ckpt.meta' : '5f8a9771ff25dadd61582abb4e3a748215a10a6b55947cbb66d0f0ba1694be98', - 'vocab.txt' : 'eeaa9875b23b04b4c54ef759d03db9d1ba1554838f8fb26c5d96fa551df93d02', -} - -bert_large_cased_sha = { - 'bert_config.json' : '7adb2125c8225da495656c982fd1c5f64ba8f20ad020838571a3f8a954c2df57', - 'bert_model.ckpt.data-00000-of-00001' : '6ff33640f40d472f7a16af0c17b1179ca9dcc0373155fb05335b6a4dd1657ef0', - 'bert_model.ckpt.index' : 'ef42a53f577fbe07381f4161b13c7cab4f4fc3b167cec6a9ae382c53d18049cf', - 'bert_model.ckpt.meta' : 'd2ddff3ed33b80091eac95171e94149736ea74eb645e575d942ec4a5e01a40a1', - 'vocab.txt' : 'eeaa9875b23b04b4c54ef759d03db9d1ba1554838f8fb26c5d96fa551df93d02', -} - -bert_base_multilingual_cased_sha = { - 'bert_config.json' : 'e76c3964bc14a8bb37a5530cdc802699d2f4a6fddfab0611e153aa2528f234f0', - 'bert_model.ckpt.data-00000-of-00001' : '55b8a2df41f69c60c5180e50a7c31b7cdf6238909390c4ddf05fbc0d37aa1ac5', - 'bert_model.ckpt.index' : '7d8509c2a62b4e300feb55f8e5f1eef41638f4998dd4d887736f42d4f6a34b37', - 'bert_model.ckpt.meta' : '95e5f1997e8831f1c31e5cf530f1a2e99f121e9cd20887f2dce6fe9e3343e3fa', - 'vocab.txt' : 'fe0fda7c425b48c516fc8f160d594c8022a0808447475c1a7c6d6479763f310c', -} - -bert_large_multilingual_uncased_sha = { - 'bert_config.json' : '49063bb061390211d2fdd108cada1ed86faa5f90b80c8f6fdddf406afa4c4624', - 'bert_model.ckpt.data-00000-of-00001' : '3cd83912ebeb0efe2abf35c9f1d5a515d8e80295e61c49b75c8853f756658429', - 'bert_model.ckpt.index' : '87c372c1a3b1dc7effaaa9103c80a81b3cbab04c7933ced224eec3b8ad2cc8e7', - 'bert_model.ckpt.meta' : '27f504f34f02acaa6b0f60d65195ec3e3f9505ac14601c6a32b421d0c8413a29', - 'vocab.txt' : '87b44292b452f6c05afa49b2e488e7eedf79ea4f4c39db6f2f4b37764228ef3f', -} - -bert_base_chinese_sha = { - 'bert_config.json' : '7aaad0335058e2640bcb2c2e9a932b1cd9da200c46ea7b8957d54431f201c015', - 'bert_model.ckpt.data-00000-of-00001' : '756699356b78ad0ef1ca9ba6528297bcb3dd1aef5feadd31f4775d7c7fc989ba', - 'bert_model.ckpt.index' : '46315546e05ce62327b3e2cd1bed22836adcb2ff29735ec87721396edb21b82e', - 'bert_model.ckpt.meta' : 'c0f8d51e1ab986604bc2b25d6ec0af7fd21ff94cf67081996ec3f3bf5d823047', - 'vocab.txt' : '45bbac6b341c319adc98a532532882e91a9cefc0329aa57bac9ae761c27b291c', -} - -# Relate SHA to urls for loop below -model_sha = { - 'bert_base_uncased' : bert_base_uncased_sha, - 'bert_large_uncased' : bert_large_uncased_sha, - 'bert_base_cased' : bert_base_cased_sha, - 'bert_large_cased' : bert_large_cased_sha, - 'bert_base_multilingual_cased' : bert_base_multilingual_cased_sha, - 'bert_large_multilingual_uncased' : bert_large_multilingual_uncased_sha, - 'bert_base_chinese' : bert_base_chinese_sha -} - -# Helper to get sha256sum of a file -def sha256sum(filename): - h = hashlib.sha256() - b = bytearray(128*1024) - mv = memoryview(b) - with open(filename, 'rb', buffering=0) as f: - for n in iter(lambda : f.readinto(mv), 0): - h.update(mv[:n]) - return h.hexdigest() - -# Iterate over urls: download, unzip, verify sha256sum -found_mismatch_sha = False -for model in model_urls: - url = model_urls[model][0] - file = model_urls[model][1] - - print("Downloading", url) - response = urllib.request.urlopen(url) - with open(file, "wb") as handle: - handle.write(response.read()) - - print("Unzipping", file) - zip = zipfile.ZipFile(file, 'r') - zip.extractall() - zip.close() - - sha_dict = model_sha[model] - for extracted_file in sha_dict: - sha = sha_dict[extracted_file] - if sha != sha256sum(file[:-4] + "/" + extracted_file): - found_mismatch_sha = True - print("SHA256sum does not match on file:", extracted_file, "from download url:", url) - else: - print(file[:-4] + "/" + extracted_file, "\t", "verified") - -if not found_mismatch_sha: - print("All downloads pass sha256sum verification.") - diff --git a/TensorFlow/LanguageModeling/BERT/data/squad/squad_download.sh b/TensorFlow/LanguageModeling/BERT/data/squad/squad_download.sh deleted file mode 100755 index 19f80940..00000000 --- a/TensorFlow/LanguageModeling/BERT/data/squad/squad_download.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env bash - -echo "Downloading dataset for squad..." - -# Download SQuAD - -v1="v1.1" -mkdir $v1 -wget https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v1.1.json -O $v1/train-v1.1.json -wget https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json -O $v1/dev-v1.1.json -wget https://worksheets.codalab.org/rest/bundles/0xbcd57bee090b421c982906709c8c27e1/contents/blob/ -O $v1/evaluate-v1.1.py - -EXP_TRAIN_v1='981b29407e0affa3b1b156f72073b945 -' -EXP_DEV_v1='3e85deb501d4e538b6bc56f786231552 -' -EXP_EVAL_v1='afb04912d18ff20696f7f88eed49bea9 -' -CALC_TRAIN_v1=`cat ${v1}/train-v1.1.json |md5sum` -CALC_DEV_v1=`cat ${v1}/dev-v1.1.json |md5sum` -CALC_EVAL_v1=`cat ${v1}/evaluate-v1.1.py |md5sum` - -v2="v2.0" -mkdir $v2 -wget https://rajpurkar.github.io/SQuAD-explorer/dataset/train-v2.0.json -O $v2/train-v2.0.json -wget https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v2.0.json -O $v2/dev-v2.0.json -wget https://worksheets.codalab.org/rest/bundles/0x6b567e1cf2e041ec80d7098f031c5c9e/contents/blob/ -O $v2/evaluate-v2.0.py - -EXP_TRAIN_v2='62108c273c268d70893182d5cf8df740 -' -EXP_DEV_v2='246adae8b7002f8679c027697b0b7cf8 -' -EXP_EVAL_v2='ff23213bed5516ea4a6d9edb6cd7d627 -' - -CALC_TRAIN_v2=`cat ${v2}/train-v2.0.json |md5sum` -CALC_DEV_v2=`cat ${v2}/dev-v2.0.json |md5sum` -CALC_EVAL_v2=`cat ${v2}/evaluate-v2.0.py |md5sum` - -echo "Squad data download done!" - -echo "Verifying Dataset...." - -if [ "$EXP_TRAIN_v1" != "$CALC_TRAIN_v1" ]; then - echo "train-v1.1.json is corrupted! md5sum doesn't match" -fi - -if [ "$EXP_DEV_v1" != "$CALC_DEV_v1" ]; then - echo "dev-v1.1.json is corrupted! md5sum doesn't match" -fi -if [ "$EXP_EVAL_v1" != "$CALC_EVAL_v1" ]; then - echo "evaluate-v1.1.py is corrupted! md5sum doesn't match" -fi - - -if [ "$EXP_TRAIN_v2" != "$CALC_TRAIN_v2" ]; then - echo "train-v2.0.json is corrupted! md5sum doesn't match" -fi -if [ "$EXP_DEV_v2" != "$CALC_DEV_v2" ]; then - echo "dev-v2.0.json is corrupted! md5sum doesn't match" -fi -if [ "$EXP_EVAL_v2" != "$CALC_EVAL_v2" ]; then - echo "evaluate-v2.0.py is corrupted! md5sum doesn't match" -fi - -echo "SQuAD download complete!" \ No newline at end of file diff --git a/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/config.sh b/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/config.sh deleted file mode 100644 index 88065ffc..00000000 --- a/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/config.sh +++ /dev/null @@ -1,28 +0,0 @@ -#! /bin/bash - -set -e - -USE_BERT_LARGE=true -MAX_SEQUENCE_LENGTH=512 -MAX_PREDICTIONS_PER_SEQUENCE=80 -MASKED_LM_PROB=0.15 -SEED=12345 -DUPE_FACTOR=5 -DO_LOWER_CASE="True" -N_LINES_PER_SHARD_APPROX=396000 # Default=396000 creates 256 shards - -N_PROCS_PREPROCESS=4 # Adjust this based on memory requirements and available number of cores -export WORKING_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" - -WIKI_DUMP="ftp://ftpmirror.your.org/pub/wikimedia/dumps/enwiki/20190301/enwiki-20190301-pages-articles-multistream.xml.bz2" -BERT_BASE_DIR="${WORKING_DIR}/../pretrained_models_google/uncased_L-12_H-768_A-12" -BERT_LARGE_DIR="${WORKING_DIR}/../pretrained_models_google/uncased_L-24_H-1024_A-16" - -if [ "$USE_BERT_LARGE" = true ] ; then - VOCAB_FILE="${BERT_LARGE_DIR}/vocab.txt" -else - VOCAB_FILE="${BERT_BASE_DIR}/vocab.txt" -fi - -OUTPUT_DIR="${WORKING_DIR}/final_tfrecords_sharded/bert_large_wikipedia_seq_${MAX_SEQUENCE_LENGTH}_pred_${MAX_PREDICTIONS_PER_SEQUENCE}" - diff --git a/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/create_pseudo_test_set.py b/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/create_pseudo_test_set.py deleted file mode 100644 index 194f15b7..00000000 --- a/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/create_pseudo_test_set.py +++ /dev/null @@ -1,18 +0,0 @@ -# NVIDIA - -import glob -import os -import random -import shutil - -input_dir = os.environ['WORKING_DIR'] + '/final_text_files_sharded/' -output_dir = os.environ['WORKING_DIR'] + '/test_set_text_files/' - -random.seed(13254) -n_shards_to_keep = 3 - -file_glob = glob.glob(input_dir + '/*', recursive=False) -file_glob = random.sample(file_glob, n_shards_to_keep) - -for filename in file_glob: - shutil.copy(filename, output_dir) diff --git a/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/create_pseudo_test_set.sh b/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/create_pseudo_test_set.sh deleted file mode 100755 index ffe355c7..00000000 --- a/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/create_pseudo_test_set.sh +++ /dev/null @@ -1,10 +0,0 @@ -#! /bin/bash - -source /workspace/bert/data/wikipedia_corpus/config.sh - -# Convert test set sharded text files into tfrecords that are ready for BERT pretraining -echo "Creating test set tfrecords for each text shard" -mkdir -p ${WORKING_DIR}/test_set_text_files -mkdir -p ${WORKING_DIR}/test_set_tfrecords -python3 ${WORKING_DIR}/create_pseudo_test_set.py -. ${WORKING_DIR}/preprocessing_test_set_xargs_wrapper.sh ${N_PROCS_PREPROCESS} diff --git a/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/preprocessing.sh b/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/preprocessing.sh deleted file mode 100755 index 35a96b21..00000000 --- a/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/preprocessing.sh +++ /dev/null @@ -1,23 +0,0 @@ -#! /bin/bash - -SHARD_INDEX=${1} -INPUT_FILE="${WORKING_DIR}/final_text_files_sharded/wikipedia.segmented.part.${SHARD_INDEX}.txt" - -source /workspace/bert/data/wikipedia_corpus/config.sh - -OUTPUT_DIR=${WORKING_DIR}/final_tfrecords_sharded -mkdir -p ${OUTPUT_DIR} - -OUTPUT_FILE="${OUTPUT_DIR}/tf_examples.tfrecord000${SHARD_INDEX}" - -python /workspace/bert/utils/create_pretraining_data.py \ - --input_file=${INPUT_FILE} \ - --output_file=${OUTPUT_FILE} \ - --vocab_file=${VOCAB_FILE} \ - --do_lower_case=${DO_LOWER_CASE} \ - --max_seq_length=${MAX_SEQUENCE_LENGTH} \ - --max_predictions_per_seq=${MAX_PREDICTIONS_PER_SEQUENCE} \ - --masked_lm_prob=${MASKED_LM_PROB} \ - --random_seed=${SEED} \ - --dupe_factor=${DUPE_FACTOR} - diff --git a/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/preprocessing_test_set.sh b/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/preprocessing_test_set.sh deleted file mode 100755 index 3a12ee63..00000000 --- a/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/preprocessing_test_set.sh +++ /dev/null @@ -1,28 +0,0 @@ -#! /bin/bash - -INPUT_FILE=${1} - -source /workspace/bert/data/wikipedia_corpus/config.sh - -OUTPUT_DIR=${WORKING_DIR}/test_set_tfrecords -mkdir -p ${OUTPUT_DIR} - -#SHARD_INDEX=$(( echo ${INPUT_FILE} | egrep -o [0-9]+ )) -SHARD_INDEX=$( eval echo ${INPUT_FILE} | sed -e s/[^0-9]//g ) -OUTPUT_FILE="${OUTPUT_DIR}/tf_examples.tfrecord000${SHARD_INDEX}" - -SEED=13254 - -echo "Shard index ${SHARD_INDEX}" - -python /workspace/bert/utils/create_pretraining_data.py \ - --input_file=${INPUT_FILE} \ - --output_file=${OUTPUT_FILE} \ - --vocab_file=${VOCAB_FILE} \ - --do_lower_case=${DO_LOWER_CASE} \ - --max_seq_length=${MAX_SEQUENCE_LENGTH} \ - --max_predictions_per_seq=${MAX_PREDICTIONS_PER_SEQUENCE} \ - --masked_lm_prob=${MASKED_LM_PROB} \ - --random_seed=${SEED} \ - --dupe_factor=${DUPE_FACTOR} - diff --git a/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/preprocessing_test_set_xargs_wrapper.sh b/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/preprocessing_test_set_xargs_wrapper.sh deleted file mode 100755 index 8d61469a..00000000 --- a/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/preprocessing_test_set_xargs_wrapper.sh +++ /dev/null @@ -1,12 +0,0 @@ -#! /bin/bash - -source /workspace/bert/data/wikipedia_corpus/config.sh - -SHARD_COUNT=0 -rm -rf /workspace/bert/data/wikipedia_corpus/xarg_list.txt -touch /workspace/bert/data/wikipedia_corpus/xarg_list.txt -for file in /workspace/bert/data/wikipedia_corpus/test_set_text_files/*; do - echo ${file} >> /workspace/bert/data/wikipedia_corpus/xarg_list.txt -done - -xargs -n 1 --max-procs=${N_PROCS_PREPROCESS} --arg-file=/workspace/bert/data/wikipedia_corpus/xarg_list.txt /workspace/bert/data/wikipedia_corpus/preprocessing_test_set.sh diff --git a/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/preprocessing_xargs_wrapper.sh b/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/preprocessing_xargs_wrapper.sh deleted file mode 100755 index 6e52bc75..00000000 --- a/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/preprocessing_xargs_wrapper.sh +++ /dev/null @@ -1,13 +0,0 @@ -#! /bin/bash - -source /workspace/bert/data/wikipedia_corpus/config.sh - -SHARD_COUNT=0 -rm -rf /workspace/bert/data/wikipedia_corpus/xarg_list.txt -touch /workspace/bert/data/wikipedia_corpus/xarg_list.txt -for file in /workspace/bert/data/wikipedia_corpus/final_text_files_sharded/*; do - echo ${SHARD_COUNT} >> /workspace/bert/data/wikipedia_corpus/xarg_list.txt - SHARD_COUNT=$((SHARD_COUNT+1)) -done - -xargs -n 1 --max-procs=${N_PROCS_PREPROCESS} --arg-file=/workspace/bert/data/wikipedia_corpus/xarg_list.txt /workspace/bert/data/wikipedia_corpus/preprocessing.sh diff --git a/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/remove_tags_and_clean.py b/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/remove_tags_and_clean.py deleted file mode 100644 index 69ec57e2..00000000 --- a/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/remove_tags_and_clean.py +++ /dev/null @@ -1,30 +0,0 @@ -# NVIDIA - -import glob -import os - -output_file = os.environ['WORKING_DIR'] + '/intermediate_files/wikipedia.txt' - -with open(output_file, "w") as ofile: - for dirname in glob.glob('extracted_articles/*/', recursive=False): - for filename in glob.glob(dirname + 'wiki_*', recursive=True): - print(filename) - article_lines = [] - article_open = False - - with open(filename, "r") as file: - for line in file: - if "" in line: - article_open = False - for oline in article_lines[1:]: - if oline != "\n": - ofile.write(oline.rstrip() + " ") - ofile.write("\n\n") - article_lines = [] - else: - if article_open: - article_lines.append(line) - - diff --git a/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/run_preprocessing.sh b/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/run_preprocessing.sh deleted file mode 100755 index 4736359b..00000000 --- a/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/run_preprocessing.sh +++ /dev/null @@ -1,49 +0,0 @@ -#! /bin/bash - -source /workspace/bert/data/wikipedia_corpus/config.sh - -# Note: There are several directories created to make it clear what has been performed at each stage of preprocessing. The intermediate files may be useful if you want to further clean/prepare/augment the data for your own applications. -# NLTK was chosen as the default over spaCy simply due to speed of sentence segmentation on the large files. - -# Download Wikipedia dump file -mkdir -p ${WORKING_DIR}/download - -# Not using --noclobber since it emits an error if exists (incompatible with bash 'set -e') -echo "Downloading Wikidump" -if [ ! -f ${WORKING_DIR}/download/wikidump.xml.bz2 ]; then - cd ${WORKING_DIR}/download && wget -O wikidump.xml.bz2 ${WIKI_DUMP} -fi - -# Extract dump -echo "Extracting Wikidump" -mkdir -p ${WORKING_DIR}/raw_data -#cd ${WORKING_DIR}/raw_data && pv ${WORKING_DIR}/download/wikidump.xml.bz2 | pbzip2 -kdc > ${WORKING_DIR}/raw_data/wikidump.xml -cd ${WORKING_DIR}/raw_data && pv ${WORKING_DIR}/download/wikidump.xml.bz2 | bunzip2 -kdc > ${WORKING_DIR}/raw_data/wikidump.xml -#cd ${WORKING_DIR}/raw_data && bunzip2 -kdc ${WORKING_DIR}/download/wikidump.xml.bz2 > ${WORKING_DIR}/raw_data/wikidump.xml - -# Wikiextractor.py - Creates lots of folders/files in "doc format" -echo "Running Wikiextractor" -mkdir -p ${WORKING_DIR}/extracted_articles -/workspace/wikiextractor/WikiExtractor.py ${WORKING_DIR}/raw_data/wikidump.xml -b 1000M --processes ${N_PROCS_PREPROCESS} -o ${WORKING_DIR}/extracted_articles - -# Remove XML Tags and extraneous titles (since they are not sentences) -# Also clean to remove lines between paragraphs within article and use space-separated articles -echo "Cleaning and formatting files (one article per line)" -mkdir -p ${WORKING_DIR}/intermediate_files -python3 ${WORKING_DIR}/remove_tags_and_clean.py - -# Split articles into one-sentence-per-line format for use with BERT scripts -echo "Applying sentence segmentation to get one sentence per line" -mkdir -p ${WORKING_DIR}/final_text_file_single -python3 ${WORKING_DIR}/wiki_sentence_segmentation_nltk.py -# Note: NLTK can be replaced with Spacy, although it is slower (2 variations provided) - -# Shard finalized text so that it has a chance of fitting in memory when creating pretraining data into tfrecords (choose appropriate number of shards for distributed training) -echo "Shard text files - size is approximate to prevent splitting an article across shards" -mkdir -p ${WORKING_DIR}/final_text_files_sharded -python3 ${WORKING_DIR}/shard_text_input_file.py - -# Convert sharded text files into tfrecords that are ready for BERT pretraining -echo "Creating tfrecords for each text shard" -mkdir -p ${WORKING_DIR}/final_tfrecords_sharded -. ${WORKING_DIR}/preprocessing_xargs_wrapper.sh ${N_PROCS_PREPROCESS} diff --git a/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/shard_text_input_file.py b/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/shard_text_input_file.py deleted file mode 100644 index dad10935..00000000 --- a/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/shard_text_input_file.py +++ /dev/null @@ -1,39 +0,0 @@ -# NVIDIA - -import os - -input_file = os.environ['WORKING_DIR'] + '/final_text_file_single/wikipedia.segmented.nltk.txt' -output_file = os.environ['WORKING_DIR'] + '/final_text_files_sharded/wikipedia.segmented.part.' - -doc_seperator = "\n" - -line_buffer = [] -shard_size = 396000 # Approximate, will split at next article break -line_counter = 0 -shard_index = 0 - -ifile_lines = 0 -with open(input_file) as ifile: - for line in ifile: - ifile_lines += 1 - -print("Input file contains", ifile_lines, "lines.") - -iline_counter = 1 -with open(input_file) as ifile: - for line in ifile: - if line_counter < shard_size and iline_counter < ifile_lines: - line_buffer.append(line) - line_counter += 1 - iline_counter += 1 - elif line_counter >= shard_size and line != "\n" and iline_counter < ifile_lines: - line_buffer.append(line) - line_counter += 1 - iline_counter += 1 - else: - with open(output_file + str(shard_index) + ".txt", "w") as ofile: - for oline in line_buffer: - ofile.write(oline) - line_buffer = [] - line_counter = 0 - shard_index += 1 diff --git a/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/wiki_sentence_segmentation_nltk.py b/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/wiki_sentence_segmentation_nltk.py deleted file mode 100644 index 58381def..00000000 --- a/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/wiki_sentence_segmentation_nltk.py +++ /dev/null @@ -1,20 +0,0 @@ -# NVIDIA - -import nltk -import os - -nltk.download('punkt') - -input_file = os.environ['WORKING_DIR'] + '/intermediate_files/wikipedia.txt' -output_file = os.environ['WORKING_DIR'] + '/final_text_file_single/wikipedia.segmented.nltk.txt' - -doc_seperator = "\n" - -with open(input_file) as ifile: - with open(output_file, "w") as ofile: - for line in ifile: - if line != "\n": - sent_list = nltk.tokenize.sent_tokenize(line) - for sent in sent_list: - ofile.write(sent + "\n") - ofile.write(doc_seperator) diff --git a/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/wiki_sentence_segmentation_spacy.py b/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/wiki_sentence_segmentation_spacy.py deleted file mode 100644 index 69a061b4..00000000 --- a/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/wiki_sentence_segmentation_spacy.py +++ /dev/null @@ -1,22 +0,0 @@ -# NVIDIA - -import os -import spacy - -#spacy.prefer_gpu() -spacy.require_gpu() - -input_file = os.environ['WORKING_DIR'] + '/intermediate_files/wikipedia.txt' -output_file = os.environ['WORKING_DIR'] + '/final_test_file_single/wikipedia.segmented.txt' - -nlp = spacy.load('en_core_web_sm') - -doc_seperator = "\n" - -with open(input_file) as ifile: - with open(output_file, "w") as ofile: - for line in ifile: - if line != "\n": - doc = nlp(line) - for sent in doc.sents: - ofile.write(sent.text + "\n") diff --git a/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/wiki_sentence_segmentation_spacy_pipe.py b/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/wiki_sentence_segmentation_spacy_pipe.py deleted file mode 100644 index ca8b83b0..00000000 --- a/TensorFlow/LanguageModeling/BERT/data/wikipedia_corpus/wiki_sentence_segmentation_spacy_pipe.py +++ /dev/null @@ -1,33 +0,0 @@ -# NVIDIA - -import os -import spacy - -#spacy.prefer_gpu() -spacy.require_gpu() - -input_file = os.environ['WORKING_DIR'] + '/intermediate_files/wikipedia.txt' -output_file = os.environ['WORKING_DIR'] + '/final_test_file_single/wikipedia.segmented.txt' - -nlp = spacy.load('en_core_web_sm') - -doc_seperator = "\n" - -file_mem = [] - -print("Reading file into memory.") -with open(input_file) as ifile: - for line in ifile: - if line != "\n": - file_mem.append(line) - -print("File read.") -print("Starting nlp.pipe") -docs = nlp.pipe(file_mem, batch_size=1000) - -print("Starting to write output") -with open(output_file, "w") as ofile: - for item in docs: - for sent in item.sents: - if sent.text != "\n": - ofile.write(sent.text + "\n") diff --git a/TensorFlow/LanguageModeling/BERT/optimization.py b/TensorFlow/LanguageModeling/BERT/optimization.py index c1b94718..c6f37866 100644 --- a/TensorFlow/LanguageModeling/BERT/optimization.py +++ b/TensorFlow/LanguageModeling/BERT/optimization.py @@ -1,4 +1,5 @@ # coding=utf-8 +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. # Copyright 2018 The Google AI Language Team Authors. # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -12,6 +13,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. + """Functions and classes related to optimization (weight updates).""" from __future__ import absolute_import @@ -20,14 +22,25 @@ from __future__ import print_function import re import tensorflow as tf +from tensorflow.python.ops import array_ops +from tensorflow.python.ops import linalg_ops +from tensorflow.python.ops import math_ops +from horovod.tensorflow.compression import Compression - -def create_optimizer(loss, init_lr, num_train_steps, num_warmup_steps, hvd=None, manual_fp16=False, use_fp16=False): +def create_optimizer(loss, init_lr, num_train_steps, num_warmup_steps, hvd=None, manual_fp16=False, use_fp16=False, num_accumulation_steps=1, + optimizer_type="adam", allreduce_post_accumulation=False): """Creates an optimizer training op.""" global_step = tf.train.get_or_create_global_step() - + # avoid step change in learning rate at end of warmup phase - decayed_learning_rate_at_crossover_point = init_lr * (1.0-float(num_warmup_steps)/float(num_train_steps)) + if optimizer_type == "adam": + power = 1.0 + decayed_learning_rate_at_crossover_point = init_lr * ( + (1.0 - float(num_warmup_steps) / float(num_train_steps)) ** power) + else: + power = 0.5 + decayed_learning_rate_at_crossover_point = init_lr + adjusted_init_lr = init_lr * (init_lr / decayed_learning_rate_at_crossover_point) print('decayed_learning_rate_at_crossover_point = %e, adjusted_init_lr = %e' % (decayed_learning_rate_at_crossover_point, adjusted_init_lr)) @@ -39,7 +52,7 @@ def create_optimizer(loss, init_lr, num_train_steps, num_warmup_steps, hvd=None, global_step, num_train_steps, end_learning_rate=0.0, - power=1.0, + power=power, cycle=False) # Implements linear warmup. I.e., if global_step < num_warmup_steps, the @@ -58,49 +71,120 @@ def create_optimizer(loss, init_lr, num_train_steps, num_warmup_steps, hvd=None, learning_rate = ( (1.0 - is_warmup) * learning_rate + is_warmup * warmup_learning_rate) - # It is recommended that you use this optimizer for fine tuning, since this - # is how the model was trained (note that the Adam m/v variables are NOT - # loaded from init_checkpoint.) - optimizer = AdamWeightDecayOptimizer( - learning_rate=learning_rate, - weight_decay_rate=0.01, - beta_1=0.9, - beta_2=0.999, - epsilon=1e-6, - exclude_from_weight_decay=["LayerNorm", "layer_norm", "bias"]) + if optimizer_type == "lamb": + print("Initializing LAMB Optimizer") + optimizer = LAMBOptimizer( + learning_rate=learning_rate, + weight_decay_rate=0.01, + beta_1=0.9, + beta_2=0.999, + epsilon=1e-6, + exclude_from_weight_decay=["LayerNorm", "layer_norm", "bias"]) + else: + print("Initializing ADAM Weight Decay Optimizer") + # It is recommended that you use this optimizer for fine tuning, since this + # is how the model was trained (note that the Adam m/v variables are NOT + # loaded from init_checkpoint.) + optimizer = AdamWeightDecayOptimizer( + learning_rate=learning_rate, + weight_decay_rate=0.01, + beta_1=0.9, + beta_2=0.999, + epsilon=1e-6, + exclude_from_weight_decay=["LayerNorm", "layer_norm", "bias"]) - if hvd is not None: - from horovod.tensorflow.compression import Compression - optimizer = hvd.DistributedOptimizer(optimizer, sparse_as_dense=True, compression=Compression.none) + if hvd is not None and (num_accumulation_steps == 1 or (not allreduce_post_accumulation)): + optimizer = hvd.DistributedOptimizer(optimizer, sparse_as_dense=True, compression=Compression.fp16 if use_fp16 or manual_fp16 else Compression.none) if manual_fp16 or use_fp16: loss_scale_manager = tf.contrib.mixed_precision.ExponentialUpdateLossScaleManager(init_loss_scale=2**32, incr_every_n_steps=1000, decr_every_n_nan_or_inf=2, decr_ratio=0.5) optimizer = tf.contrib.mixed_precision.LossScaleOptimizer(optimizer, loss_scale_manager) tvars = tf.trainable_variables() - grads_and_vars = optimizer.compute_gradients(loss, tvars) - grads_and_vars = [(g,v) for g,v in grads_and_vars if g is not None] - grads, tvars = list(zip(*grads_and_vars)) - all_are_finite = tf.reduce_all([tf.reduce_all(tf.is_finite(g)) for g in grads]) if manual_fp16 or use_fp16 else tf.constant(True, dtype=tf.bool) + grads_and_vars = optimizer.compute_gradients(loss * 1.0 / num_accumulation_steps, tvars) - # This is how the model was pre-trained. - # ensure global norm is a finite number - # to prevent clip_by_global_norm from having a hizzy fit. - (clipped_grads, _) = tf.clip_by_global_norm( - grads, clip_norm=1.0, - use_norm=tf.cond( - all_are_finite, - lambda: tf.global_norm(grads), - lambda: tf.constant(1.0))) + if num_accumulation_steps > 1: + local_step = tf.get_variable(name="local_step", shape=[], dtype=tf.int32, trainable=False, + initializer=tf.zeros_initializer) + batch_finite = tf.get_variable(name="batch_finite", shape=[], dtype=tf.bool, trainable=False, + initializer=tf.ones_initializer) + accum_vars = [tf.get_variable( + name=tvar.name.split(":")[0] + "/accum", + shape=tvar.shape.as_list(), + dtype=tf.float32, + trainable=False, + initializer=tf.zeros_initializer()) for tvar in tf.trainable_variables()] - train_op = optimizer.apply_gradients( - list(zip(clipped_grads, tvars)), global_step=global_step) + reset_step = tf.cast(tf.math.equal(local_step % num_accumulation_steps, 0), dtype=tf.bool) + local_step = tf.cond(reset_step, lambda:local_step.assign(tf.ones_like(local_step)), lambda:local_step.assign_add(1)) - # Normally the global step update is done inside of `apply_gradients`. - # However, `AdamWeightDecayOptimizer` doesn't do this. But if you use - # a different optimizer, you should probably take this line out. - new_global_step = tf.cond(all_are_finite, lambda: global_step+1, lambda: global_step) - new_global_step = tf.identity(new_global_step, name='step_update') - train_op = tf.group(train_op, [global_step.assign(new_global_step)]) + grads_and_vars_and_accums = [(gv[0],gv[1],accum_vars[i]) for i, gv in enumerate(grads_and_vars) if gv[0] is not None] + grads, tvars, accum_vars = list(zip(*grads_and_vars_and_accums)) + + all_are_finite = tf.reduce_all([tf.reduce_all(tf.is_finite(g)) for g in grads]) if manual_fp16 or use_fp16 else tf.constant(True, dtype=tf.bool) + batch_finite = tf.cond(reset_step, + lambda: batch_finite.assign(tf.math.logical_and(tf.constant(True, dtype=tf.bool), all_are_finite)), + lambda:batch_finite.assign(tf.math.logical_and(batch_finite, all_are_finite))) + + # This is how the model was pre-trained. + # ensure global norm is a finite number + # to prevent clip_by_global_norm from having a hizzy fit. + (clipped_grads, _) = tf.clip_by_global_norm( + grads, clip_norm=1.0, + use_norm=tf.cond( + all_are_finite, + lambda: tf.global_norm(grads), + lambda: tf.constant(1.0))) + + accum_vars = tf.cond(reset_step, + lambda: [accum_vars[i].assign(grad) for i, grad in enumerate(clipped_grads)], + lambda: [accum_vars[i].assign_add(grad) for i, grad in enumerate(clipped_grads)]) + + def update(accum_vars): + if allreduce_post_accumulation and hvd is not None: + accum_vars = [hvd.allreduce(tf.convert_to_tensor(accum_var), compression=Compression.fp16 if use_fp16 or manual_fp16 else Compression.none) if isinstance(accum_var, tf.IndexedSlices) + else hvd.allreduce(accum_var, compression=Compression.fp16 if use_fp16 or manual_fp16 else Compression.none) for accum_var in accum_vars] + return optimizer.apply_gradients(list(zip(accum_vars, tvars)), global_step=global_step) + + update_step = tf.identity(tf.cast(tf.math.equal(local_step % num_accumulation_steps, 0), dtype=tf.bool), name="update_step") + update_op = tf.cond(update_step, + lambda: update(accum_vars), lambda: tf.no_op()) + + # Normally the global step update is done inside of `apply_gradients`. + # However, `AdamWeightDecayOptimizer` doesn't do this. But if you use + # a different optimizer, you should probably take this line out. + # new_global_step = tf.identity(tf.cond(tf.math.logical_and(update_step, batch_finite), lambda: global_step.assign_add(1), lambda: global_step.assign(global_step)), name='step_update') + # train_op = tf.group(update_op, new_global_step) + new_global_step = tf.cond(tf.math.logical_and(update_step, batch_finite), lambda: global_step+1, lambda: global_step) + new_global_step = tf.identity(new_global_step, name='step_update') + train_op = tf.group(update_op, [global_step.assign(new_global_step)]) + else: + grads_and_vars = [(g, v) for g, v in grads_and_vars if g is not None] + grads, tvars = list(zip(*grads_and_vars)) + all_are_finite = tf.reduce_all( + [tf.reduce_all(tf.is_finite(g)) for g in grads]) if use_fp16 or manual_fp16 else tf.constant(True, dtype=tf.bool) + + # This is how the model was pre-trained. + # ensure global norm is a finite number + # to prevent clip_by_global_norm from having a hizzy fit. + (clipped_grads, _) = tf.clip_by_global_norm( + grads, clip_norm=1.0, + use_norm=tf.cond( + all_are_finite, + lambda: tf.global_norm(grads), + lambda: tf.constant(1.0))) + + train_op = optimizer.apply_gradients( + list(zip(clipped_grads, tvars)), global_step=global_step) + + # Normally the global step update is done inside of `apply_gradients`. + # However, `AdamWeightDecayOptimizer` doesn't do this. But if you use + # a different optimizer, you should probably take this line out. + new_global_step = tf.cond(all_are_finite, lambda: global_step + 1, lambda: global_step) + new_global_step = tf.identity(new_global_step, name='step_update') + train_op = tf.group(train_op, [global_step.assign(new_global_step)]) + + # new_global_step = tf.identity(tf.cond(all_are_finite, lambda: global_step.assign_add(1), lambda: global_step.assign(global_step)), name='step_update') + # train_op = tf.group(update_op, new_global_step) return train_op @@ -206,3 +290,120 @@ class AdamWeightDecayOptimizer(tf.train.Optimizer): if m is not None: param_name = m.group(1) return param_name + + +class LAMBOptimizer(tf.train.Optimizer): + """A LAMB optimizer that includes "correct" L2 weight decay.""" + + def __init__(self, + learning_rate, + weight_decay_rate=0.0, + beta_1=0.9, + beta_2=0.999, + epsilon=1e-6, + exclude_from_weight_decay=None, + name="LAMBOptimizer"): + """Constructs a LAMBOptimizer.""" + super(LAMBOptimizer, self).__init__(False, name) + + self.learning_rate = tf.identity(learning_rate, name='learning_rate') + self.weight_decay_rate = weight_decay_rate + self.beta_1 = beta_1 + self.beta_2 = beta_2 + self.epsilon = epsilon + self.exclude_from_weight_decay = exclude_from_weight_decay + self.steps = 0 + + def apply_gradients(self, grads_and_vars, global_step=None, name=None, + manual_fp16=False): + """See base class.""" + assignments = [] + for (grad, param) in grads_and_vars: + if grad is None or param is None: + continue + + param_name = self._get_variable_name(param.name) + has_shadow = manual_fp16 and param.dtype.base_dtype != tf.float32 + if has_shadow: + # create shadow fp32 weights for fp16 variable + param_fp32 = tf.get_variable( + name=param_name + "/shadow", + dtype=tf.float32, + trainable=False, + initializer=tf.cast(param.initialized_value(),tf.float32)) + else: + param_fp32 = param + + m = tf.get_variable( + name=param_name + "/adam_m", + shape=param.shape.as_list(), + dtype=tf.float32, + trainable=False, + initializer=tf.zeros_initializer()) + v = tf.get_variable( + name=param_name + "/adam_v", + shape=param.shape.as_list(), + dtype=tf.float32, + trainable=False, + initializer=tf.zeros_initializer()) + + # LAMB update + next_m = ( + tf.multiply(self.beta_1, m) + tf.multiply(1.0 - self.beta_1, grad)) + next_v = ( + tf.multiply(self.beta_2, v) + tf.multiply(1.0 - self.beta_2, + tf.square(grad))) + + self.steps += 1 + beta1_correction = (1 - self.beta_1 ** self.steps) + beta2_correction = (1 - self.beta_2 ** self.steps) + + next_m_unbiased = next_m / beta1_correction + next_v_unbiased = next_v / beta2_correction + + update = next_m_unbiased / (tf.sqrt(next_v_unbiased) + self.epsilon) + + # Just adding the square of the weights to the loss function is *not* + # the correct way of using L2 regularization/weight decay with Adam, + # since that will interact with the m and v parameters in strange ways. + # + # Instead we want ot decay the weights in a manner that doesn't interact + # with the m/v parameters. This is equivalent to adding the square + # of the weights to the loss with plain (non-momentum) SGD. + if self._do_use_weight_decay(param_name): + update += self.weight_decay_rate * param_fp32 + + w_norm = linalg_ops.norm(param, ord=2) + g_norm = linalg_ops.norm(update, ord=2) + ratio = array_ops.where(math_ops.greater(w_norm, 0), array_ops.where( + math_ops.greater(g_norm, 0), (w_norm / g_norm), 1.0), 1.0) + + update_with_lr = ratio * self.learning_rate * update + + next_param = param_fp32 - update_with_lr + + if has_shadow: + # cast shadow fp32 weights to fp16 and assign to trainable variable + param.assign(tf.cast(next_param, param.dtype.base_dtype)) + assignments.extend( + [param_fp32.assign(next_param), + m.assign(next_m), + v.assign(next_v)]) + return tf.group(*assignments, name=name) + + def _do_use_weight_decay(self, param_name): + """Whether to use L2 weight decay for `param_name`.""" + if not self.weight_decay_rate: + return False + if self.exclude_from_weight_decay: + for r in self.exclude_from_weight_decay: + if re.search(r, param_name) is not None: + return False + return True + + def _get_variable_name(self, param_name): + """Get the variable name from the tensor name.""" + m = re.match("^(.*):\\d+$", param_name) + if m is not None: + param_name = m.group(1) + return param_name diff --git a/TensorFlow/LanguageModeling/BERT/run.sub b/TensorFlow/LanguageModeling/BERT/run.sub new file mode 100644 index 00000000..b743fda5 --- /dev/null +++ b/TensorFlow/LanguageModeling/BERT/run.sub @@ -0,0 +1,73 @@ +#!/bin/bash +#SBATCH --exclusive +#SBATCH --mem=0 +#SBATCH --overcommit + +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -eux + +readonly docker_image="nvcr.io/nvidia/tensorflow:19.08-py3" +readonly datadir="/raid/data/bert" +readonly checkpointdir="$PWD/checkpoints" + +readonly mounts=".:/workspace/bert,${datadir}:/workspace/bert/data,${checkpointdir}:/results" + + +srun --ntasks="${SLURM_JOB_NUM_NODES}" --ntasks-per-node=1 mkdir -p "${checkpointdir}/phase_1" +srun --ntasks="${SLURM_JOB_NUM_NODES}" --ntasks-per-node=1 mkdir -p "${checkpointdir}/phase_2" + +PHASE1="\ + --train_batch_size=${BATCHSIZE:-16} \ + --learning_rate=${LEARNING_RATE:-1.875e-4} \ + --num_accumulation_steps=${NUM_ACCUMULATION_STEPS:-128} \ + --input_files_dir=/workspace/bert/data/tfrecord/lower_case_1_seq_len_128_max_pred_20_masked_lm_prob_0.15_random_seed_12345_dupe_factor_5_shard_1472_test_split_10/books_wiki_en_corpus/training \ + --eval_files_dir=/workspace/bert/data/tfrecord/lower_case_1_seq_len_128_max_pred_20_masked_lm_prob_0.15_random_seed_12345_dupe_factor_5_shard_1472_test_split_10/books_wiki_en_corpus/test \ + --max_seq_length=128 \ + --max_predictions_per_seq=20 \ + --num_train_steps=7038 \ + --num_warmup_steps=2000 \ + --output_dir=/results/phase_1 \ + " + +PHASE2="\ + --train_batch_size=${BATCHSIZE:-2} \ + --learning_rate=${LEARNING_RATE:-1.25e-4} \ + --num_accumulation_steps=${NUM_ACCUMULATION_STEPS:-512} \ + --input_files_dir=/workspace/bert/data/tfrecord/lower_case_1_seq_len_512_max_pred_80_masked_lm_prob_0.15_random_seed_12345_dupe_factor_5_shard_1472_test_split_10/books_wiki_en_corpus/training \ + --eval_files_dir=/workspace/bert/data/tfrecord/lower_case_1_seq_len_512_max_pred_80_masked_lm_prob_0.15_random_seed_12345_dupe_factor_5_shard_1472_test_split_10/books_wiki_en_corpus/test \ + --max_seq_length=512 \ + --max_predictions_per_seq=80 \ + --num_train_steps=1564 \ + --num_warmup_steps=200 \ + --output_dir=/results/phase_2 \ + --init_checkpoint=/results/phase_1/model.ckpt-7038 \ + " + +PHASES=( "$PHASE1" "$PHASE2" ) + +PHASE=${PHASE:-1} + +BERT_CMD="\ + python /workspace/bert/run_pretraining.py \ + ${PHASES[$((PHASE-1))]} \ + --bert_config_file=/workspace/bert/data/download/google_pretrained_weights/uncased_L-24_H-1024_A-16/bert_config.json \ + --do_train=True \ + --do_eval=True \ + --save_checkpoints_steps=100 \ + --horovod --use_fp16 --use_xla \ + --allreduce_post_accumulation=True \ + --eval_batch_size=8" + +srun --mpi=pmi2 -l --container-image="${docker_image}" --container-mounts="${mounts}" bash -c "${BERT_CMD}" diff --git a/TensorFlow/LanguageModeling/BERT/run_classifier.py b/TensorFlow/LanguageModeling/BERT/run_classifier.py index d26466b8..61fe939a 100644 --- a/TensorFlow/LanguageModeling/BERT/run_classifier.py +++ b/TensorFlow/LanguageModeling/BERT/run_classifier.py @@ -1,4 +1,5 @@ # coding=utf-8 +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. # Copyright 2018 The Google AI Language Team Authors. # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -12,6 +13,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. + """BERT finetuning runner.""" from __future__ import absolute_import @@ -103,7 +105,9 @@ flags.DEFINE_integer("save_checkpoints_steps", 1000, flags.DEFINE_integer("iterations_per_loop", 1000, "How many steps to make in each estimator call.") - +flags.DEFINE_integer("num_accumulation_steps", 1, + "Number of accumulation steps before gradient update" + "Global batch size = num_accumulation_steps * train_batch_size") flags.DEFINE_bool("use_fp16", False, "Whether to use fp32 or fp16 arithmetic on GPU.") flags.DEFINE_bool("use_xla", False, "Whether to enable XLA JIT compilation.") @@ -264,7 +268,7 @@ def get_frozen_tftrt_model(bert_config, shape, num_labels, use_one_hot_embedding -def model_fn_builder(bert_config, num_labels, init_checkpoint, learning_rate, +def model_fn_builder(task_name, bert_config, num_labels, init_checkpoint, learning_rate, num_train_steps, num_warmup_steps, use_one_hot_embeddings, hvd=None): """Returns `model_fn` closure for Estimator.""" @@ -272,6 +276,25 @@ def model_fn_builder(bert_config, num_labels, init_checkpoint, learning_rate, def model_fn(features, labels, mode, params): # pylint: disable=unused-argument """The `model_fn` for Estimator.""" + def metric_fn(per_example_loss, label_ids, logits): + predictions = tf.argmax(logits, axis=-1, output_type=tf.int32) + if task_name == "cola": + FN, FN_op = tf.metrics.false_negatives(labels=label_ids, predictions=predictions) + FP, FP_op = tf.metrics.false_positives(labels=label_ids, predictions=predictions) + TP, TP_op = tf.metrics.true_positives(labels=label_ids, predictions=predictions) + TN, TN_op = tf.metrics.true_negatives(labels=label_ids, predictions=predictions) + + MCC = (TP * TN - FP * FN) / ((TP + FP) * (TP + FN) * (TN + FP) * (TN + FN)) ** 0.5 + MCC_op = tf.group(FN_op, TN_op, TP_op, FP_op, tf.identity(MCC, name="MCC")) + return {"MCC": (MCC, MCC_op)} + else: + accuracy = tf.metrics.accuracy( + labels=label_ids, predictions=predictions) + loss = tf.metrics.mean(values=per_example_loss) + return { + "eval_accuracy": accuracy, + "eval_loss": loss, + } tf.logging.info("*** Features ***") for name in sorted(features.keys()): tf.logging.info(" name = %s, shape = %s" % (name, features[name].shape)) @@ -294,16 +317,6 @@ def model_fn_builder(bert_config, num_labels, init_checkpoint, learning_rate, output_spec = tf.estimator.EstimatorSpec( mode=mode, predictions=predictions) elif mode == tf.estimator.ModeKeys.EVAL: - def metric_fn(per_example_loss, label_ids, logits): - predictions = tf.argmax(logits, axis=-1, output_type=tf.int32) - accuracy = tf.metrics.accuracy( - labels=label_ids, predictions=predictions) - loss = tf.metrics.mean(values=per_example_loss) - return { - "eval_accuracy": accuracy, - "eval_loss": loss, - } - eval_metric_ops = metric_fn(per_example_loss, label_ids, logits) output_spec = tf.estimator.EstimatorSpec( mode=mode, @@ -335,23 +348,13 @@ def model_fn_builder(bert_config, num_labels, init_checkpoint, learning_rate, train_op = optimization.create_optimizer( total_loss, learning_rate, num_train_steps, num_warmup_steps, - hvd, FLAGS.use_fp16) + hvd, False, FLAGS.use_fp16, FLAGS.num_accumulation_steps) output_spec = tf.estimator.EstimatorSpec( mode=mode, loss=total_loss, train_op=train_op) elif mode == tf.estimator.ModeKeys.EVAL: - - def metric_fn(per_example_loss, label_ids, logits): - predictions = tf.argmax(logits, axis=-1, output_type=tf.int32) - accuracy = tf.metrics.accuracy(label_ids, predictions) - loss = tf.metrics.mean(per_example_loss) - return { - "eval_accuracy": accuracy, - "eval_loss": loss, - } - eval_metric_ops = metric_fn(per_example_loss, label_ids, logits) output_spec = tf.estimator.EstimatorSpec( mode=mode, @@ -424,7 +427,8 @@ def main(_): if FLAGS.horovod: hvd.init() - + if FLAGS.use_fp16: + os.environ["TF_ENABLE_AUTO_MIXED_PRECISION_GRAPH_REWRITE"] = "1" processors = { "cola": ColaProcessor, "mnli": MnliProcessor, @@ -460,7 +464,7 @@ def main(_): master_process = True training_hooks = [] - global_batch_size = FLAGS.train_batch_size + global_batch_size = FLAGS.train_batch_size * FLAGS.num_accumulation_steps hvd_rank = 0 config = tf.ConfigProto() @@ -468,7 +472,7 @@ def main(_): tf.logging.info("Multi-GPU training with TF Horovod") tf.logging.info("hvd.size() = %d hvd.rank() = %d", hvd.size(), hvd.rank()) - global_batch_size = FLAGS.train_batch_size * hvd.size() + global_batch_size = FLAGS.train_batch_size * FLAGS.num_accumulation_steps * hvd.size() master_process = (hvd.rank() == 0) hvd_rank = hvd.rank() config.gpu_options.allow_growth = True @@ -517,6 +521,7 @@ def main(_): end_index = start_index + (num_examples_per_rank) model_fn = model_fn_builder( + task_name=task_name, bert_config=bert_config, num_labels=len(label_list), init_checkpoint=FLAGS.init_checkpoint, @@ -700,4 +705,4 @@ if __name__ == "__main__": flags.mark_flag_as_required("vocab_file") flags.mark_flag_as_required("bert_config_file") flags.mark_flag_as_required("output_dir") - tf.app.run() + tf.app.run() \ No newline at end of file diff --git a/TensorFlow/LanguageModeling/BERT/run_pretraining.py b/TensorFlow/LanguageModeling/BERT/run_pretraining.py index 450bded6..abb20c51 100644 --- a/TensorFlow/LanguageModeling/BERT/run_pretraining.py +++ b/TensorFlow/LanguageModeling/BERT/run_pretraining.py @@ -1,4 +1,5 @@ # coding=utf-8 +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. # Copyright 2018 The Google AI Language Team Authors. # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -12,6 +13,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. + """Run masked LM/next sentence masked_lm pre-training for BERT.""" from __future__ import absolute_import @@ -23,6 +25,7 @@ import time import modeling import optimization import tensorflow as tf +import glob flags = tf.flags @@ -35,8 +38,12 @@ flags.DEFINE_string( "This specifies the model architecture.") flags.DEFINE_string( - "input_file", None, - "Input TF example files (can be a glob or comma separated).") + "input_files_dir", None, + "Directory with input files, comma separated or single directory.") + +flags.DEFINE_string( + "eval_files_dir", None, + "Directory with eval files, comma separated or single directory. ") flags.DEFINE_string( "output_dir", None, @@ -47,6 +54,10 @@ flags.DEFINE_string( "init_checkpoint", None, "Initial checkpoint (usually from a pre-trained BERT model).") +flags.DEFINE_string( + "optimizer_type", "lamb", + "Optimizer used for training - LAMB or ADAM") + flags.DEFINE_integer( "max_seq_length", 512, "The maximum total input sequence length after WordPiece tokenization. " @@ -74,15 +85,27 @@ flags.DEFINE_integer("num_warmup_steps", 10000, "Number of warmup steps.") flags.DEFINE_integer("save_checkpoints_steps", 1000, "How often to save the model checkpoint.") +flags.DEFINE_integer("display_loss_steps", 10, + "How often to print loss") flags.DEFINE_integer("iterations_per_loop", 1000, "How many steps to make in each estimator call.") flags.DEFINE_integer("max_eval_steps", 100, "Maximum number of eval steps.") +flags.DEFINE_integer("num_accumulation_steps", 1, + "Number of accumulation steps before gradient update." + "Global batch size = num_accumulation_steps * train_batch_size") + +flags.DEFINE_bool("allreduce_post_accumulation", False, "Whether to all reduce after accumulation of N steps or after each step") + +flags.DEFINE_bool( + "verbose_logging", False, + "If true, all of the trainable parameters are printed") + flags.DEFINE_bool("horovod", False, "Whether to use Horovod for multi-gpu runs") -flags.DEFINE_bool("report_loss", False, "Whether to report total loss during training.") +flags.DEFINE_bool("report_loss", True, "Whether to report total loss during training.") flags.DEFINE_bool("manual_fp16", False, "Whether to use fp32 or fp16 arithmetic on GPU. " "Manual casting is done instead of using AMP") @@ -93,52 +116,83 @@ flags.DEFINE_bool("use_fp16", False, "Whether to enable AMP ops.") # report samples/sec, total loss and learning rate during training class _LogSessionRunHook(tf.train.SessionRunHook): - def __init__(self, global_batch_size, display_every=10, hvd_rank=-1): + def __init__(self, global_batch_size, num_accumulation_steps, display_every=10, hvd_rank=-1): self.global_batch_size = global_batch_size self.display_every = display_every self.hvd_rank = hvd_rank + self.num_accumulation_steps = num_accumulation_steps def after_create_session(self, session, coord): self.elapsed_secs = 0. self.count = 0 + self.all_count = 0 + self.avg_loss = 0.0 + def before_run(self, run_context): self.t0 = time.time() - if FLAGS.manual_fp16 or FLAGS.use_fp16: - return tf.train.SessionRunArgs( - fetches=['step_update:0', 'total_loss:0', - 'learning_rate:0', 'nsp_loss:0', - 'mlm_loss:0', 'loss_scale:0']) + if self.num_accumulation_steps <= 1: + if FLAGS.manual_fp16 or FLAGS.use_fp16: + return tf.train.SessionRunArgs( + fetches=['step_update:0', 'total_loss:0', + 'learning_rate:0', 'nsp_loss:0', + 'mlm_loss:0', 'loss_scale:0']) + else: + return tf.train.SessionRunArgs( + fetches=['step_update:0', 'total_loss:0', + 'learning_rate:0', 'nsp_loss:0', + 'mlm_loss:0']) else: - return tf.train.SessionRunArgs( - fetches=['step_update:0', 'total_loss:0', - 'learning_rate:0', 'nsp_loss:0', - 'mlm_loss:0']) + if FLAGS.manual_fp16 or FLAGS.use_fp16: + return tf.train.SessionRunArgs( + fetches=['step_update:0', 'update_step:0', 'total_loss:0', + 'learning_rate:0', 'nsp_loss:0', + 'mlm_loss:0', 'loss_scale:0']) + else: + return tf.train.SessionRunArgs( + fetches=['step_update:0', 'update_step:0', 'total_loss:0', + 'learning_rate:0', 'nsp_loss:0', + 'mlm_loss:0']) def after_run(self, run_context, run_values): self.elapsed_secs += time.time() - self.t0 - self.count += 1 - if FLAGS.manual_fp16 or FLAGS.use_fp16: - global_step, total_loss, lr, nsp_loss, mlm_loss, loss_scaler = run_values.results - else: - global_step, total_loss, lr, nsp_loss, mlm_loss = run_values.results - print_step = global_step + 1 # One-based index for printing. - if print_step == 1 or print_step % self.display_every == 0: - dt = self.elapsed_secs / self.count - img_per_sec = self.global_batch_size / dt - if self.hvd_rank >= 0: - if FLAGS.manual_fp16 or FLAGS.use_fp16: - print('Rank = %2d :: Step = %6i Throughput = %11.1f MLM Loss = %10.4e NSP Loss = %10.4e Loss = %6.3f LR = %6.4e Loss scale = %6.4e' % - (self.hvd_rank, print_step, img_per_sec, mlm_loss, nsp_loss, total_loss, lr, loss_scaler)) - else: - print('Rank = %2d :: Step = %6i Throughput = %11.1f MLM Loss = %10.4e NSP Loss = %10.4e Loss = %6.3f LR = %6.4e' % - (self.hvd_rank, print_step, img_per_sec, mlm_loss, nsp_loss, total_loss, lr)) + if self.num_accumulation_steps <=1: + if FLAGS.manual_fp16 or FLAGS.use_fp16: + global_step, total_loss, lr, nsp_loss, mlm_loss, loss_scaler = run_values.results else: - if FLAGS.manual_fp16 or FLAGS.use_fp16: - print('Step = %6i Throughput = %11.1f MLM Loss = %10.4e NSP Loss = %10.4e Loss = %6.3f LR = %6.4e Loss scale = %6.4e' % - (print_step, img_per_sec, mlm_loss, nsp_loss, total_loss, lr, loss_scaler)) - else: - print('Step = %6i Throughput = %11.1f MLM Loss = %10.4e NSP Loss = %10.4e Loss = %6.3f LR = %6.4e' % - (print_step, img_per_sec, mlm_loss, nsp_loss, total_loss, lr)) - self.elapsed_secs = 0. - self.count = 0 + global_step, total_loss, lr, nsp_loss, mlm_loss = run_values. \ + results + update_step = True + else: + if FLAGS.manual_fp16 or FLAGS.use_fp16: + global_step, update_step, total_loss, lr, nsp_loss, mlm_loss, loss_scaler = run_values.results + else: + global_step, update_step, total_loss, lr, nsp_loss, mlm_loss = run_values.\ + results + print_step = global_step + 1 # One-based index for printing. + self.avg_loss += total_loss + self.all_count += 1 + if update_step: + self.count += 1 + if (print_step == 1 or print_step % self.display_every == 0): + dt = self.elapsed_secs / self.count + sent_per_sec = self.global_batch_size / dt + avg_loss_step = self.avg_loss / self.all_count + if self.hvd_rank >= 0: + if FLAGS.manual_fp16 or FLAGS.use_fp16: + print('Rank = %2d :: Step = %6i Throughput = %11.1f MLM Loss = %10.4e NSP Loss = %10.4e Loss = %6.3f Average Loss = %6.3f LR = %6.4e Loss scale = %6.4e' % + (self.hvd_rank, print_step, sent_per_sec, mlm_loss, nsp_loss, total_loss, avg_loss_step, lr, loss_scaler)) + else: + print('Rank = %2d :: Step = %6i Throughput = %11.1f MLM Loss = %10.4e NSP Loss = %10.4e Loss = %6.3f Average Loss = %6.3f LR = %6.4e' % + (self.hvd_rank, print_step, sent_per_sec, mlm_loss, nsp_loss, total_loss, avg_loss_step, lr)) + else: + if FLAGS.manual_fp16 or FLAGS.use_fp16: + print('Step = %6i Throughput = %11.1f MLM Loss = %10.4e NSP Loss = %10.4e Loss = %6.3f Average Loss = %6.3f LR = %6.4e Loss scale = %6.4e' % + (print_step, sent_per_sec, mlm_loss, nsp_loss, total_loss, avg_loss_step, lr, loss_scaler)) + else: + print('Step = %6i Throughput = %11.1f MLM Loss = %10.4e NSP Loss = %10.4e Loss = %6.3f Average Loss = %6.3f LR = %6.4e' % + (print_step, sent_per_sec, mlm_loss, nsp_loss, total_loss, avg_loss_step, lr)) + self.elapsed_secs = 0. + self.count = 0 + self.avg_loss = 0.0 + self.all_count = 0 def model_fn_builder(bert_config, init_checkpoint, learning_rate, num_train_steps, num_warmup_steps, @@ -195,19 +249,20 @@ def model_fn_builder(bert_config, init_checkpoint, learning_rate, tf.train.init_from_checkpoint(init_checkpoint, assignment_map) - tf.logging.info("**** Trainable Variables ****") - for var in tvars: - init_string = "" - if var.name in initialized_variable_names: - init_string = ", *INIT_FROM_CKPT*" - tf.logging.info(" %d :: name = %s, shape = %s%s", 0 if hvd is None else hvd.rank(), var.name, var.shape, - init_string) + if FLAGS.verbose_logging: + tf.logging.info("**** Trainable Variables ****") + for var in tvars: + init_string = "" + if var.name in initialized_variable_names: + init_string = ", *INIT_FROM_CKPT*" + tf.logging.info(" %d :: name = %s, shape = %s%s", 0 if hvd is None else hvd.rank(), var.name, var.shape, + init_string) output_spec = None if mode == tf.estimator.ModeKeys.TRAIN: train_op = optimization.create_optimizer( total_loss, learning_rate, num_train_steps, num_warmup_steps, - hvd, FLAGS.manual_fp16, FLAGS.use_fp16) + hvd, FLAGS.manual_fp16, FLAGS.use_fp16, FLAGS.num_accumulation_steps, FLAGS.optimizer_type, FLAGS.allreduce_post_accumulation) output_spec = tf.estimator.EstimatorSpec( mode=mode, @@ -453,27 +508,28 @@ def main(_): tf.gfile.MakeDirs(FLAGS.output_dir) input_files = [] - for input_pattern in FLAGS.input_file.split(","): - input_files.extend(tf.gfile.Glob(input_pattern)) + for input_file_dir in FLAGS.input_files_dir.split(","): + input_files.extend(tf.gfile.Glob(os.path.join(input_file_dir, "*"))) - tf.logging.info("*** Input Files ***") - for input_file in input_files: - tf.logging.info(" %s" % input_file) + if FLAGS.horovod and len(input_files) < hvd.size(): + raise ValueError("Input Files must be sharded") + if FLAGS.use_fp16 and FLAGS.manual_fp16: + raise ValueError("AMP and Manual Mixed Precision Training are both activated! Error") - config = tf.ConfigProto() - if FLAGS.horovod: - config.gpu_options.visible_device_list = str(hvd.local_rank()) - if len(input_files) < hvd.size(): - raise ValueError("Input Files must be sharded") - if FLAGS.use_xla: - config.graph_options.optimizer_options.global_jit_level = tf.OptimizerOptions.ON_1 is_per_host = tf.contrib.tpu.InputPipelineConfig.PER_HOST_V2 config = tf.ConfigProto() if FLAGS.horovod: config.gpu_options.visible_device_list = str(hvd.local_rank()) config.gpu_options.allow_growth = True + if hvd.rank() == 0: + tf.logging.info("***** Configuaration *****") + for key in FLAGS.__flags.keys(): + tf.logging.info(' {}: {}'.format(key, getattr(FLAGS, key))) + tf.logging.info("**************************") + # config.gpu_options.per_process_gpu_memory_fraction = 0.7 - if FLAGS.use_xla: config.graph_options.optimizer_options.global_jit_level = tf.OptimizerOptions.ON_1 + if FLAGS.use_xla: config.graph_options.optimizer_options.global_jit_level = tf.OptimizerOptions.ON_1 + run_config = tf.estimator.RunConfig( model_dir=FLAGS.output_dir, session_config=config, @@ -494,18 +550,11 @@ def main(_): use_one_hot_embeddings=False, hvd=None if not FLAGS.horovod else hvd) - training_hooks = [] - if FLAGS.horovod and hvd.size() > 1: - training_hooks.append(hvd.BroadcastGlobalVariablesHook(0)) - if FLAGS.report_loss: - global_batch_size = FLAGS.train_batch_size if not FLAGS.horovod else FLAGS.train_batch_size*hvd.size() - training_hooks.append(_LogSessionRunHook(global_batch_size,1,-1 if not FLAGS.horovod else hvd.rank())) - training_hooks = [] if FLAGS.report_loss and (not FLAGS.horovod or hvd.rank() == 0): - global_batch_size = FLAGS.train_batch_size if not FLAGS.horovod else FLAGS.train_batch_size*hvd.size() - training_hooks.append(_LogSessionRunHook(global_batch_size,100)) - if FLAGS.horovod: + global_batch_size = FLAGS.train_batch_size * FLAGS.num_accumulation_steps if not FLAGS.horovod else FLAGS.train_batch_size * FLAGS.num_accumulation_steps * hvd.size() + training_hooks.append(_LogSessionRunHook(global_batch_size, FLAGS.num_accumulation_steps, FLAGS.display_loss_steps)) + if FLAGS.horovod and hvd.size() > 1: training_hooks.append(hvd.BroadcastGlobalVariablesHook(0)) estimator = tf.estimator.Estimator( @@ -522,14 +571,19 @@ def main(_): max_predictions_per_seq=FLAGS.max_predictions_per_seq, is_training=True, hvd=None if not FLAGS.horovod else hvd) + estimator.train(input_fn=train_input_fn, hooks=training_hooks, max_steps=FLAGS.num_train_steps) if FLAGS.do_eval and (not FLAGS.horovod or hvd.rank() == 0): tf.logging.info("***** Running evaluation *****") tf.logging.info(" Batch size = %d", FLAGS.eval_batch_size) + eval_files = [] + for eval_file_dir in FLAGS.eval_files_dir.split(","): + eval_files.extend(tf.gfile.Glob(os.path.join(eval_file_dir, "*"))) + eval_input_fn = input_fn_builder( - input_files=input_files, + input_files=eval_files, batch_size=FLAGS.eval_batch_size, max_seq_length=FLAGS.max_seq_length, max_predictions_per_seq=FLAGS.max_predictions_per_seq, @@ -548,7 +602,8 @@ def main(_): if __name__ == "__main__": - flags.mark_flag_as_required("input_file") + flags.mark_flag_as_required("input_files_dir") + flags.mark_flag_as_required("eval_files_dir") flags.mark_flag_as_required("bert_config_file") flags.mark_flag_as_required("output_dir") if FLAGS.use_xla and FLAGS.manual_fp16: diff --git a/TensorFlow/LanguageModeling/BERT/run_pretraining.sh b/TensorFlow/LanguageModeling/BERT/run_pretraining.sh deleted file mode 100755 index 41c3de0b..00000000 --- a/TensorFlow/LanguageModeling/BERT/run_pretraining.sh +++ /dev/null @@ -1,19 +0,0 @@ -#! /bin/bash - -mpiexec --allow-run-as-root --bind-to socket -np 8 python3 run_pretraining.py \ - --input_file=/workspace/data/bert_large_wikipedia_seq_512_pred_20/tf_examples.tfrecord* \ - --output_dir=/workspace/checkpoints/pretraining_base_output \ - --do_train=True \ - --do_eval=True \ - --bert_config_file=$BERT_BASE_DIR/bert_config.json \ - --train_batch_size=14 \ - --max_seq_length=512 \ - --max_predictions_per_seq=20 \ - --num_train_steps=250000 \ - --num_warmup_steps=10000 \ - --learning_rate=1e-4 \ - --use_fp16 \ - --use_xla \ - --report_loss \ - --horovod - diff --git a/TensorFlow/LanguageModeling/BERT/run_squad.py b/TensorFlow/LanguageModeling/BERT/run_squad.py index 89200b6e..2f2a06af 100644 --- a/TensorFlow/LanguageModeling/BERT/run_squad.py +++ b/TensorFlow/LanguageModeling/BERT/run_squad.py @@ -1,4 +1,5 @@ # coding=utf-8 +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. # Copyright 2018 The Google AI Language Team Authors. # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -12,6 +13,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. + """Run BERT on SQuAD 1.1 and SQuAD 2.0.""" from __future__ import absolute_import, division, print_function @@ -114,6 +116,10 @@ flags.DEFINE_integer("save_checkpoints_steps", 1000, flags.DEFINE_integer("iterations_per_loop", 1000, "How many steps to make in each estimator call.") +flags.DEFINE_integer("num_accumulation_steps", 1, + "Number of accumulation steps before gradient update" + "Global batch size = num_accumulation_steps * train_batch_size") + flags.DEFINE_integer( "n_best_size", 20, "The total number of n-best predictions to generate in the " @@ -336,7 +342,7 @@ def model_fn_builder(bert_config, init_checkpoint, learning_rate, total_loss = (start_loss + end_loss) / 2.0 train_op = optimization.create_optimizer( - total_loss, learning_rate, num_train_steps, num_warmup_steps, hvd, amp=use_fp16) + total_loss, learning_rate, num_train_steps, num_warmup_steps, hvd, False, use_fp16, FLAGS.num_accumulation_steps) output_spec = tf.estimator.EstimatorSpec( mode=mode, @@ -899,6 +905,8 @@ def main(_): if FLAGS.horovod: hvd.init() + if FLAGS.use_fp16: + os.environ["TF_ENABLE_AUTO_MIXED_PRECISION_GRAPH_REWRITE"] = "1" bert_config = modeling.BertConfig.from_json_file(FLAGS.bert_config_file) @@ -911,7 +919,7 @@ def main(_): master_process = True training_hooks = [] - global_batch_size = FLAGS.train_batch_size + global_batch_size = FLAGS.train_batch_size * FLAGS.num_accumulation_steps hvd_rank = 0 hvd_local_rank = 0 @@ -921,7 +929,7 @@ def main(_): tf.logging.info("Multi-GPU training with TF Horovod") tf.logging.info("hvd.size() = %d hvd.rank() = %d", hvd.size(), hvd.rank()) - global_batch_size = FLAGS.train_batch_size * hvd.size() + global_batch_size = FLAGS.train_batch_size * hvd.size() * FLAGS.num_accumulation_steps learning_rate = learning_rate * hvd.size() master_process = (hvd.rank() == 0) hvd_rank = hvd.rank() diff --git a/TensorFlow/LanguageModeling/BERT/run_squad_trtis_client.py b/TensorFlow/LanguageModeling/BERT/run_squad_trtis_client.py index 23d7a7c5..83f91b13 100644 --- a/TensorFlow/LanguageModeling/BERT/run_squad_trtis_client.py +++ b/TensorFlow/LanguageModeling/BERT/run_squad_trtis_client.py @@ -1,3 +1,16 @@ +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + import modeling import tokenization from tensorrtserver.api import ProtocolType, InferContext, ServerStatusContext, grpc_service_pb2_grpc, grpc_service_pb2, model_config_pb2 diff --git a/TensorFlow/LanguageModeling/BERT/scripts/data_download.sh b/TensorFlow/LanguageModeling/BERT/scripts/data_download.sh index a3b28714..79ffc9b8 100755 --- a/TensorFlow/LanguageModeling/BERT/scripts/data_download.sh +++ b/TensorFlow/LanguageModeling/BERT/scripts/data_download.sh @@ -1,6 +1,19 @@ #!/usr/bin/env bash +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + docker run --runtime=nvidia -v $PWD:/workspace/bert \ --rm --shm-size=1g --ulimit memlock=-1 \ --ulimit stack=67108864 --ipc=host -t -i \ - bert bash -c "bash scripts/data_download_helper.sh" \ No newline at end of file + bert bash -c "bash data/create_datasets_from_start.sh" \ No newline at end of file diff --git a/TensorFlow/LanguageModeling/BERT/scripts/data_download_helper.sh b/TensorFlow/LanguageModeling/BERT/scripts/data_download_helper.sh deleted file mode 100755 index cea0c2b4..00000000 --- a/TensorFlow/LanguageModeling/BERT/scripts/data_download_helper.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env bash - -# Download pretrained_models -cd /workspace/bert/data/pretrained_models_google && python3 download_models.py - -# Download SQUAD -cd /workspace/bert/data/squad && . squad_download.sh - -# Download GLUE -cd /workspace/bert/data/glue && python3 download_glue_data.py - -# WIKI Download, set config in data_generators/wikipedia_corpus/config.sh -cd /workspace/bert/data/wikipedia_corpus && . run_preprocessing.sh - -cd /workspace/bert/data/bookcorpus && . run_preprocessing.sh - -cd /workspace/bert/data/glue && python3 download_glue_data.py diff --git a/TensorFlow/LanguageModeling/BERT/scripts/finetune_inference_benchmark.sh b/TensorFlow/LanguageModeling/BERT/scripts/finetune_inference_benchmark.sh index 81ae7b39..3ab042d0 100755 --- a/TensorFlow/LanguageModeling/BERT/scripts/finetune_inference_benchmark.sh +++ b/TensorFlow/LanguageModeling/BERT/scripts/finetune_inference_benchmark.sh @@ -1,13 +1,26 @@ #!/bin/bash +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + bert_model=${1:-"large"} use_xla=${2:-"true"} task=${3:-"squad"} if [ "$bert_model" = "large" ] ; then - export BERT_DIR=data/pretrained_models_google/uncased_L-24_H-1024_A-16 + export BERT_DIR=data/download/google_pretrained_weights/uncased_L-24_H-1024_A-16 else - export BERT_DIR=data/pretrained_models_google/uncased_L-12_H-768_A-12 + export BERT_DIR=data/download/google_pretrained_weights/uncased_L-12_H-768_A-12 fi echo "BERT directory set as " $BERT_DIR @@ -31,7 +44,7 @@ echo "Results directory set as " $RESULTS_DIR LOGFILE="${RESULTS_DIR}/${task}_inference_benchmark_bert_${bert_model}.log" tmp_file="/tmp/${task}_inference_benchmark.log" if [ "$task" = "squad" ] ; then - export SQUAD_DIR=data/squad/v1.1 + export SQUAD_DIR=data/download/squad/v1.1 echo "Squad directory set as " $SQUAD_DIR @@ -48,11 +61,9 @@ if [ "$task" = "squad" ] ; then if [ "$precision" = "fp16" ] ; then echo "fp16 activated!" - export TF_ENABLE_AUTO_MIXED_PRECISION_GRAPH_REWRITE=1 use_fp16="--use_fp16" else echo "fp32 activated!" - export TF_ENABLE_AUTO_MIXED_PRECISION_GRAPH_REWRITE=0 use_fp16="" fi diff --git a/TensorFlow/LanguageModeling/BERT/scripts/finetune_train_benchmark.sh b/TensorFlow/LanguageModeling/BERT/scripts/finetune_train_benchmark.sh index 861a7f96..b6c65fd2 100755 --- a/TensorFlow/LanguageModeling/BERT/scripts/finetune_train_benchmark.sh +++ b/TensorFlow/LanguageModeling/BERT/scripts/finetune_train_benchmark.sh @@ -1,15 +1,27 @@ #!/bin/bash +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + bert_model=${1:-"large"} -precision=${2:-"fp16"} -use_xla=${3:-"true"} -num_gpu=${4:-"8"} -task=${5:-"squad"} +use_xla=${2:-"true"} +num_gpu=${3:-"8"} +task=${4:-"squad"} if [ "$bert_model" = "large" ] ; then - export BERT_DIR=data/pretrained_models_google/uncased_L-24_H-1024_A-16 + export BERT_DIR=data/download/google_pretrained_weights/uncased_L-24_H-1024_A-16 else - export BERT_DIR=data/pretrained_models_google/uncased_L-12_H-768_A-12 + export BERT_DIR=data/download/google_pretrained_weights/uncased_L-12_H-768_A-12 fi echo "BERT directory set as " $BERT_DIR @@ -25,12 +37,6 @@ if [ ! -d "$RESULTS_DIR" ] ; then fi echo "Results directory set as " $RESULTS_DIR -use_fp16="" -if [ "$precision" = "fp16" ] ; then - export TF_ENABLE_AUTO_MIXED_PRECISION_GRAPH_REWRITE=1 - use_fp16="--use_fp16" -fi - if [ "$use_xla" = "true" ] ; then use_xla_tag="--use_xla" @@ -53,7 +59,7 @@ fi LOGFILE="${RESULTS_DIR}/${task}_training_benchmark_bert_${bert_model}_gpu_${num_gpu}.log" if [ "$task" = "squad" ] ; then - export SQUAD_DIR=data/squad/v1.1 + export SQUAD_DIR=data/download/squad/v1.1 epochs="2.0" echo "Squad directory set as " $SQUAD_DIR @@ -76,11 +82,9 @@ if [ "$task" = "squad" ] ; then if [ "$precision" = "fp16" ] ; then echo "fp16 activated!" - export TF_ENABLE_AUTO_MIXED_PRECISION_GRAPH_REWRITE=1 use_fp16="--use_fp16" else echo "fp32 activated!" - export TF_ENABLE_AUTO_MIXED_PRECISION_GRAPH_REWRITE=0 use_fp16="" fi diff --git a/TensorFlow/LanguageModeling/BERT/scripts/run_glue.sh b/TensorFlow/LanguageModeling/BERT/scripts/run_glue.sh index c8e12265..359113e2 100755 --- a/TensorFlow/LanguageModeling/BERT/scripts/run_glue.sh +++ b/TensorFlow/LanguageModeling/BERT/scripts/run_glue.sh @@ -1,49 +1,47 @@ #!/usr/bin/env bash +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + echo "Container nvidia build = " $NVIDIA_BUILD_ID -batch_size=${1:-"32"} -learning_rate=${2:-"2e-5"} -precision=${3:-"fp16"} -use_xla=${4:-"true"} -num_gpu=${5:-"8"} -seq_length=${6:-"128"} -bert_model=${7:-"large"} +task_name=${1:-"MRPC"} +batch_size=${2:-"32"} +learning_rate=${3:-"2e-5"} +precision=${4:-"fp16"} +use_xla=${5:-"true"} +num_gpu=${6:-"8"} +seq_length=${7:-"128"} +doc_stride=${8:-"64"} +bert_model=${9:-"large"} if [ "$bert_model" = "large" ] ; then - export BERT_DIR=data/pretrained_models_google/uncased_L-24_H-1024_A-16 + export BERT_DIR=data/download/google_pretrained_weights/uncased_L-24_H-1024_A-16 else - export BERT_DIR=data/pretrained_models_google/uncased_L-12_H-768_A-12 + export BERT_DIR=data/download/google_pretrained_weights/uncased_L-12_H-768_A-12 fi -export GLUE_DIR=data/glue +export GLUE_DIR=data/download -epochs=${8:-"3.0"} -ws=${9:-"0.1"} -init_checkpoint=${10:-"$BERT_DIR/bert_model.ckpt"} -#Edit to save logs & checkpoints in a different directory -RESULTS_DIR=/results - -if [ ! -d "$BERT_DIR" ] ; then - echo "Error! $BERT_DIR directory missing. Please mount pretrained BERT dataset." - exit -1 -fi -if [ ! -d "$GLUE_DIR" ] ; then - echo "Error! $GLUE_DIR directory missing. Please mount SQuAD dataset." - exit -1 -fi -if [ ! -d "$RESULTS_DIR" ] ; then - echo "Error! $RESULTS_DIR directory missing." - exit -1 -fi +epochs=${10:-"3.0"} +ws=${11:-"0.1"} +init_checkpoint=${12:-"$BERT_DIR/bert_model.ckpt"} echo "GLUE directory set as " $GLUE_DIR " BERT directory set as " $BERT_DIR -echo "Results directory set as " $RESULTS_DIR use_fp16="" if [ "$precision" = "fp16" ] ; then echo "fp16 activated!" - export TF_ENABLE_AUTO_MIXED_PRECISION_GRAPH_REWRITE=1 use_fp16="--use_fp16" fi @@ -60,34 +58,42 @@ if [ $num_gpu -gt 1 ] ; then -x NCCL_DEBUG=INFO \ -x LD_LIBRARY_PATH \ -x PATH -mca pml ob1 -mca btl ^openib" - use_hvd="--horovod" else mpi_command="" - use_hvd="" fi - export GBS=$(expr $batch_size \* $num_gpu) - printf -v TAG "tf_bert_%s_glue_1n_%s_gbs%d" "$bert_model" "$precision" $GBS - DATESTAMP=`date +'%y%m%d%H%M%S'` - RESULTS_DIR=${RESULTS_DIR}/${TAG}_${DATESTAMP} - mkdir $RESULTS_DIR - LOGFILE=$RESULTS_DIR/$TAG.$DATESTAMP.log - printf "Saving checkpoints to %s\n" "$RESULTS_DIR" - printf "Writing logs to %s\n" "$LOGFILE" +export GBS=$(expr $batch_size \* $num_gpu) +printf -v TAG "tf_bert_finetuning_glue_%s_%s_%s_gbs%d" "$task_name" "$bert_model" "$precision" $GBS +DATESTAMP=`date +'%y%m%d%H%M%S'` +#Edit to save logs & checkpoints in a different directory +RESULTS_DIR=/results/${TAG}_${DATESTAMP} +LOGFILE=$RESULTS_DIR/$TAG.$DATESTAMP.log +mkdir -m 777 -p $RESULTS_DIR +printf "Saving checkpoints to %s\n" "$RESULTS_DIR" +printf "Logs written to %s\n" "$LOGFILE" + +#Check if all necessary files are available before training +for DIR_or_file in $GLUE_DIR/${task_name} $RESULTS_DIR $BERT_DIR/vocab.txt $BERT_DIR/bert_config.json; do + echo $DIR_or_file + if [ ! -d "$DIR_or_file" ] && [ ! -f "$DIR_or_file" ]; then + echo "Error! $DIR_or_file directory missing. Please mount correctly" + exit -1 + fi +done $mpi_command python run_classifier.py \ - --task_name=MRPC \ + --task_name=$task_name \ --do_train=true \ --do_eval=true \ - --data_dir=$GLUE_DIR/MRPC \ + --data_dir=$GLUE_DIR/$task_name \ --vocab_file=$BERT_DIR/vocab.txt \ --bert_config_file=$BERT_DIR/bert_config.json \ --init_checkpoint=$init_checkpoint \ --max_seq_length=$seq_length \ + --doc_stride=$doc_stride \ --train_batch_size=$batch_size \ --learning_rate=$learning_rate \ --num_train_epochs=$epochs \ --output_dir=$RESULTS_DIR \ - "$use_hvd" \ - "$use_fp16" \ - $use_xla_tag --warmup_proportion=$ws |& tee $LOGFILE \ No newline at end of file + --horovod "$use_fp16" \ + $use_xla_tag --warmup_proportion=$ws |& tee $LOGFILE \ No newline at end of file diff --git a/TensorFlow/LanguageModeling/BERT/scripts/run_glue_inference.sh b/TensorFlow/LanguageModeling/BERT/scripts/run_glue_inference.sh new file mode 100644 index 00000000..6e7e0e75 --- /dev/null +++ b/TensorFlow/LanguageModeling/BERT/scripts/run_glue_inference.sh @@ -0,0 +1,78 @@ +#!/usr/bin/env bash + +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +echo "Container nvidia build = " $NVIDIA_BUILD_ID +task_name=${1:-"MRPC"} +init_checkpoint=${2:-"$BERT_DIR/bert_model.ckpt"} +batch_size=${3:-"32"} +precision=${4:-"fp16"} +use_xla=${5:-"true"} +seq_length=${6:-"128"} +doc_stride=${7:-"64"} +bert_model=${8:-"large"} + +if [ "$bert_model" = "large" ] ; then + BERT_DIR=data/download/google_pretrained_weights/uncased_L-24_H-1024_A-16 +else + BERT_DIR=data/download/google_pretrained_weights/uncased_L-12_H-768_A-12 +fi +GLUE_DIR=data/download + +echo "GLUE directory set as " $GLUE_DIR " BERT directory set as " $BERT_DIR + +use_fp16="" +if [ "$precision" = "fp16" ] ; then + echo "fp16 activated!" + use_fp16="--use_fp16" +fi + +if [ "$use_xla" = "true" ] ; then + use_xla_tag="--use_xla" + echo "XLA activated" +else + use_xla_tag="" +fi + + +export GBS=$(expr $batch_size \* $num_gpu) +printf -v TAG "tf_bert_finetuning_glue_%s_inf_%s_%s_gbs%d_ckpt_%s" "$task_name" "$bert_model" "$precision" $GBS "$init_checkpoint" +DATESTAMP=`date +'%y%m%d%H%M%S'` +#Edit to save logs & checkpoints in a different directory +RESULTS_DIR=/results +LOGFILE=$RESULTS_DIR/$TAG.$DATESTAMP.log +printf "Logs written to %s\n" "$LOGFILE" + +#Check if all necessary files are available before training +for DIR_or_file in $GLUE_DIR $RESULTS_DIR $BERT_DIR/vocab.txt $BERT_DIR/bert_config.json; do + if [ ! -d "$DIR_or_file" ] && [ ! -f "$DIR_or_file" ]; then + echo "Error! $DIR_or_file directory missing. Please mount correctly" + exit -1 + fi +done + +$mpi_command python run_classifier.py \ + --task_name=$task_name \ + --predict_batch_size=$batch_size \ + --eval_batch_size=$batch_size \ + --do_eval=true \ + --data_dir=$GLUE_DIR/$task_name \ + --vocab_file=$BERT_DIR/vocab.txt \ + --bert_config_file=$BERT_DIR/bert_config.json \ + --init_checkpoint=$init_checkpoint \ + --max_seq_length=$seq_length \ + --doc_stride=$doc_stride \ + --output_dir=$RESULTS_DIR \ + --horovod "$use_fp16" \ + $use_xla_tag |& tee $LOGFILE \ No newline at end of file diff --git a/TensorFlow/LanguageModeling/BERT/scripts/run_pretraining.sh b/TensorFlow/LanguageModeling/BERT/scripts/run_pretraining.sh deleted file mode 100755 index f8611613..00000000 --- a/TensorFlow/LanguageModeling/BERT/scripts/run_pretraining.sh +++ /dev/null @@ -1,102 +0,0 @@ -#! /bin/bash - -echo "Container nvidia build = " $NVIDIA_BUILD_ID - -WIKI_DIR=/workspace/bert/data/wikipedia_corpus/final_tfrecords_sharded -BOOKS_DIR=/workspace/bert/data/bookcorpus/final_tfrecords_sharded -BERT_CONFIG=/workspace/bert/data/pretrained_models_google/uncased_L-24_H-1024_A-16/bert_config.json - -#Edit to save logs & checkpoints in a different directory -RESULTS_DIR=/results - -if [ ! -d "$WIKI_DIR" ] ; then - echo "Error! $WIKI_DIR directory missing. Please mount wikipedia dataset." - exit -1 -else - SOURCES="$WIKI_DIR/*" -fi -if [ ! -d "$BOOKS_DIR" ] ; then - echo "Warning! $BOOKS_DIR directory missing. Training will proceed without book corpus." -else - SOURCES+=" $BOOKS_DIR/*" -fi -if [ ! -d "$RESULTS_DIR" ] ; then - echo "Error! $RESULTS_DIR directory missing." - exit -1 -fi - -if [ ! -f "$BERT_CONFIG" ] ; then - echo "Error! BERT large configuration file not found at $BERT_CONFIG" - exit -1 -fi - -train_batch_size=${1:-14} -eval_batch_size=${2:-8} -learning_rate=${3:-"1e-4"} -precision=${4:-"manual_fp16"} -use_xla=${5:-"true"} -num_gpus=${6:-1} -warmup_steps=${7:-"10000"} -train_steps=${8:-1144000} -save_checkpoints_steps=${9:-5000} - -PREC="" -if [ "$precision" = "fp16" ] ; then - PREC="--use_fp16" -elif [ "$precision" = "fp32" ] ; then - PREC="" -elif [ "$precision" = "manual_fp16" ] ; then - PREC="--manual_fp16" -else - echo "Unknown argument" - exit -2 -fi - -if [ "$use_xla" = "true" ] ; then - PREC="$PREC --use_xla" - echo "XLA activated" -fi - -export GBS=$(expr $train_batch_size \* $num_gpus) -printf -v TAG "tf_bert_pretraining_%s_gbs%d" "$precision" $GBS -DATESTAMP=`date +'%y%m%d%H%M%S'` -RESULTS_DIR=${RESULTS_DIR}/${TAG}_${DATESTAMP} -LOGFILE=$RESULTS_DIR/$TAG.$DATESTAMP.log -printf "Saving checkpoints to %s\n" "$RESULTS_DIR" -printf "Logs written to %s\n" "$LOGFILE" - -echo $SOURCES -INPUT_FILES=$(eval ls $SOURCES | tr " " "\n" | awk '{printf "%s,",$1}' | sed s'/.$//') -CMD="python3 /workspace/bert/run_pretraining.py" -CMD+=" --input_file=$INPUT_FILES" -CMD+=" --output_dir=$RESULTS_DIR" -CMD+=" --bert_config_file=$BERT_CONFIG" -CMD+=" --do_train=True" -CMD+=" --do_eval=True" -CMD+=" --train_batch_size=$train_batch_size" -CMD+=" --eval_batch_size=$eval_batch_size" -CMD+=" --max_seq_length=512" -CMD+=" --max_predictions_per_seq=80" -CMD+=" --num_train_steps=$train_steps" -CMD+=" --num_warmup_steps=$warmup_steps" -CMD+=" --save_checkpoints_steps=$save_checkpoints_steps" -CMD+=" --learning_rate=$learning_rate" -CMD+=" --report_loss" -CMD+=" --horovod $PREC" - -if [ $num_gpus -gt 1 ] ; then - CMD="mpiexec --allow-run-as-root -np $num_gpus --bind-to socket $CMD" -fi - - - - -set -x -if [ -z "$LOGFILE" ] ; then - $CMD -else - ( - $CMD - ) |& tee $LOGFILE -fi -set +x diff --git a/TensorFlow/LanguageModeling/BERT/scripts/run_pretraining_adam.sh b/TensorFlow/LanguageModeling/BERT/scripts/run_pretraining_adam.sh new file mode 100755 index 00000000..8c6a2d4c --- /dev/null +++ b/TensorFlow/LanguageModeling/BERT/scripts/run_pretraining_adam.sh @@ -0,0 +1,111 @@ +#! /bin/bash + +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +echo "Container nvidia build = " $NVIDIA_BUILD_ID + +train_batch_size=${1:-14} +eval_batch_size=${2:-8} +learning_rate=${3:-"1e-4"} +precision=${4:-"manual_fp16"} +use_xla=${5:-"true"} +num_gpus=${6:-8} +warmup_steps=${7:-"10000"} +train_steps=${8:-1144000} +save_checkpoints_steps=${9:-5000} +bert_model=${10:-"large"} +num_accumulation_steps=${11:-1} +seq_len=${12:-512} +max_pred_per_seq=${13:-80} + +DATA_DIR=data/tfrecord/lower_case_1_seq_len_${seq_len}_max_pred_${max_pred_per_seq}_masked_lm_prob_0.15_random_seed_12345_dupe_factor_5_shard_1472_test_split_10/books_wiki_en_corpus + +if [ "$bert_model" = "large" ] ; then + export BERT_CONFIG=data/download/google_pretrained_weights/uncased_L-24_H-1024_A-16/bert_config.json +else + export BERT_CONFIG=data/download/google_pretrained_weights/uncased_L-12_H-768_A-12/bert_config.json +fi + +PREC="" +if [ "$precision" = "fp16" ] ; then + PREC="--use_fp16" +elif [ "$precision" = "fp32" ] ; then + PREC="" +elif [ "$precision" = "manual_fp16" ] ; then + PREC="--manual_fp16" +else + echo "Unknown argument" + exit -2 +fi + +if [ "$use_xla" = "true" ] ; then + PREC="$PREC --use_xla" + echo "XLA activated" +fi + +export GBS=$(expr $train_batch_size \* $num_gpus \* $num_accumulation_steps) +printf -v TAG "tf_bert_pretraining_adam_%s_%s_gbs%d" "$bert_model" "$precision" $GBS +DATESTAMP=`date +'%y%m%d%H%M%S'` + +#Edit to save logs & checkpoints in a different directory +RESULTS_DIR=${RESULTS_DIR:-/results/${TAG}_${DATESTAMP}} +LOGFILE=$RESULTS_DIR/$TAG.$DATESTAMP.log +mkdir -m 777 -p $RESULTS_DIR +printf "Saving checkpoints to %s\n" "$RESULTS_DIR" +printf "Logs written to %s\n" "$LOGFILE" + +INPUT_FILES="$DATA_DIR/training" +EVAL_FILES="$DATA_DIR/test" + +CMD="python3 /workspace/bert/run_pretraining.py" +CMD+=" --input_files_dir=$INPUT_FILES" +CMD+=" --eval_files_dir=$EVAL_FILES" +CMD+=" --output_dir=$RESULTS_DIR" +CMD+=" --bert_config_file=$BERT_CONFIG" +CMD+=" --do_train=True" +CMD+=" --do_eval=True" +CMD+=" --train_batch_size=$train_batch_size" +CMD+=" --eval_batch_size=$eval_batch_size" +CMD+=" --max_seq_length=$seq_len" +CMD+=" --max_predictions_per_seq=$max_pred_per_seq" +CMD+=" --num_train_steps=$train_steps" +CMD+=" --num_warmup_steps=$warmup_steps" +CMD+=" --num_accumulation_steps=$num_accumulation_steps" +CMD+=" --save_checkpoints_steps=$save_checkpoints_steps" +CMD+=" --learning_rate=$learning_rate" +CMD+=" --optimizer_type=adam" +CMD+=" --horovod $PREC" +CMD+=" --allreduce_post_accumulation=True" + +#Check if all necessary files are available before training +for DIR_or_file in $DATA_DIR $BERT_CONFIG $RESULTS_DIR; do + if [ ! -d "$DIR_or_file" ] && [ ! -f "$DIR_or_file" ]; then + echo "Error! $DIR_or_file directory missing. Please mount correctly" + exit -1 + fi +done + +if [ $num_gpus -gt 1 ] ; then + CMD="mpiexec --allow-run-as-root -np $num_gpus --bind-to socket $CMD" +fi + +set -x +if [ -z "$LOGFILE" ] ; then + $CMD +else + ( + $CMD + ) |& tee $LOGFILE +fi +set +x diff --git a/TensorFlow/LanguageModeling/BERT/scripts/run_pretraining_lamb.sh b/TensorFlow/LanguageModeling/BERT/scripts/run_pretraining_lamb.sh new file mode 100644 index 00000000..8c8d97a2 --- /dev/null +++ b/TensorFlow/LanguageModeling/BERT/scripts/run_pretraining_lamb.sh @@ -0,0 +1,60 @@ +#!/usr/bin/env bash + +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +echo "Container nvidia build = " $NVIDIA_BUILD_ID + +train_batch_size_phase1=${1:-64} +train_batch_size_phase2=${2:-8} +eval_batch_size=${3:-8} +learning_rate_phase1=${4:-"7.5e-4"} +learning_rate_phase2=${5:-"5e-4"} +precision=${6:-"fp16"} +use_xla=${7:-"true"} +num_gpus=${8:-8} +warmup_steps_phase1=${9:-"2000"} +warmup_steps_phase2=${10:-"200"} +train_steps=${11:-7820} +save_checkpoints_steps=${12:-100} +num_accumulation_steps_phase1=${13:-128} +num_accumulation_steps_phase2=${14:-512} +bert_model=${15:-"large"} + +DATA_DIR=data +export DATA_DIR=$DATA_DIR + +GBS1=$(expr $train_batch_size_phase1 \* $num_gpus \* $num_accumulation_steps_phase1) +GBS2=$(expr $train_batch_size_phase2 \* $num_gpus \* $num_accumulation_steps_phase2) +printf -v TAG "tf_bert_pretraining_lamb_%s_%s_gbs1%d_gbs2%d" "$bert_model" "$precision" $GBS1 $GBS2 +DATESTAMP=`date +'%y%m%d%H%M%S'` + +#Edit to save logs & checkpoints in a different directory +RESULTS_DIR=${RESULTS_DIR:-/results/${TAG}_${DATESTAMP}} +LOGFILE=$RESULTS_DIR/$TAG.$DATESTAMP.log +mkdir -m 777 -p $RESULTS_DIR +printf "Saving checkpoints to %s\n" "$RESULTS_DIR" +printf "Logs written to %s\n" "$LOGFILE" +export RESULTS_DIR=$RESULTS_DIR + +printf -v SCRIPT_ARGS "%d %d %d %e %e %s %s %d %d %d %d %d %d %d %s %s" \ + $train_batch_size_phase1 $train_batch_size_phase2 $eval_batch_size $learning_rate_phase1 \ + $learning_rate_phase2 "$precision" "$use_xla" $num_gpus $warmup_steps_phase1 \ + $warmup_steps_phase2 $train_steps $save_checkpoints_steps \ + $num_accumulation_steps_phase1 $num_accumulation_steps_phase2 "$bert_model" + +# RUN PHASE 1 +bash scripts/run_pretraining_lamb_phase1.sh $SCRIPT_ARGS |& tee -a $LOGFILE + +# RUN PHASE 2 +bash scripts/run_pretraining_lamb_phase2.sh $SCRIPT_ARGS |& tee -a $LOGFILE diff --git a/TensorFlow/LanguageModeling/BERT/scripts/run_pretraining_lamb_phase1.sh b/TensorFlow/LanguageModeling/BERT/scripts/run_pretraining_lamb_phase1.sh new file mode 100755 index 00000000..f9f67c33 --- /dev/null +++ b/TensorFlow/LanguageModeling/BERT/scripts/run_pretraining_lamb_phase1.sh @@ -0,0 +1,103 @@ +#! /bin/bash + +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +echo "Container nvidia build = " $NVIDIA_BUILD_ID + +train_batch_size_phase1=${1:-64} +train_batch_size_phase2=${2:-8} +eval_batch_size=${3:-8} +learning_rate_phase1=${4:-"7.5e-4"} +learning_rate_phase2=${5:-"5e-4"} +precision=${6:-"fp16"} +use_xla=${7:-"true"} +num_gpus=${8:-2} +warmup_steps_phase1=${9:-"2000"} +warmup_steps_phase2=${10:-"200"} +train_steps=${11:-7820} +save_checkpoints_steps=${12:-100} +num_accumulation_steps_phase1=${13:-128} +num_accumulation_steps_phase2=${14:-512} +bert_model=${15:-"large"} + +DATA_DIR=${DATA_DIR:-data} +#Edit to save logs & checkpoints in a different directory +RESULTS_DIR=${RESULTS_DIR:-/results} + +if [ "$bert_model" = "large" ] ; then + export BERT_CONFIG=data/download/google_pretrained_weights/uncased_L-24_H-1024_A-16/bert_config.json +else + export BERT_CONFIG=data/download/google_pretrained_weights/uncased_L-12_H-768_A-12/bert_config.json +fi + +PREC="" +if [ "$precision" = "fp16" ] ; then + PREC="--use_fp16" +elif [ "$precision" = "fp32" ] ; then + PREC="" +elif [ "$precision" = "manual_fp16" ] ; then + PREC="--manual_fp16" +else + echo "Unknown argument" + exit -2 +fi + +if [ "$use_xla" = "true" ] ; then + PREC="$PREC --use_xla" + echo "XLA activated" +fi + +mpi="" +if [ $num_gpus -gt 1 ] ; then + mpi="mpiexec --allow-run-as-root -np $num_gpus --bind-to socket" +fi + +#PHASE 1 + +train_steps_phase1=$(expr $train_steps \* 9 \/ 10) #Phase 1 is 10% of training +gbs_phase1=$(expr $train_batch_size_phase1 \* $num_accumulation_steps_phase1) +seq_len=128 +max_pred_per_seq=20 +RESULTS_DIR_PHASE1=${RESULTS_DIR}/phase_1 +mkdir -m 777 -p $RESULTS_DIR_PHASE1 + +INPUT_FILES="$DATA_DIR/tfrecord/lower_case_1_seq_len_${seq_len}_max_pred_${max_pred_per_seq}_masked_lm_prob_0.15_random_seed_12345_dupe_factor_5_shard_1472_test_split_10/books_wiki_en_corpus/training" +EVAL_FILES="$DATA_DIR/tfrecord/lower_case_1_seq_len_${seq_len}_max_pred_${max_pred_per_seq}_masked_lm_prob_0.15_random_seed_12345_dupe_factor_5_shard_1472_test_split_10/books_wiki_en_corpus/test" + +#Check if all necessary files are available before training +for DIR_or_file in $DATA_DIR $RESULTS_DIR_PHASE1 $BERT_CONFIG; do + if [ ! -d "$DIR_or_file" ] && [ ! -f "$DIR_or_file" ]; then + echo "Error! $DIR_or_file directory missing. Please mount correctly" + exit -1 + fi +done + + $mpi python /workspace/bert/run_pretraining.py \ + --input_files_dir=$INPUT_FILES \ + --eval_files_dir=$EVAL_FILES \ + --output_dir=$RESULTS_DIR_PHASE1 \ + --bert_config_file=$BERT_CONFIG \ + --do_train=True \ + --do_eval=True \ + --train_batch_size=$train_batch_size_phase1 \ + --eval_batch_size=$eval_batch_size \ + --max_seq_length=$seq_len \ + --max_predictions_per_seq=$max_pred_per_seq \ + --num_train_steps=$train_steps_phase1 \ + --num_accumulation_steps=$num_accumulation_steps_phase1 \ + --num_warmup_steps=$warmup_steps_phase1 \ + --save_checkpoints_steps=$save_checkpoints_steps \ + --learning_rate=$learning_rate_phase1 \ + --horovod $PREC \ + --allreduce_post_accumulation=True diff --git a/TensorFlow/LanguageModeling/BERT/scripts/run_pretraining_lamb_phase2.sh b/TensorFlow/LanguageModeling/BERT/scripts/run_pretraining_lamb_phase2.sh new file mode 100755 index 00000000..b26311c8 --- /dev/null +++ b/TensorFlow/LanguageModeling/BERT/scripts/run_pretraining_lamb_phase2.sh @@ -0,0 +1,115 @@ +#! /bin/bash + +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +echo "Container nvidia build = " $NVIDIA_BUILD_ID + +train_batch_size_phase1=${1:-64} +train_batch_size_phase2=${2:-8} +eval_batch_size=${3:-8} +learning_rate_phase1=${4:-"7.5e-4"} +learning_rate_phase2=${5:-"5e-4"} +precision=${6:-"fp16"} +use_xla=${7:-"true"} +num_gpus=${8:-2} +warmup_steps_phase1=${9:-"2000"} +warmup_steps_phase2=${10:-"200"} +train_steps=${11:-7820} +save_checkpoints_steps=${12:-100} +num_accumulation_steps_phase1=${13:-128} +num_accumulation_steps_phase2=${14:-512} +bert_model=${15:-"large"} + +DATA_DIR=${DATA_DIR:-data} +#Edit to save logs & checkpoints in a different directory +RESULTS_DIR=${RESULTS_DIR:-/results} + +if [ "$bert_model" = "large" ] ; then + export BERT_CONFIG=data/download/google_pretrained_weights/uncased_L-24_H-1024_A-16/bert_config.json +else + export BERT_CONFIG=data/download/google_pretrained_weights/uncased_L-12_H-768_A-12/bert_config.json +fi + +echo "Container nvidia build = " $NVIDIA_BUILD_ID + +PREC="" +if [ "$precision" = "fp16" ] ; then + PREC="--use_fp16" +elif [ "$precision" = "fp32" ] ; then + PREC="" +elif [ "$precision" = "manual_fp16" ] ; then + PREC="--manual_fp16" +else + echo "Unknown argument" + exit -2 +fi + +if [ "$use_xla" = "true" ] ; then + PREC="$PREC --use_xla" + echo "XLA activated" +fi + +mpi="" +if [ $num_gpus -gt 1 ] ; then + mpi="mpiexec --allow-run-as-root -np $num_gpus --bind-to socket" +fi + +#PHASE 1 Config + +train_steps_phase1=$(expr $train_steps \* 9 \/ 10) #Phase 1 is 10% of training +gbs_phase1=$(expr $train_batch_size_phase1 \* $num_accumulation_steps_phase1) +PHASE1_CKPT=${RESULTS_DIR}/phase_1/model.ckpt-${train_steps_phase1} + +#PHASE 2 + +seq_len=512 +max_pred_per_seq=80 +train_steps_phase2=$(expr $train_steps \* 1 \/ 10) #Phase 2 is 10% of training +gbs_phase2=$(expr $train_batch_size_phase2 \* $num_accumulation_steps_phase2) +train_steps_phase2=$(expr $train_steps_phase2 \* $gbs_phase1 \/ $gbs_phase2) # Adjust for batch size + +RESULTS_DIR_PHASE2=${RESULTS_DIR}/phase_2 +mkdir -m 777 -p $RESULTS_DIR_PHASE2 + +INPUT_FILES="$DATA_DIR/tfrecord/lower_case_1_seq_len_${seq_len}_max_pred_${max_pred_per_seq}_masked_lm_prob_0.15_random_seed_12345_dupe_factor_5_shard_1472_test_split_10/books_wiki_en_corpus/training" +EVAL_FILES="$DATA_DIR/tfrecord/lower_case_1_seq_len_${seq_len}_max_pred_${max_pred_per_seq}_masked_lm_prob_0.15_random_seed_12345_dupe_factor_5_shard_1472_test_split_10/books_wiki_en_corpus/test" + +#Check if all necessary files are available before training +for DIR_or_file in $DATA_DIR $RESULTS_DIR $BERT_CONFIG ${PHASE1_CKPT}.meta; do + if [ ! -d "$DIR_or_file" ] && [ ! -f "$DIR_or_file" ]; then + echo "Error! $DIR_or_file directory missing. Please mount correctly" + exit -1 + fi +done + +$mpi python /workspace/bert/run_pretraining.py \ + --input_files_dir=$INPUT_FILES \ + --init_checkpoint=$PHASE1_CKPT \ + --eval_files_dir=$EVAL_FILES \ + --output_dir=$RESULTS_DIR_PHASE2 \ + --bert_config_file=$BERT_CONFIG \ + --do_train=True \ + --do_eval=True \ + --train_batch_size=$train_batch_size_phase2 \ + --eval_batch_size=$eval_batch_size \ + --max_seq_length=$seq_len \ + --max_predictions_per_seq=$max_pred_per_seq \ + --num_train_steps=$train_steps_phase2 \ + --num_accumulation_steps=$num_accumulation_steps_phase2 \ + --num_warmup_steps=$warmup_steps_phase2 \ + --save_checkpoints_steps=$save_checkpoints_steps \ + --learning_rate=$learning_rate_phase2 \ + --horovod $PREC \ + --allreduce_post_accumulation=True + diff --git a/TensorFlow/LanguageModeling/BERT/scripts/run_squad.sh b/TensorFlow/LanguageModeling/BERT/scripts/run_squad.sh index 534fe0af..da3c8eb7 100755 --- a/TensorFlow/LanguageModeling/BERT/scripts/run_squad.sh +++ b/TensorFlow/LanguageModeling/BERT/scripts/run_squad.sh @@ -1,5 +1,18 @@ #!/usr/bin/env bash +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + echo "Container nvidia build = " $NVIDIA_BUILD_ID batch_size=${1:-"8"} @@ -12,14 +25,14 @@ doc_stride=${7:-"128"} bert_model=${8:-"large"} if [ "$bert_model" = "large" ] ; then - export BERT_DIR=data/pretrained_models_google/uncased_L-24_H-1024_A-16 + export BERT_DIR=data/download/google_pretrained_weights/uncased_L-24_H-1024_A-16 else - export BERT_DIR=data/pretrained_models_google/uncased_L-12_H-768_A-12 + export BERT_DIR=data/download/google_pretrained_weights/uncased_L-12_H-768_A-12 fi squad_version=${9:-"1.1"} -export SQUAD_DIR=data/squad/v${squad_version} +export SQUAD_DIR=data/download/squad/v${squad_version} if [ "$squad_version" = "1.1" ] ; then version_2_with_negative="False" else @@ -29,29 +42,11 @@ fi init_checkpoint=${10:-"$BERT_DIR/bert_model.ckpt"} epochs=${11:-"2.0"} -#Edit to save logs & checkpoints in a different directory -RESULTS_DIR=/results - -if [ ! -d "$SQUAD_DIR" ] ; then - echo "Error! $SQUAD_DIR directory missing. Please mount SQuAD dataset." - exit -1 -fi -if [ ! -d "$BERT_DIR" ] ; then - echo "Error! $BERT_DIR directory missing. Please mount pretrained BERT dataset." - exit -1 -fi -if [ ! -d "$RESULTS_DIR" ] ; then - echo "Error! $RESULTS_DIR directory missing." - exit -1 -fi - echo "Squad directory set as " $SQUAD_DIR " BERT directory set as " $BERT_DIR -echo "Results directory set as " $RESULTS_DIR use_fp16="" if [ "$precision" = "fp16" ] ; then echo "fp16 activated!" - export TF_ENABLE_AUTO_MIXED_PRECISION_GRAPH_REWRITE=1 use_fp16="--use_fp16" fi @@ -68,40 +63,45 @@ if [ $num_gpu -gt 1 ] ; then -x NCCL_DEBUG=INFO \ -x LD_LIBRARY_PATH \ -x PATH -mca pml ob1 -mca btl ^openib" - use_hvd="--horovod" else mpi_command="" - use_hvd="" fi +export GBS=$(expr $batch_size \* $num_gpu) +printf -v TAG "tf_bert_finetuning_squad_%s_%s_gbs%d" "$bert_model" "$precision" $GBS +DATESTAMP=`date +'%y%m%d%H%M%S'` - export GBS=$(expr $batch_size \* $num_gpu) - printf -v TAG "tf_bert_%s_squad_1n_%s_gbs%d" "$bert_model" "$precision" $GBS - DATESTAMP=`date +'%y%m%d%H%M%S'` +#Edit to save logs & checkpoints in a different directory +RESULTS_DIR=/results/${TAG}_${DATESTAMP} +LOGFILE=$RESULTS_DIR/$TAG.$DATESTAMP.log +mkdir -m 777 -p $RESULTS_DIR +printf "Saving checkpoints to %s\n" "$RESULTS_DIR" +printf "Logs written to %s\n" "$LOGFILE" - RESULTS_DIR=${RESULTS_DIR}/${TAG}_${DATESTAMP} - mkdir $RESULTS_DIR - LOGFILE=$RESULTS_DIR/$TAG.$DATESTAMP.log - printf "Saving checkpoints to %s\n" "$RESULTS_DIR" - printf "Writing logs to %s\n" "$LOGFILE" +#Check if all necessary files are available before training +for DIR_or_file in $SQUAD_DIR $RESULTS_DIR $BERT_DIR/bert_config.json $BERT_DIR/vocab.txt; do + if [ ! -d "$DIR_or_file" ] && [ ! -f "$DIR_or_file" ]; then + echo "Error! $DIR_or_file directory missing. Please mount correctly" + exit -1 + fi +done - $mpi_command python run_squad.py \ - --vocab_file=$BERT_DIR/vocab.txt \ - --bert_config_file=$BERT_DIR/bert_config.json \ - --init_checkpoint=$init_checkpoint \ - --do_train=True \ - --train_file=$SQUAD_DIR/train-v${squad_version}.json \ - --do_predict=True \ - --predict_file=$SQUAD_DIR/dev-v${squad_version}.json \ - --train_batch_size=$batch_size \ - --learning_rate=$learning_rate \ - --num_train_epochs=$epochs \ - --max_seq_length=$seq_length \ - --doc_stride=$doc_stride \ - --save_checkpoints_steps 1000 \ - --output_dir=$RESULTS_DIR \ - "$use_hvd" \ - "$use_fp16" \ - $use_xla_tag --version_2_with_negative=${version_2_with_negative} |& tee $LOGFILE +$mpi_command python run_squad.py \ +--vocab_file=$BERT_DIR/vocab.txt \ +--bert_config_file=$BERT_DIR/bert_config.json \ +--init_checkpoint=$init_checkpoint \ +--do_train=True \ +--train_file=$SQUAD_DIR/train-v${squad_version}.json \ +--do_predict=True \ +--predict_file=$SQUAD_DIR/dev-v${squad_version}.json \ +--train_batch_size=$batch_size \ +--learning_rate=$learning_rate \ +--num_train_epochs=$epochs \ +--max_seq_length=$seq_length \ +--doc_stride=$doc_stride \ +--save_checkpoints_steps 1000 \ +--output_dir=$RESULTS_DIR \ +--horovod "$use_fp16" \ +$use_xla_tag --version_2_with_negative=${version_2_with_negative} |& tee $LOGFILE python $SQUAD_DIR/evaluate-v${squad_version}.py $SQUAD_DIR/dev-v${squad_version}.json ${RESULTS_DIR}/predictions.json |& tee -a $LOGFILE diff --git a/TensorFlow/LanguageModeling/BERT/scripts/run_squad_inference.sh b/TensorFlow/LanguageModeling/BERT/scripts/run_squad_inference.sh index 195b0661..2a8aa2cc 100755 --- a/TensorFlow/LanguageModeling/BERT/scripts/run_squad_inference.sh +++ b/TensorFlow/LanguageModeling/BERT/scripts/run_squad_inference.sh @@ -1,5 +1,18 @@ #!/usr/bin/env bash +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + echo "Container nvidia build = " $NVIDIA_BUILD_ID init_checkpoint=${1:-"/results/model.ckpt"} @@ -12,33 +25,18 @@ bert_model=${7:-"large"} squad_version=${8:-"1.1"} if [ "$bert_model" = "large" ] ; then - export BERT_DIR=data/pretrained_models_google/uncased_L-24_H-1024_A-16 + export BERT_DIR=data/download/google_pretrained_weights/uncased_L-24_H-1024_A-16 else - export BERT_DIR=data/pretrained_models_google/uncased_L-12_H-768_A-12 + export BERT_DIR=data/download/google_pretrained_weights/uncased_L-12_H-768_A-12 fi -export SQUAD_DIR=data/squad/v${squad_version} +export SQUAD_DIR=data/download/squad/v${squad_version} if [ "$squad_version" = "1.1" ] ; then version_2_with_negative="False" else version_2_with_negative="True" fi -#Edit to save logs & checkpoints in a different directory -RESULTS_DIR=/results - -if [ ! -d "$SQUAD_DIR" ] ; then - echo "Error! $SQUAD_DIR directory missing. Please mount SQuAD dataset." - exit -1 -fi -if [ ! -d "$BERT_DIR" ] ; then - echo "Error! $BERT_DIR directory missing. Please mount pretrained BERT dataset." - exit -1 -fi -if [ ! -d "$RESULTS_DIR" ] ; then - echo "Error! $RESULTS_DIR directory missing." - exit -1 -fi echo "Squad directory set as " $SQUAD_DIR " BERT directory set as " $BERT_DIR echo "Results directory set as " $RESULTS_DIR @@ -46,7 +44,6 @@ echo "Results directory set as " $RESULTS_DIR use_fp16="" if [ "$precision" = "fp16" ] ; then echo "fp16 activated!" - export TF_ENABLE_AUTO_MIXED_PRECISION_GRAPH_REWRITE=1 use_fp16="--use_fp16" fi @@ -57,10 +54,20 @@ else use_xla_tag="" fi - printf -v TAG "tf_bert_%s_squad_inf_1n_%s_gbs%d_ckpt_%s" "$bert_model" "$precision" $batch_size "$init_checkpoint" - DATESTAMP=`date +'%y%m%d%H%M%S'` - LOGFILE=$RESULTS_DIR/$TAG.$DATESTAMP.log - printf "Writing logs to %s\n" "$LOGFILE" +printf -v TAG "tf_bert_finetuning_squad_%s_inf_%s_gbs%d_ckpt_%s" "$bert_model" "$precision" $batch_size "$init_checkpoint" +DATESTAMP=`date +'%y%m%d%H%M%S'` +#Edit to save logs & checkpoints in a different directory +RESULTS_DIR=/results +LOGFILE=$RESULTS_DIR/$TAG.$DATESTAMP.log +printf "Logs written to %s\n" "$LOGFILE" + +#Check if all necessary files are available before training +for DIR_or_file in $SQUAD_DIR $RESULTS_DIR $BERT_DIR/vocab.txt $BERT_DIR/bert_config.json; do + if [ ! -d "$DIR_or_file" ] && [ ! -f "$DIR_or_file" ]; then + echo "Error! $DIR_or_file directory missing. Please mount correctly" + exit -1 + fi +done python run_squad.py \ --vocab_file=$BERT_DIR/vocab.txt \ @@ -68,6 +75,7 @@ python run_squad.py \ --init_checkpoint=$init_checkpoint \ --do_predict=True \ --predict_file=$SQUAD_DIR/dev-v${squad_version}.json \ +--predict_batch_size=$batch_size \ --max_seq_length=$seq_length \ --doc_stride=$doc_stride \ --predict_batch_size=$batch_size \ diff --git a/TensorFlow/LanguageModeling/BERT/scripts/trtis/export_model.sh b/TensorFlow/LanguageModeling/BERT/scripts/trtis/export_model.sh index 2f729282..d6bf4f4d 100755 --- a/TensorFlow/LanguageModeling/BERT/scripts/trtis/export_model.sh +++ b/TensorFlow/LanguageModeling/BERT/scripts/trtis/export_model.sh @@ -1,10 +1,25 @@ -init_checkpoint=${1:-"/results/model.ckpt"} +#!/bin/bash + +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +init_checkpoint=${1:-"/results/models/bert_large_fp16_384_v1/model.ckpt-5474"} batch_size=${2:-"8"} precision=${3:-"fp16"} use_xla=${4:-"true"} seq_length=${5:-"384"} doc_stride=${6:-"128"} -BERT_DIR=${7:-"data/pretrained_models_google/uncased_L-24_H-1024_A-16"} +BERT_DIR=${7:-"data/download/google_pretrained_weights/uncased_L-24_H-1024_A-16"} trtis_model_version=${8:-1} trtis_model_name=${9:-"bert"} trtis_dyn_batching_delay=${10:-0} @@ -17,7 +32,6 @@ additional_args="--trtis_model_version=$trtis_model_version --trtis_model_name=$ if [ "$precision" = "fp16" ] ; then echo "fp16 activated!" - export TF_ENABLE_AUTO_MIXED_PRECISION_GRAPH_REWRITE=1 additional_args="$additional_args --use_fp16" fi diff --git a/TensorFlow/LanguageModeling/BERT/scripts/trtis/generate_figures.sh b/TensorFlow/LanguageModeling/BERT/scripts/trtis/generate_figures.sh index dc18e99e..d5bb1cc2 100755 --- a/TensorFlow/LanguageModeling/BERT/scripts/trtis/generate_figures.sh +++ b/TensorFlow/LanguageModeling/BERT/scripts/trtis/generate_figures.sh @@ -1,3 +1,18 @@ +#!/bin/bash + +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + # Set the number of devices to use export NVIDIA_VISIBLE_DEVICES=0 @@ -12,9 +27,9 @@ init_checkpoint=${4:-"/results/models/bert_tf_${bert_model}_${precision}_${seq_l MODEL_NAME="bert_${bert_model}_${seq_length}_${precision}" if [ "$bert_model" = "large" ] ; then - export BERT_DIR=data/pretrained_models_google/uncased_L-24_H-1024_A-16 + export BERT_DIR=data/download/google_pretrained_weights/uncased_L-24_H-1024_A-16 else - export BERT_DIR=data/pretrained_models_google/uncased_L-12_H-768_A-12 + export BERT_DIR=data/download/google_pretrained_weights/uncased_L-12_H-768_A-12 fi doc_stride=128 diff --git a/TensorFlow/LanguageModeling/BERT/scripts/trtis/run_client.sh b/TensorFlow/LanguageModeling/BERT/scripts/trtis/run_client.sh index 726565b0..aa662b48 100755 --- a/TensorFlow/LanguageModeling/BERT/scripts/trtis/run_client.sh +++ b/TensorFlow/LanguageModeling/BERT/scripts/trtis/run_client.sh @@ -1,12 +1,27 @@ +#!/bin/bash + +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + batch_size=${1:-"8"} seq_length=${2:-"384"} doc_stride=${3:-"128"} trtis_version_name=${4:-"1"} trtis_model_name=${5:-"bert"} -BERT_DIR=${6:-"data/pretrained_models_google/uncased_L-24_H-1024_A-16"} +BERT_DIR=${6:-"data/download/google_pretrained_weights/uncased_L-24_H-1024_A-16"} squad_version=${7:-"1.1"} -export SQUAD_DIR=data/squad/v${squad_version} +export SQUAD_DIR=data/download/squad/v${squad_version} if [ "$squad_version" = "1.1" ] ; then version_2_with_negative="False" else diff --git a/TensorFlow/LanguageModeling/BERT/scripts/trtis/run_perf_client.sh b/TensorFlow/LanguageModeling/BERT/scripts/trtis/run_perf_client.sh index 59e7979d..849d48bf 100755 --- a/TensorFlow/LanguageModeling/BERT/scripts/trtis/run_perf_client.sh +++ b/TensorFlow/LanguageModeling/BERT/scripts/trtis/run_perf_client.sh @@ -1,6 +1,18 @@ - #!/bin/bash +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + MODEL_NAME=${1:-"bert"} MODEL_VERSION=${2:-1} precision=${3:-"fp16"} diff --git a/TensorFlow/LanguageModeling/BERT/scripts/trtis/run_trtis.sh b/TensorFlow/LanguageModeling/BERT/scripts/trtis/run_trtis.sh index b0f93c92..eae582e8 100755 --- a/TensorFlow/LanguageModeling/BERT/scripts/trtis/run_trtis.sh +++ b/TensorFlow/LanguageModeling/BERT/scripts/trtis/run_trtis.sh @@ -1,4 +1,19 @@ -init_checkpoint=${1:-"/results/model.ckpt"} +#!/bin/bash + +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +init_checkpoint=${1:-"/results/models/bert_large_fp16_384_v1/model.ckpt-5474"} batch_size=${2:-"8"} precision=${3:-"fp16"} use_xla=${4:-"true"} @@ -14,9 +29,9 @@ trtis_engine_count=${13:-1} trtis_model_overwrite=${14:-"False"} if [ "$bert_model" = "large" ] ; then - export BERT_DIR=data/pretrained_models_google/uncased_L-24_H-1024_A-16 + export BERT_DIR=data/download/google_pretrained_weights/uncased_L-24_H-1024_A-16 else - export BERT_DIR=data/pretrained_models_google/uncased_L-12_H-768_A-12 + export BERT_DIR=data/download/google_pretrained_weights/uncased_L-12_H-768_A-12 fi if [ ! -d "$BERT_DIR" ] ; then diff --git a/TensorFlow/LanguageModeling/BERT/scripts/trtis/wait_for_trtis_server.sh b/TensorFlow/LanguageModeling/BERT/scripts/trtis/wait_for_trtis_server.sh index bea54bee..ab73f0f6 100755 --- a/TensorFlow/LanguageModeling/BERT/scripts/trtis/wait_for_trtis_server.sh +++ b/TensorFlow/LanguageModeling/BERT/scripts/trtis/wait_for_trtis_server.sh @@ -1,5 +1,18 @@ #!/bin/bash +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + SERVER_URI=${1:-"localhost"} echo "Waiting for TRTIS Server to be ready at http://$SERVER_URI:8000..." diff --git a/TensorFlow/LanguageModeling/BERT/tokenization.py b/TensorFlow/LanguageModeling/BERT/tokenization.py index 8d4a797a..6e53ce76 100644 --- a/TensorFlow/LanguageModeling/BERT/tokenization.py +++ b/TensorFlow/LanguageModeling/BERT/tokenization.py @@ -1,5 +1,6 @@ # coding=utf-8 -# Copyright 2018 The Google AI Language Team Authors. +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Copyright 2018 The Google AI Language Team Authors and The HugginFace Inc. team. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -12,6 +13,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. + """Tokenization classes.""" from __future__ import absolute_import @@ -23,6 +25,18 @@ import unicodedata import six import tensorflow as tf import re +import os + + +PRETRAINED_VOCAB_ARCHIVE_MAP = { + 'bert-base-uncased': "https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased-vocab.txt", + 'bert-large-uncased': "https://s3.amazonaws.com/models.huggingface.co/bert/bert-large-uncased-vocab.txt", + 'bert-base-cased': "https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-cased-vocab.txt", + 'bert-large-cased': "https://s3.amazonaws.com/models.huggingface.co/bert/bert-large-cased-vocab.txt", + 'bert-base-multilingual-uncased': "https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-multilingual-uncased-vocab.txt", + 'bert-base-multilingual-cased': "https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-multilingual-cased-vocab.txt", + 'bert-base-chinese': "https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-chinese-vocab.txt", +} def validate_case_matches_checkpoint(do_lower_case, init_checkpoint): """Checks whether the casing config is consistent with the checkpoint name.""" @@ -76,61 +90,41 @@ def validate_case_matches_checkpoint(do_lower_case, init_checkpoint): def convert_to_unicode(text): - """Converts `text` to Unicode (if it's not already), assuming utf-8 input.""" - if six.PY3: + """Converts `text` to Unicode (if it's not already), assuming utf-8 input.""" if isinstance(text, str): - return text + return text elif isinstance(text, bytes): - return text.decode("utf-8", "ignore") + return text.decode("utf-8", "ignore") else: - raise ValueError("Unsupported string type: %s" % (type(text))) - elif six.PY2: - if isinstance(text, str): - return text.decode("utf-8", "ignore") - elif isinstance(text, unicode): - return text - else: - raise ValueError("Unsupported string type: %s" % (type(text))) - else: - raise ValueError("Not running on Python2 or Python 3?") + raise ValueError("Unsupported string type: %s" % (type(text))) def printable_text(text): - """Returns text encoded in a way suitable for print or `tf.logging`.""" + """Returns text encoded in a way suitable for print or `tf.logging`.""" - # These functions want `str` for both Python2 and Python3, but in one case - # it's a Unicode string and in the other it's a byte string. - if six.PY3: + # These functions want `str` for both Python2 and Python3, but in one case + # it's a Unicode string and in the other it's a byte string. if isinstance(text, str): - return text + return text elif isinstance(text, bytes): - return text.decode("utf-8", "ignore") + return text.decode("utf-8", "ignore") else: - raise ValueError("Unsupported string type: %s" % (type(text))) - elif six.PY2: - if isinstance(text, str): - return text - elif isinstance(text, unicode): - return text.encode("utf-8") - else: - raise ValueError("Unsupported string type: %s" % (type(text))) - else: - raise ValueError("Not running on Python2 or Python 3?") + raise ValueError("Unsupported string type: %s" % (type(text))) def load_vocab(vocab_file): - """Loads a vocabulary file into a dictionary.""" - vocab = collections.OrderedDict() - index = 0 - with tf.gfile.GFile(vocab_file, "r") as reader: - while True: - token = convert_to_unicode(reader.readline()) - if not token: - break - token = token.strip() - vocab[token] = index - index += 1 - return vocab + """Loads a vocabulary file into a dictionary.""" + vocab = collections.OrderedDict() + index = 0 + with open(vocab_file, "r") as reader: + while True: + token = convert_to_unicode(reader.readline()) + if not token: + break + token = token.strip() + vocab[token] = index + index += 1 + return vocab def convert_by_vocab(vocab, items): @@ -141,21 +135,13 @@ def convert_by_vocab(vocab, items): return output -def convert_tokens_to_ids(vocab, tokens): - return convert_by_vocab(vocab, tokens) - - -def convert_ids_to_tokens(inv_vocab, ids): - return convert_by_vocab(inv_vocab, ids) - - def whitespace_tokenize(text): - """Runs basic whitespace cleaning and splitting on a piece of text.""" - text = text.strip() - if not text: - return [] - tokens = text.split() - return tokens + """Runs basic whitespace cleaning and splitting on a peice of text.""" + text = text.strip() + if not text: + return [] + tokens = text.split() + return tokens class FullTokenizer(object): @@ -182,131 +168,197 @@ class FullTokenizer(object): return convert_by_vocab(self.inv_vocab, ids) -class BasicTokenizer(object): - """Runs basic tokenization (punctuation splitting, lower casing, etc.).""" +class BertTokenizer(object): + """Runs end-to-end tokenization: punctuation splitting + wordpiece""" - def __init__(self, do_lower_case=True): - """Constructs a BasicTokenizer. + def __init__(self, vocab_file, do_lower_case=True): + if not os.path.isfile(vocab_file): + raise ValueError( + "Can't find a vocabulary file at path '{}'. To load the vocabulary from a Google pretrained " + "model use `tokenizer = BertTokenizer.from_pretrained(PRETRAINED_MODEL_NAME)`".format(vocab_file)) + self.vocab = load_vocab(vocab_file) + self.ids_to_tokens = collections.OrderedDict( + [(ids, tok) for tok, ids in self.vocab.items()]) + self.basic_tokenizer = BasicTokenizer(do_lower_case=do_lower_case) + self.wordpiece_tokenizer = WordpieceTokenizer(vocab=self.vocab) + + def tokenize(self, text): + split_tokens = [] + for token in self.basic_tokenizer.tokenize(text): + for sub_token in self.wordpiece_tokenizer.tokenize(token): + split_tokens.append(sub_token) + return split_tokens + + def convert_tokens_to_ids(self, tokens): + """Converts a sequence of tokens into ids using the vocab.""" + ids = [] + for token in tokens: + ids.append(self.vocab[token]) + return ids + + def convert_ids_to_tokens(self, ids): + """Converts a sequence of ids in wordpiece tokens using the vocab.""" + tokens = [] + for i in ids: + tokens.append(self.ids_to_tokens[i]) + return tokens + + @classmethod + def from_pretrained(cls, pretrained_model_name, do_lower_case=True): + """ + Instantiate a PreTrainedBertModel from a pre-trained model file. + Download and cache the pre-trained model file if needed. + """ + if pretrained_model_name in PRETRAINED_VOCAB_ARCHIVE_MAP: + vocab_file = PRETRAINED_VOCAB_ARCHIVE_MAP[pretrained_model_name] + else: + vocab_file = pretrained_model_name + # redirect to the cache, if necessary + try: + resolved_vocab_file = cached_path(vocab_file) + if resolved_vocab_file == vocab_file: + + logger.info("loading vocabulary file {}".format(vocab_file)) + else: + logger.info("loading vocabulary file {} from cache at {}".format( + vocab_file, resolved_vocab_file)) + # Instantiate tokenizer. + tokenizer = cls(resolved_vocab_file, do_lower_case) + except FileNotFoundError: + logger.error( + "Model name '{}' was not found in model name list ({}). " + "We assumed '{}' was a path or url but couldn't find any file " + "associated to this path or url.".format( + pretrained_model_name, + ', '.join(PRETRAINED_VOCAB_ARCHIVE_MAP.keys()), + pretrained_model_name)) + tokenizer = None + return tokenizer + + +class BasicTokenizer(object): + """Runs basic tokenization (punctuation splitting, lower casing, etc.).""" + + def __init__(self, do_lower_case=True): + """Constructs a BasicTokenizer. Args: do_lower_case: Whether to lower case the input. """ - self.do_lower_case = do_lower_case + self.do_lower_case = do_lower_case - def tokenize(self, text): - """Tokenizes a piece of text.""" - text = convert_to_unicode(text) - text = self._clean_text(text) + def tokenize(self, text): + """Tokenizes a piece of text.""" + text = convert_to_unicode(text) + text = self._clean_text(text) + # This was added on November 1st, 2018 for the multilingual and Chinese + # models. This is also applied to the English models now, but it doesn't + # matter since the English models were not trained on any Chinese data + # and generally don't have any Chinese data in them (there are Chinese + # characters in the vocabulary because Wikipedia does have some Chinese + # words in the English Wikipedia.). + text = self._tokenize_chinese_chars(text) + orig_tokens = whitespace_tokenize(text) + split_tokens = [] + for token in orig_tokens: + if self.do_lower_case: + token = token.lower() + token = self._run_strip_accents(token) + split_tokens.extend(self._run_split_on_punc(token)) - # This was added on November 1st, 2018 for the multilingual and Chinese - # models. This is also applied to the English models now, but it doesn't - # matter since the English models were not trained on any Chinese data - # and generally don't have any Chinese data in them (there are Chinese - # characters in the vocabulary because Wikipedia does have some Chinese - # words in the English Wikipedia.). - text = self._tokenize_chinese_chars(text) + output_tokens = whitespace_tokenize(" ".join(split_tokens)) + return output_tokens - orig_tokens = whitespace_tokenize(text) - split_tokens = [] - for token in orig_tokens: - if self.do_lower_case: - token = token.lower() - token = self._run_strip_accents(token) - split_tokens.extend(self._run_split_on_punc(token)) + def _run_strip_accents(self, text): + """Strips accents from a piece of text.""" + text = unicodedata.normalize("NFD", text) + output = [] + for char in text: + cat = unicodedata.category(char) + if cat == "Mn": + continue + output.append(char) + return "".join(output) - output_tokens = whitespace_tokenize(" ".join(split_tokens)) - return output_tokens - - def _run_strip_accents(self, text): - """Strips accents from a piece of text.""" - text = unicodedata.normalize("NFD", text) - output = [] - for char in text: - cat = unicodedata.category(char) - if cat == "Mn": - continue - output.append(char) - return "".join(output) - - def _run_split_on_punc(self, text): - """Splits punctuation on a piece of text.""" - chars = list(text) - i = 0 - start_new_word = True - output = [] - while i < len(chars): - char = chars[i] - if _is_punctuation(char): - output.append([char]) + def _run_split_on_punc(self, text): + """Splits punctuation on a piece of text.""" + chars = list(text) + i = 0 start_new_word = True - else: - if start_new_word: - output.append([]) - start_new_word = False - output[-1].append(char) - i += 1 + output = [] + while i < len(chars): + char = chars[i] + if _is_punctuation(char): + output.append([char]) + start_new_word = True + else: + if start_new_word: + output.append([]) + start_new_word = False + output[-1].append(char) + i += 1 - return ["".join(x) for x in output] + return ["".join(x) for x in output] - def _tokenize_chinese_chars(self, text): - """Adds whitespace around any CJK character.""" - output = [] - for char in text: - cp = ord(char) - if self._is_chinese_char(cp): - output.append(" ") - output.append(char) - output.append(" ") - else: - output.append(char) - return "".join(output) + def _tokenize_chinese_chars(self, text): + """Adds whitespace around any CJK character.""" + output = [] + for char in text: + cp = ord(char) + if self._is_chinese_char(cp): + output.append(" ") + output.append(char) + output.append(" ") + else: + output.append(char) + return "".join(output) - def _is_chinese_char(self, cp): - """Checks whether CP is the codepoint of a CJK character.""" - # This defines a "chinese character" as anything in the CJK Unicode block: - # https://en.wikipedia.org/wiki/CJK_Unified_Ideographs_(Unicode_block) - # - # Note that the CJK Unicode block is NOT all Japanese and Korean characters, - # despite its name. The modern Korean Hangul alphabet is a different block, - # as is Japanese Hiragana and Katakana. Those alphabets are used to write - # space-separated words, so they are not treated specially and handled - # like the all of the other languages. - if ((cp >= 0x4E00 and cp <= 0x9FFF) or # - (cp >= 0x3400 and cp <= 0x4DBF) or # - (cp >= 0x20000 and cp <= 0x2A6DF) or # - (cp >= 0x2A700 and cp <= 0x2B73F) or # - (cp >= 0x2B740 and cp <= 0x2B81F) or # - (cp >= 0x2B820 and cp <= 0x2CEAF) or - (cp >= 0xF900 and cp <= 0xFAFF) or # - (cp >= 0x2F800 and cp <= 0x2FA1F)): # - return True + def _is_chinese_char(self, cp): + """Checks whether CP is the codepoint of a CJK character.""" + # This defines a "chinese character" as anything in the CJK Unicode block: + # https://en.wikipedia.org/wiki/CJK_Unified_Ideographs_(Unicode_block) + # + # Note that the CJK Unicode block is NOT all Japanese and Korean characters, + # despite its name. The modern Korean Hangul alphabet is a different block, + # as is Japanese Hiragana and Katakana. Those alphabets are used to write + # space-separated words, so they are not treated specially and handled + # like the all of the other languages. + if ((cp >= 0x4E00 and cp <= 0x9FFF) or # + (cp >= 0x3400 and cp <= 0x4DBF) or # + (cp >= 0x20000 and cp <= 0x2A6DF) or # + (cp >= 0x2A700 and cp <= 0x2B73F) or # + (cp >= 0x2B740 and cp <= 0x2B81F) or # + (cp >= 0x2B820 and cp <= 0x2CEAF) or + (cp >= 0xF900 and cp <= 0xFAFF) or # + (cp >= 0x2F800 and cp <= 0x2FA1F)): # + return True - return False + return False - def _clean_text(self, text): - """Performs invalid character removal and whitespace cleanup on text.""" - output = [] - for char in text: - cp = ord(char) - if cp == 0 or cp == 0xfffd or _is_control(char): - continue - if _is_whitespace(char): - output.append(" ") - else: - output.append(char) - return "".join(output) + def _clean_text(self, text): + """Performs invalid character removal and whitespace cleanup on text.""" + output = [] + for char in text: + cp = ord(char) + if cp == 0 or cp == 0xfffd or _is_control(char): + continue + if _is_whitespace(char): + output.append(" ") + else: + output.append(char) + return "".join(output) class WordpieceTokenizer(object): - """Runs WordPiece tokenziation.""" + """Runs WordPiece tokenization.""" - def __init__(self, vocab, unk_token="[UNK]", max_input_chars_per_word=200): - self.vocab = vocab - self.unk_token = unk_token - self.max_input_chars_per_word = max_input_chars_per_word + def __init__(self, vocab, unk_token="[UNK]", max_input_chars_per_word=100): + self.vocab = vocab + self.unk_token = unk_token + self.max_input_chars_per_word = max_input_chars_per_word - def tokenize(self, text): - """Tokenizes a piece of text into its word pieces. + def tokenize(self, text): + """Tokenizes a piece of text into its word pieces. This uses a greedy longest-match-first algorithm to perform tokenization using the given vocabulary. @@ -323,77 +375,77 @@ class WordpieceTokenizer(object): A list of wordpiece tokens. """ - text = convert_to_unicode(text) + text = convert_to_unicode(text) - output_tokens = [] - for token in whitespace_tokenize(text): - chars = list(token) - if len(chars) > self.max_input_chars_per_word: - output_tokens.append(self.unk_token) - continue + output_tokens = [] + for token in whitespace_tokenize(text): + chars = list(token) + if len(chars) > self.max_input_chars_per_word: + output_tokens.append(self.unk_token) + continue - is_bad = False - start = 0 - sub_tokens = [] - while start < len(chars): - end = len(chars) - cur_substr = None - while start < end: - substr = "".join(chars[start:end]) - if start > 0: - substr = "##" + substr - if substr in self.vocab: - cur_substr = substr - break - end -= 1 - if cur_substr is None: - is_bad = True - break - sub_tokens.append(cur_substr) - start = end + is_bad = False + start = 0 + sub_tokens = [] + while start < len(chars): + end = len(chars) + cur_substr = None + while start < end: + substr = "".join(chars[start:end]) + if start > 0: + substr = "##" + substr + if substr in self.vocab: + cur_substr = substr + break + end -= 1 + if cur_substr is None: + is_bad = True + break + sub_tokens.append(cur_substr) + start = end - if is_bad: - output_tokens.append(self.unk_token) - else: - output_tokens.extend(sub_tokens) - return output_tokens + if is_bad: + output_tokens.append(self.unk_token) + else: + output_tokens.extend(sub_tokens) + return output_tokens def _is_whitespace(char): - """Checks whether `chars` is a whitespace character.""" - # \t, \n, and \r are technically contorl characters but we treat them - # as whitespace since they are generally considered as such. - if char == " " or char == "\t" or char == "\n" or char == "\r": - return True - cat = unicodedata.category(char) - if cat == "Zs": - return True - return False + """Checks whether `chars` is a whitespace character.""" + # \t, \n, and \r are technically contorl characters but we treat them + # as whitespace since they are generally considered as such. + if char == " " or char == "\t" or char == "\n" or char == "\r": + return True + cat = unicodedata.category(char) + if cat == "Zs": + return True + return False def _is_control(char): - """Checks whether `chars` is a control character.""" - # These are technically control characters but we count them as whitespace - # characters. - if char == "\t" or char == "\n" or char == "\r": + """Checks whether `chars` is a control character.""" + # These are technically control characters but we count them as whitespace + # characters. + if char == "\t" or char == "\n" or char == "\r": + return False + cat = unicodedata.category(char) + if cat.startswith("C"): + return True return False - cat = unicodedata.category(char) - if cat in ("Cc", "Cf"): - return True - return False def _is_punctuation(char): - """Checks whether `chars` is a punctuation character.""" - cp = ord(char) - # We treat all non-letter/number ASCII as punctuation. - # Characters such as "^", "$", and "`" are not in the Unicode - # Punctuation class but we treat them as punctuation anyways, for - # consistency. - if ((cp >= 33 and cp <= 47) or (cp >= 58 and cp <= 64) or - (cp >= 91 and cp <= 96) or (cp >= 123 and cp <= 126)): - return True - cat = unicodedata.category(char) - if cat.startswith("P"): - return True - return False + """Checks whether `chars` is a punctuation character.""" + cp = ord(char) + # We treat all non-letter/number ASCII as punctuation. + # Characters such as "^", "$", and "`" are not in the Unicode + # Punctuation class but we treat them as punctuation anyways, for + # consistency. + if ((cp >= 33 and cp <= 47) or (cp >= 58 and cp <= 64) or + (cp >= 91 and cp <= 96) or (cp >= 123 and cp <= 126)): + return True + cat = unicodedata.category(char) + if cat.startswith("P"): + return True + return False diff --git a/TensorFlow/LanguageModeling/BERT/utils/create_glue_data.py b/TensorFlow/LanguageModeling/BERT/utils/create_glue_data.py index 1ce432b0..de21962f 100644 --- a/TensorFlow/LanguageModeling/BERT/utils/create_glue_data.py +++ b/TensorFlow/LanguageModeling/BERT/utils/create_glue_data.py @@ -1,3 +1,16 @@ +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + from __future__ import absolute_import from __future__ import division from __future__ import print_function diff --git a/TensorFlow/LanguageModeling/BERT/utils/create_pretraining_data.py b/TensorFlow/LanguageModeling/BERT/utils/create_pretraining_data.py index 8bcbe274..d6280918 100644 --- a/TensorFlow/LanguageModeling/BERT/utils/create_pretraining_data.py +++ b/TensorFlow/LanguageModeling/BERT/utils/create_pretraining_data.py @@ -1,4 +1,5 @@ # coding=utf-8 +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. # Copyright 2018 The Google AI Language Team Authors. # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -12,54 +13,26 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. + """Create masked LM/next sentence masked_lm TF examples for BERT.""" -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function +from __future__ import absolute_import, division, print_function, unicode_literals -import collections +import argparse +import logging +import os import random -import tokenization +from io import open +import h5py import tensorflow as tf +import numpy as np +from tqdm import tqdm, trange -flags = tf.flags - -FLAGS = flags.FLAGS - -flags.DEFINE_string("input_file", None, - "Input raw text file (or comma-separated list of files).") - -flags.DEFINE_string( - "output_file", None, - "Output TF example file (or comma-separated list of files).") - -flags.DEFINE_string("vocab_file", None, - "The vocabulary file that the BERT model was trained on.") - -flags.DEFINE_bool( - "do_lower_case", True, - "Whether to lower case the input text. Should be True for uncased " - "models and False for cased models.") - -flags.DEFINE_integer("max_seq_length", 128, "Maximum sequence length.") - -flags.DEFINE_integer("max_predictions_per_seq", 20, - "Maximum number of masked LM predictions per sequence.") - -flags.DEFINE_integer("random_seed", 12345, "Random seed for data generation.") - -flags.DEFINE_integer( - "dupe_factor", 10, - "Number of times to duplicate the input data (with different masks).") - -flags.DEFINE_float("masked_lm_prob", 0.15, "Masked LM probability.") - -flags.DEFINE_float( - "short_seq_prob", 0.1, - "Probability of creating sequences which are shorter than the " - "maximum length.") +from tokenization import BertTokenizer +import tokenization as tokenization +import random +import collections class TrainingInstance(object): """A single training instance (sentence pair).""" @@ -90,7 +63,7 @@ class TrainingInstance(object): def write_instance_to_example_files(instances, tokenizer, max_seq_length, - max_predictions_per_seq, output_files): + max_predictions_per_seq, output_files, output_formats="tfrecord"): """Create TF example files from `TrainingInstance`s.""" writers = [] for output_file in output_files: @@ -99,6 +72,16 @@ def write_instance_to_example_files(instances, tokenizer, max_seq_length, writer_index = 0 total_written = 0 + if 'hdf5' in output_formats: + features_hdf5 = collections.OrderedDict() + num_instances = len(instances) + features_hdf5["input_ids"] = np.zeros([num_instances, max_seq_length], dtype="int32") + features_hdf5["input_mask"] = np.zeros([num_instances, max_seq_length], dtype="int32") + features_hdf5["segment_ids"] = np.zeros([num_instances, max_seq_length], dtype="int32") + features_hdf5["masked_lm_positions"] = np.zeros([num_instances, max_predictions_per_seq], dtype="int32") + features_hdf5["masked_lm_ids"] = np.zeros([num_instances, max_predictions_per_seq], dtype="int32") + features_hdf5["next_sentence_labels"] = np.zeros(num_instances, dtype="int32") + for (inst_index, instance) in enumerate(instances): input_ids = tokenizer.convert_tokens_to_ids(instance.tokens) input_mask = [1] * len(input_ids) @@ -134,9 +117,19 @@ def write_instance_to_example_files(instances, tokenizer, max_seq_length, features["masked_lm_weights"] = create_float_feature(masked_lm_weights) features["next_sentence_labels"] = create_int_feature([next_sentence_label]) - tf_example = tf.train.Example(features=tf.train.Features(feature=features)) + if 'tfrecord' in output_formats: + tf_example = tf.train.Example(features=tf.train.Features(feature=features)) + writers[writer_index].write(tf_example.SerializeToString()) + if 'hdf5' in output_formats: + features_hdf5["input_ids"][inst_index] = input_ids + features_hdf5["input_mask"][inst_index] = input_mask + features_hdf5["segment_ids"][inst_index] = segment_ids + features_hdf5["masked_lm_positions"][inst_index] = masked_lm_positions + features_hdf5["masked_lm_ids"][inst_index] = masked_lm_ids + features_hdf5["next_sentence_labels"][inst_index] = next_sentence_label + if 'tfrecord' not in output_formats and 'hdf5' not in output_formats: + assert False, 'Either empty output_formats list or unsupported type specified. Try: tfrecord or hdf5' - writers[writer_index].write(tf_example.SerializeToString()) writer_index = (writer_index + 1) % len(writers) total_written += 1 @@ -159,6 +152,17 @@ def write_instance_to_example_files(instances, tokenizer, max_seq_length, for writer in writers: writer.close() + if 'hdf5' in output_formats: + f = h5py.File(output_file, 'w') + f.create_dataset("input_ids", data=features_hdf5["input_ids"], dtype='i4', compression='gzip') + f.create_dataset("input_mask", data=features_hdf5["input_mask"], dtype='i1', compression='gzip') + f.create_dataset("segment_ids", data=features_hdf5["segment_ids"], dtype='i1', compression='gzip') + f.create_dataset("masked_lm_positions", data=features_hdf5["masked_lm_positions"], dtype='i4', compression='gzip') + f.create_dataset("masked_lm_ids", data=features_hdf5["masked_lm_ids"], dtype='i4', compression='gzip') + f.create_dataset("next_sentence_labels", data=features_hdf5["next_sentence_labels"], dtype='i1', compression='gzip') + f.flush() + f.close() + tf.logging.info("Wrote %d total instances", total_written) @@ -175,160 +179,161 @@ def create_float_feature(values): def create_training_instances(input_files, tokenizer, max_seq_length, dupe_factor, short_seq_prob, masked_lm_prob, max_predictions_per_seq, rng): - """Create `TrainingInstance`s from raw text.""" - all_documents = [[]] + """Create `TrainingInstance`s from raw text.""" + all_documents = [[]] - # Input file format: - # (1) One sentence per line. These should ideally be actual sentences, not - # entire paragraphs or arbitrary spans of text. (Because we use the - # sentence boundaries for the "next sentence prediction" task). - # (2) Blank lines between documents. Document boundaries are needed so - # that the "next sentence prediction" task doesn't span between documents. - for input_file in input_files: - with tf.gfile.GFile(input_file, "r") as reader: - while True: - line = tokenization.convert_to_unicode(reader.readline()) - if not line: - break - line = line.strip() + # Input file format: + # (1) One sentence per line. These should ideally be actual sentences, not + # entire paragraphs or arbitrary spans of text. (Because we use the + # sentence boundaries for the "next sentence prediction" task). + # (2) Blank lines between documents. Document boundaries are needed so + # that the "next sentence prediction" task doesn't span between documents. + for input_file in input_files: + print("creating instance from {}".format(input_file)) + with open(input_file, "r") as reader: + while True: + line = tokenization.convert_to_unicode(reader.readline()) + if not line: + break + line = line.strip() - # Empty lines are used as document delimiters - if not line: - all_documents.append([]) - tokens = tokenizer.tokenize(line) - if tokens: - all_documents[-1].append(tokens) + # Empty lines are used as document delimiters + if not line: + all_documents.append([]) + tokens = tokenizer.tokenize(line) + if tokens: + all_documents[-1].append(tokens) - # Remove empty documents - all_documents = [x for x in all_documents if x] - rng.shuffle(all_documents) + # Remove empty documents + all_documents = [x for x in all_documents if x] + rng.shuffle(all_documents) - vocab_words = list(tokenizer.vocab.keys()) - instances = [] - for _ in range(dupe_factor): - for document_index in range(len(all_documents)): - instances.extend( - create_instances_from_document( - all_documents, document_index, max_seq_length, short_seq_prob, - masked_lm_prob, max_predictions_per_seq, vocab_words, rng)) + vocab_words = list(tokenizer.vocab.keys()) + instances = [] + for _ in range(dupe_factor): + for document_index in range(len(all_documents)): + instances.extend( + create_instances_from_document( + all_documents, document_index, max_seq_length, short_seq_prob, + masked_lm_prob, max_predictions_per_seq, vocab_words, rng)) - rng.shuffle(instances) - return instances + rng.shuffle(instances) + return instances def create_instances_from_document( - all_documents, document_index, max_seq_length, short_seq_prob, - masked_lm_prob, max_predictions_per_seq, vocab_words, rng): - """Creates `TrainingInstance`s for a single document.""" - document = all_documents[document_index] + all_documents, document_index, max_seq_length, short_seq_prob, + masked_lm_prob, max_predictions_per_seq, vocab_words, rng): + """Creates `TrainingInstance`s for a single document.""" + document = all_documents[document_index] - # Account for [CLS], [SEP], [SEP] - max_num_tokens = max_seq_length - 3 + # Account for [CLS], [SEP], [SEP] + max_num_tokens = max_seq_length - 3 - # We *usually* want to fill up the entire sequence since we are padding - # to `max_seq_length` anyways, so short sequences are generally wasted - # computation. However, we *sometimes* - # (i.e., short_seq_prob == 0.1 == 10% of the time) want to use shorter - # sequences to minimize the mismatch between pre-training and fine-tuning. - # The `target_seq_length` is just a rough target however, whereas - # `max_seq_length` is a hard limit. - target_seq_length = max_num_tokens - if rng.random() < short_seq_prob: - target_seq_length = rng.randint(2, max_num_tokens) + # We *usually* want to fill up the entire sequence since we are padding + # to `max_seq_length` anyways, so short sequences are generally wasted + # computation. However, we *sometimes* + # (i.e., short_seq_prob == 0.1 == 10% of the time) want to use shorter + # sequences to minimize the mismatch between pre-training and fine-tuning. + # The `target_seq_length` is just a rough target however, whereas + # `max_seq_length` is a hard limit. + target_seq_length = max_num_tokens + if rng.random() < short_seq_prob: + target_seq_length = rng.randint(2, max_num_tokens) - # We DON'T just concatenate all of the tokens from a document into a long - # sequence and choose an arbitrary split point because this would make the - # next sentence prediction task too easy. Instead, we split the input into - # segments "A" and "B" based on the actual "sentences" provided by the user - # input. - instances = [] - current_chunk = [] - current_length = 0 - i = 0 - while i < len(document): - segment = document[i] - current_chunk.append(segment) - current_length += len(segment) - if i == len(document) - 1 or current_length >= target_seq_length: - if current_chunk: - # `a_end` is how many segments from `current_chunk` go into the `A` - # (first) sentence. - a_end = 1 - if len(current_chunk) >= 2: - a_end = rng.randint(1, len(current_chunk) - 1) + # We DON'T just concatenate all of the tokens from a document into a long + # sequence and choose an arbitrary split point because this would make the + # next sentence prediction task too easy. Instead, we split the input into + # segments "A" and "B" based on the actual "sentences" provided by the user + # input. + instances = [] + current_chunk = [] + current_length = 0 + i = 0 + while i < len(document): + segment = document[i] + current_chunk.append(segment) + current_length += len(segment) + if i == len(document) - 1 or current_length >= target_seq_length: + if current_chunk: + # `a_end` is how many segments from `current_chunk` go into the `A` + # (first) sentence. + a_end = 1 + if len(current_chunk) >= 2: + a_end = rng.randint(1, len(current_chunk) - 1) - tokens_a = [] - for j in range(a_end): - tokens_a.extend(current_chunk[j]) + tokens_a = [] + for j in range(a_end): + tokens_a.extend(current_chunk[j]) - tokens_b = [] - # Random next - is_random_next = False - if len(current_chunk) == 1 or rng.random() < 0.5: - is_random_next = True - target_b_length = target_seq_length - len(tokens_a) + tokens_b = [] + # Random next + is_random_next = False + if len(current_chunk) == 1 or rng.random() < 0.5: + is_random_next = True + target_b_length = target_seq_length - len(tokens_a) - # This should rarely go for more than one iteration for large - # corpora. However, just to be careful, we try to make sure that - # the random document is not the same as the document - # we're processing. - for _ in range(10): - random_document_index = rng.randint(0, len(all_documents) - 1) - if random_document_index != document_index: - break + # This should rarely go for more than one iteration for large + # corpora. However, just to be careful, we try to make sure that + # the random document is not the same as the document + # we're processing. + for _ in range(10): + random_document_index = rng.randint(0, len(all_documents) - 1) + if random_document_index != document_index: + break - random_document = all_documents[random_document_index] - random_start = rng.randint(0, len(random_document) - 1) - for j in range(random_start, len(random_document)): - tokens_b.extend(random_document[j]) - if len(tokens_b) >= target_b_length: - break - # We didn't actually use these segments so we "put them back" so - # they don't go to waste. - num_unused_segments = len(current_chunk) - a_end - i -= num_unused_segments - # Actual next - else: - is_random_next = False - for j in range(a_end, len(current_chunk)): - tokens_b.extend(current_chunk[j]) - truncate_seq_pair(tokens_a, tokens_b, max_num_tokens, rng) + random_document = all_documents[random_document_index] + random_start = rng.randint(0, len(random_document) - 1) + for j in range(random_start, len(random_document)): + tokens_b.extend(random_document[j]) + if len(tokens_b) >= target_b_length: + break + # We didn't actually use these segments so we "put them back" so + # they don't go to waste. + num_unused_segments = len(current_chunk) - a_end + i -= num_unused_segments + # Actual next + else: + is_random_next = False + for j in range(a_end, len(current_chunk)): + tokens_b.extend(current_chunk[j]) + truncate_seq_pair(tokens_a, tokens_b, max_num_tokens, rng) - assert len(tokens_a) >= 1 - assert len(tokens_b) >= 1 + assert len(tokens_a) >= 1 + assert len(tokens_b) >= 1 - tokens = [] - segment_ids = [] - tokens.append("[CLS]") - segment_ids.append(0) - for token in tokens_a: - tokens.append(token) - segment_ids.append(0) + tokens = [] + segment_ids = [] + tokens.append("[CLS]") + segment_ids.append(0) + for token in tokens_a: + tokens.append(token) + segment_ids.append(0) - tokens.append("[SEP]") - segment_ids.append(0) + tokens.append("[SEP]") + segment_ids.append(0) - for token in tokens_b: - tokens.append(token) - segment_ids.append(1) - tokens.append("[SEP]") - segment_ids.append(1) + for token in tokens_b: + tokens.append(token) + segment_ids.append(1) + tokens.append("[SEP]") + segment_ids.append(1) - (tokens, masked_lm_positions, - masked_lm_labels) = create_masked_lm_predictions( - tokens, masked_lm_prob, max_predictions_per_seq, vocab_words, rng) - instance = TrainingInstance( - tokens=tokens, - segment_ids=segment_ids, - is_random_next=is_random_next, - masked_lm_positions=masked_lm_positions, - masked_lm_labels=masked_lm_labels) - instances.append(instance) - current_chunk = [] - current_length = 0 - i += 1 + (tokens, masked_lm_positions, + masked_lm_labels) = create_masked_lm_predictions( + tokens, masked_lm_prob, max_predictions_per_seq, vocab_words, rng) + instance = TrainingInstance( + tokens=tokens, + segment_ids=segment_ids, + is_random_next=is_random_next, + masked_lm_positions=masked_lm_positions, + masked_lm_labels=masked_lm_labels) + instances.append(instance) + current_chunk = [] + current_length = 0 + i += 1 - return instances + return instances MaskedLmInstance = collections.namedtuple("MaskedLmInstance", @@ -337,106 +342,160 @@ MaskedLmInstance = collections.namedtuple("MaskedLmInstance", def create_masked_lm_predictions(tokens, masked_lm_prob, max_predictions_per_seq, vocab_words, rng): - """Creates the predictions for the masked LM objective.""" + """Creates the predictions for the masked LM objective.""" - cand_indexes = [] - for (i, token) in enumerate(tokens): - if token == "[CLS]" or token == "[SEP]": - continue - cand_indexes.append(i) + cand_indexes = [] + for (i, token) in enumerate(tokens): + if token == "[CLS]" or token == "[SEP]": + continue + cand_indexes.append(i) - rng.shuffle(cand_indexes) + rng.shuffle(cand_indexes) - output_tokens = list(tokens) + output_tokens = list(tokens) - num_to_predict = min(max_predictions_per_seq, - max(1, int(round(len(tokens) * masked_lm_prob)))) + num_to_predict = min(max_predictions_per_seq, + max(1, int(round(len(tokens) * masked_lm_prob)))) - masked_lms = [] - covered_indexes = set() - for index in cand_indexes: - if len(masked_lms) >= num_to_predict: - break - if index in covered_indexes: - continue - covered_indexes.add(index) + masked_lms = [] + covered_indexes = set() + for index in cand_indexes: + if len(masked_lms) >= num_to_predict: + break + if index in covered_indexes: + continue + covered_indexes.add(index) - masked_token = None - # 80% of the time, replace with [MASK] - if rng.random() < 0.8: - masked_token = "[MASK]" - else: - # 10% of the time, keep original - if rng.random() < 0.5: - masked_token = tokens[index] - # 10% of the time, replace with random word - else: - masked_token = vocab_words[rng.randint(0, len(vocab_words) - 1)] + masked_token = None + # 80% of the time, replace with [MASK] + if rng.random() < 0.8: + masked_token = "[MASK]" + else: + # 10% of the time, keep original + if rng.random() < 0.5: + masked_token = tokens[index] + # 10% of the time, replace with random word + else: + masked_token = vocab_words[rng.randint(0, len(vocab_words) - 1)] - output_tokens[index] = masked_token + output_tokens[index] = masked_token - masked_lms.append(MaskedLmInstance(index=index, label=tokens[index])) + masked_lms.append(MaskedLmInstance(index=index, label=tokens[index])) - masked_lms = sorted(masked_lms, key=lambda x: x.index) + masked_lms = sorted(masked_lms, key=lambda x: x.index) - masked_lm_positions = [] - masked_lm_labels = [] - for p in masked_lms: - masked_lm_positions.append(p.index) - masked_lm_labels.append(p.label) + masked_lm_positions = [] + masked_lm_labels = [] + for p in masked_lms: + masked_lm_positions.append(p.index) + masked_lm_labels.append(p.label) - return (output_tokens, masked_lm_positions, masked_lm_labels) + return (output_tokens, masked_lm_positions, masked_lm_labels) def truncate_seq_pair(tokens_a, tokens_b, max_num_tokens, rng): - """Truncates a pair of sequences to a maximum sequence length.""" - while True: - total_length = len(tokens_a) + len(tokens_b) - if total_length <= max_num_tokens: - break + """Truncates a pair of sequences to a maximum sequence length.""" + while True: + total_length = len(tokens_a) + len(tokens_b) + if total_length <= max_num_tokens: + break - trunc_tokens = tokens_a if len(tokens_a) > len(tokens_b) else tokens_b - assert len(trunc_tokens) >= 1 + trunc_tokens = tokens_a if len(tokens_a) > len(tokens_b) else tokens_b + assert len(trunc_tokens) >= 1 - # We want to sometimes truncate from the front and sometimes from the - # back to add more randomness and avoid biases. - if rng.random() < 0.5: - del trunc_tokens[0] + # We want to sometimes truncate from the front and sometimes from the + # back to add more randomness and avoid biases. + if rng.random() < 0.5: + del trunc_tokens[0] + else: + trunc_tokens.pop() + + +def main(): + parser = argparse.ArgumentParser() + ## Required parameters + parser.add_argument("--vocab_file", + default=None, + type=str, + required=True, + help="The vocabulary the BERT model will train on.") + parser.add_argument("--input_file", + default=None, + type=str, + required=True, + help="The input train corpus. can be directory with .txt files or a path to a single file") + parser.add_argument("--output_file", + default=None, + type=str, + required=True, + help="The output file where the model checkpoints will be written.") + + ## Other parameters + # int + parser.add_argument("--max_seq_length", + default=128, + type=int, + help="The maximum total input sequence length after WordPiece tokenization. \n" + "Sequences longer than this will be truncated, and sequences shorter \n" + "than this will be padded.") + parser.add_argument("--dupe_factor", + default=10, + type=int, + help="Number of times to duplicate the input data (with different masks).") + parser.add_argument("--max_predictions_per_seq", + default=20, + type=int, + help="Maximum sequence length.") + + # floats + + parser.add_argument("--masked_lm_prob", + default=0.15, + type=float, + help="Masked LM probability.") + + parser.add_argument("--short_seq_prob", + default=0.1, + type=float, + help="Probability to create a sequence shorter than maximum sequence length") + + parser.add_argument("--do_lower_case", + action='store_true', + default=True, + help="Whether to lower case the input text. True for uncased models, False for cased models.") + parser.add_argument('--random_seed', + type=int, + default=12345, + help="random seed for initialization") + + args = parser.parse_args() + + tokenizer = BertTokenizer(args.vocab_file, do_lower_case=args.do_lower_case) + + input_files = [] + if os.path.isfile(args.input_file): + input_files.append(args.input_file) + elif os.path.isdir(args.input_file): + input_files = [os.path.join(args.input_file, f) for f in os.listdir(args.input_file) if + (os.path.isfile(os.path.join(args.input_file, f)) and f.endswith('.txt'))] else: - trunc_tokens.pop() + raise ValueError("{} is not a valid path".format(args.input_file)) + + rng = random.Random(args.random_seed) + instances = create_training_instances( + input_files, tokenizer, args.max_seq_length, args.dupe_factor, + args.short_seq_prob, args.masked_lm_prob, args.max_predictions_per_seq, + rng) + + output_files = args.output_file.split(",") + print("*** Writing to output files ***") + for output_file in output_files: + print(output_file) -def main(_): - tf.logging.set_verbosity(tf.logging.INFO) - - tokenizer = tokenization.FullTokenizer( - vocab_file=FLAGS.vocab_file, do_lower_case=FLAGS.do_lower_case) - - input_files = [] - for input_pattern in FLAGS.input_file.split(","): - input_files.extend(tf.gfile.Glob(input_pattern)) - - tf.logging.info("*** Reading from input files ***") - for input_file in input_files: - tf.logging.info(" %s", input_file) - - rng = random.Random(FLAGS.random_seed) - instances = create_training_instances( - input_files, tokenizer, FLAGS.max_seq_length, FLAGS.dupe_factor, - FLAGS.short_seq_prob, FLAGS.masked_lm_prob, FLAGS.max_predictions_per_seq, - rng) - - output_files = FLAGS.output_file.split(",") - tf.logging.info("*** Writing to output files ***") - for output_file in output_files: - tf.logging.info(" %s", output_file) - - write_instance_to_example_files(instances, tokenizer, FLAGS.max_seq_length, - FLAGS.max_predictions_per_seq, output_files) + write_instance_to_example_files(instances, tokenizer, args.max_seq_length, + args.max_predictions_per_seq, output_files) if __name__ == "__main__": - flags.mark_flag_as_required("input_file") - flags.mark_flag_as_required("output_file") - flags.mark_flag_as_required("vocab_file") - tf.app.run() + main() diff --git a/TensorFlow/LanguageModeling/BERT/utils/create_squad_data.py b/TensorFlow/LanguageModeling/BERT/utils/create_squad_data.py index eecb790a..fe376754 100644 --- a/TensorFlow/LanguageModeling/BERT/utils/create_squad_data.py +++ b/TensorFlow/LanguageModeling/BERT/utils/create_squad_data.py @@ -1,3 +1,16 @@ +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + from __future__ import absolute_import from __future__ import division from __future__ import print_function diff --git a/TensorFlow/LanguageModeling/BERT/utils/utils.py b/TensorFlow/LanguageModeling/BERT/utils/utils.py index 3ac12ea0..84affeeb 100644 --- a/TensorFlow/LanguageModeling/BERT/utils/utils.py +++ b/TensorFlow/LanguageModeling/BERT/utils/utils.py @@ -1,3 +1,16 @@ +# Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + import tensorflow as tf import time From 3014f38a3f275d8006bfc5088c7ce1e07d671c2e Mon Sep 17 00:00:00 2001 From: Szymon Migacz <1934379+szmigacz@users.noreply.github.com> Date: Mon, 16 Sep 2019 10:09:28 +0200 Subject: [PATCH 09/44] [GNMT PyT] Fix for fp16 training w/o label smoothing (#210) --- PyTorch/Translation/GNMT/train.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/PyTorch/Translation/GNMT/train.py b/PyTorch/Translation/GNMT/train.py index 1dcf49a6..293c3eff 100644 --- a/PyTorch/Translation/GNMT/train.py +++ b/PyTorch/Translation/GNMT/train.py @@ -330,9 +330,7 @@ def set_iter_size(train_iter_size, train_global_batch_size, train_batch_size): def build_criterion(vocab_size, padding_idx, smoothing): if smoothing == 0.: logging.info(f'Building CrossEntropyLoss') - loss_weight = torch.ones(vocab_size) - loss_weight[padding_idx] = 0 - criterion = nn.CrossEntropyLoss(weight=loss_weight, size_average=False) + criterion = nn.CrossEntropyLoss(ignore_index=padding_idx, size_average=False) else: logging.info(f'Building LabelSmoothingLoss (smoothing: {smoothing})') criterion = LabelSmoothing(padding_idx, smoothing) From 61d96c202057960937b1914647ce2365179f49fa Mon Sep 17 00:00:00 2001 From: xjia Date: Wed, 18 Sep 2019 03:37:27 +0000 Subject: [PATCH 10/44] refine assert/cmake --- .../fastertransformer/cuda/CMakeLists.txt | 1 + .../fastertransformer/cuda/cuda_kernels.cu | 8 +++----- .../fastertransformer/cuda/open_attention.cu | 10 +++------- .../fastertransformer/tf_op/CMakeLists.txt | 1 + FasterTransformer/tools/gemm_test/CMakeLists.txt | 2 ++ 5 files changed, 10 insertions(+), 12 deletions(-) diff --git a/FasterTransformer/fastertransformer/cuda/CMakeLists.txt b/FasterTransformer/fastertransformer/cuda/CMakeLists.txt index 3245a710..dccf44ad 100644 --- a/FasterTransformer/fastertransformer/cuda/CMakeLists.txt +++ b/FasterTransformer/fastertransformer/cuda/CMakeLists.txt @@ -19,5 +19,6 @@ set(cuda_kernel_files ) add_library(fastertransformer STATIC ${cuda_kernel_files}) +set_target_properties(fastertransformer PROPERTIES CUDA_RESOLVE_DEVICE_SYMBOLS ON) target_link_libraries(fastertransformer PUBLIC -lcublas -lcudart ${CMAKE_THREAD_LIBS_INIT}) diff --git a/FasterTransformer/fastertransformer/cuda/cuda_kernels.cu b/FasterTransformer/fastertransformer/cuda/cuda_kernels.cu index 684dc791..d20b699c 100644 --- a/FasterTransformer/fastertransformer/cuda/cuda_kernels.cu +++ b/FasterTransformer/fastertransformer/cuda/cuda_kernels.cu @@ -197,11 +197,9 @@ void add_bias_input_layernorm(__half* out, const __half* input, const __half* bi template void add_bias_act_kernelLauncher(T* out, const T* bias, int m, int n, cudaStream_t stream) { -// dim3 grid(m / 64); dim3 grid(m / 4); dim3 block(n / 4); - assert(block.x > 1024); -// dim3 block(n); + assert(block.x <= 1024); add_bias_act<<>>(out, bias, m, n); } @@ -209,9 +207,9 @@ template void add_bias_input_layernorm_kernelLauncher(T* out, const T* input, const T* bias, const T* gamma, const T* beta, int m, int n, cudaStream_t stream) { - assert(n > 1024); dim3 grid(m); dim3 block(n); + assert(block.x <= 1024); add_bias_input_layernorm<<>>(out, input, bias, gamma, beta, m, n); } @@ -220,9 +218,9 @@ template <> void add_bias_input_layernorm_kernelLauncher(__half* out, const __half* input, const __half* bias, const __half* gamma, const __half* beta, int m, int n, cudaStream_t stream) { - assert(n / 2 > 1024); dim3 grid(m); dim3 block(n / 2); + assert(block.x <= 1024); add_bias_input_layernorm<__half><<>>(out, input, bias, gamma, beta, m, n); } diff --git a/FasterTransformer/fastertransformer/cuda/open_attention.cu b/FasterTransformer/fastertransformer/cuda/open_attention.cu index 5de24922..bd565c20 100644 --- a/FasterTransformer/fastertransformer/cuda/open_attention.cu +++ b/FasterTransformer/fastertransformer/cuda/open_attention.cu @@ -324,10 +324,9 @@ void OpenMultiHeadAttention::multiHeadAttr_nofuse_kernelLauncher( if(OpType_ == OperationType::FP32) { -// const int word_per_block = 32; const int word_per_block = 1; - assert(k > 1024); - assert(m / word_per_block * 3 > 65536); + assert(k <= 1024); + assert(m / word_per_block * 3 <= 65536); dim3 grid(m / word_per_block * 3); dim3 block(k); @@ -340,8 +339,6 @@ void OpenMultiHeadAttention::multiHeadAttr_nofuse_kernelLauncher( grid.x = batch_size * seq_len / word_per_block; block.x = head_num * size_per_head * word_per_block / 2; - assert(block.x); - add_QKV_bias<<>>(Q, bias_Q, K, bias_K, V, bias_V, q_buf_, k_buf_, v_buf_, batch_size, seq_len, head_num, size_per_head / 2, word_per_block); } @@ -400,11 +397,10 @@ void OpenMultiHeadAttention::multiHeadAttr_nofuse_kernelLauncher( if(OpType_ == OperationType::HALF) { const int seq_per_block = 4; - // const int seq_per_block = 1; grid.x = batch_size * head_num * seq_len / seq_per_block; block.x = seq_per_block * size_per_head / 2; - assert(grid.x * seq_per_block != batch_size * head_num * seq_len); + assert(grid.x * seq_per_block == batch_size * head_num * seq_len); transpose<<>>(transpose_dst_, dst, batch_size, seq_len, head_num, size_per_head / 2); diff --git a/FasterTransformer/fastertransformer/tf_op/CMakeLists.txt b/FasterTransformer/fastertransformer/tf_op/CMakeLists.txt index 908b5d9c..85c1b943 100644 --- a/FasterTransformer/fastertransformer/tf_op/CMakeLists.txt +++ b/FasterTransformer/fastertransformer/tf_op/CMakeLists.txt @@ -25,4 +25,5 @@ add_definitions(-DGOOGLE_CUDA=1) add_definitions(-DNDEBUG) add_library(tf_fastertransformer SHARED ${tf_bert_transformer_files}) +set_target_properties(tf_fastertransformer PROPERTIES CUDA_RESOLVE_DEVICE_SYMBOLS ON) target_link_libraries(tf_fastertransformer PRIVATE -lcublas -lcudart -ltensorflow_framework ${CMAKE_THREAD_LIBS_INIT}) diff --git a/FasterTransformer/tools/gemm_test/CMakeLists.txt b/FasterTransformer/tools/gemm_test/CMakeLists.txt index 67e109f3..9d947886 100644 --- a/FasterTransformer/tools/gemm_test/CMakeLists.txt +++ b/FasterTransformer/tools/gemm_test/CMakeLists.txt @@ -22,7 +22,9 @@ set(gemm_fp32_files ) add_executable(gemm_fp32 ${gemm_fp32_files}) +set_target_properties(gemm_fp32 PROPERTIES CUDA_RESOLVE_DEVICE_SYMBOLS ON) target_link_libraries(gemm_fp32 PUBLIC -lcublas -lcudart ${CMAKE_THREAD_LIBS_INIT}) add_executable(gemm_fp16 ${gemm_fp16_files}) +set_target_properties(gemm_fp16 PROPERTIES CUDA_RESOLVE_DEVICE_SYMBOLS ON) target_link_libraries(gemm_fp16 PUBLIC -lcublas -lcudart ${CMAKE_THREAD_LIBS_INIT}) From 2de99b5fa7258249afd606f63f1285c044a295fa Mon Sep 17 00:00:00 2001 From: Przemek Strzelczyk Date: Wed, 18 Sep 2019 22:05:24 +0200 Subject: [PATCH 11/44] [Jasper/PyT] Adding TRT support + jupyter notebooks for inference --- .../SpeechRecognition/Jasper/.dockerignore | 2 +- PyTorch/SpeechRecognition/Jasper/Dockerfile | 12 +- PyTorch/SpeechRecognition/Jasper/README.md | 69 +-- .../Jasper/configs/jasper10x5dr.toml | 2 +- .../Jasper/configs/jasper10x5dr_nomask.toml | 203 ++++++++ .../configs/jasper10x5dr_sp_offline.toml | 2 +- .../jasper10x5dr_sp_offline_specaugment.toml | 2 +- PyTorch/SpeechRecognition/Jasper/dataset.py | 17 +- PyTorch/SpeechRecognition/Jasper/helpers.py | 11 +- PyTorch/SpeechRecognition/Jasper/inference.py | 100 ++-- .../Jasper/inference_benchmark.py | 29 +- PyTorch/SpeechRecognition/Jasper/metrics.py | 1 - PyTorch/SpeechRecognition/Jasper/model.py | 167 ++++--- .../Jasper/notebooks/JasperTRT.ipynb | 451 ++++++++++++++++++ .../Jasper/notebooks/README.md | 57 +++ .../Jasper/notebooks/keynote.wav | Bin 0 -> 203598 bytes .../Jasper/parts/features.py | 19 +- .../Jasper/parts/manifest.py | 6 +- .../SpeechRecognition/Jasper/requirements.txt | 2 +- .../Jasper/scripts/docker/launch.sh | 1 + .../Jasper/scripts/download_librispeech.sh | 2 +- .../Jasper/scripts/evaluation.sh | 2 +- .../Jasper/scripts/inference_benchmark.sh | 5 - .../SpeechRecognition/Jasper/scripts/train.sh | 1 - .../Jasper/scripts/train_benchmark.sh | 1 - PyTorch/SpeechRecognition/Jasper/train.py | 58 +-- .../SpeechRecognition/Jasper/trt/Dockerfile | 31 ++ .../SpeechRecognition/Jasper/trt/README.md | 294 ++++++++++++ PyTorch/SpeechRecognition/Jasper/trt/perf.py | 140 ++++++ .../Jasper/trt/perfprocedures.py | 337 +++++++++++++ .../SpeechRecognition/Jasper/trt/perfutils.py | 252 ++++++++++ .../Jasper/trt/requirements.txt | 2 + .../Jasper/trt/scripts/docker/trt_build.sh | 5 + .../Jasper/trt/scripts/docker/trt_launch.sh | 39 ++ .../scripts/download_inference_librispeech.sh | 30 ++ .../preprocess_inference_librispeech.sh | 35 ++ .../Jasper/trt/scripts/trt_inference.sh | 56 +++ .../trt/scripts/trt_inference_benchmark.sh | 162 +++++++ .../Jasper/trt/scripts/walk_benchmark.sh | 38 ++ .../SpeechRecognition/Jasper/trt/trtutils.py | 92 ++++ .../Jasper/utils/inference_librispeech.csv | 5 + 41 files changed, 2520 insertions(+), 220 deletions(-) create mode 100644 PyTorch/SpeechRecognition/Jasper/configs/jasper10x5dr_nomask.toml create mode 100644 PyTorch/SpeechRecognition/Jasper/notebooks/JasperTRT.ipynb create mode 100644 PyTorch/SpeechRecognition/Jasper/notebooks/README.md create mode 100755 PyTorch/SpeechRecognition/Jasper/notebooks/keynote.wav create mode 100644 PyTorch/SpeechRecognition/Jasper/trt/Dockerfile create mode 100644 PyTorch/SpeechRecognition/Jasper/trt/README.md create mode 100755 PyTorch/SpeechRecognition/Jasper/trt/perf.py create mode 100644 PyTorch/SpeechRecognition/Jasper/trt/perfprocedures.py create mode 100644 PyTorch/SpeechRecognition/Jasper/trt/perfutils.py create mode 100644 PyTorch/SpeechRecognition/Jasper/trt/requirements.txt create mode 100755 PyTorch/SpeechRecognition/Jasper/trt/scripts/docker/trt_build.sh create mode 100755 PyTorch/SpeechRecognition/Jasper/trt/scripts/docker/trt_launch.sh create mode 100755 PyTorch/SpeechRecognition/Jasper/trt/scripts/download_inference_librispeech.sh create mode 100755 PyTorch/SpeechRecognition/Jasper/trt/scripts/preprocess_inference_librispeech.sh create mode 100755 PyTorch/SpeechRecognition/Jasper/trt/scripts/trt_inference.sh create mode 100755 PyTorch/SpeechRecognition/Jasper/trt/scripts/trt_inference_benchmark.sh create mode 100755 PyTorch/SpeechRecognition/Jasper/trt/scripts/walk_benchmark.sh create mode 100644 PyTorch/SpeechRecognition/Jasper/trt/trtutils.py create mode 100644 PyTorch/SpeechRecognition/Jasper/utils/inference_librispeech.csv diff --git a/PyTorch/SpeechRecognition/Jasper/.dockerignore b/PyTorch/SpeechRecognition/Jasper/.dockerignore index 9b92b75f..41263747 100755 --- a/PyTorch/SpeechRecognition/Jasper/.dockerignore +++ b/PyTorch/SpeechRecognition/Jasper/.dockerignore @@ -1,4 +1,4 @@ results/ *__pycache__ checkpoints/ -datasets/ \ No newline at end of file +.git/ diff --git a/PyTorch/SpeechRecognition/Jasper/Dockerfile b/PyTorch/SpeechRecognition/Jasper/Dockerfile index 10d0db89..80c3cb4e 100755 --- a/PyTorch/SpeechRecognition/Jasper/Dockerfile +++ b/PyTorch/SpeechRecognition/Jasper/Dockerfile @@ -12,23 +12,13 @@ # See the License for the specific language governing permissions and # limitations under the License. -ARG FROM_IMAGE_NAME=nvcr.io/nvidia/pytorch:19.06-py3 +ARG FROM_IMAGE_NAME=nvcr.io/nvidia/pytorch:19.09-py3 FROM ${FROM_IMAGE_NAME} -WORKDIR /tmp/unique_for_apex -RUN pip uninstall -y apex || : -RUN pip uninstall -y apex || : - -RUN SHA=ToUcHMe git clone https://github.com/NVIDIA/apex.git -WORKDIR /tmp/unique_for_apex/apex -RUN pip install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" . - - RUN apt-get update && apt-get install -y libsndfile1 && apt-get install -y sox && rm -rf /var/lib/apt/lists/* WORKDIR /workspace/jasper COPY . . RUN pip install --disable-pip-version-check -U -r requirements.txt - diff --git a/PyTorch/SpeechRecognition/Jasper/README.md b/PyTorch/SpeechRecognition/Jasper/README.md index 97039c34..59b13ed9 100644 --- a/PyTorch/SpeechRecognition/Jasper/README.md +++ b/PyTorch/SpeechRecognition/Jasper/README.md @@ -1,6 +1,6 @@ # Jasper For PyTorch -This repository provides a script and recipe to train the Jasper model to achieve state of the art the paper accuracy of the acoustic model, and is tested and maintained by NVIDIA. +This repository provides scripts to train the Jasper model to achieve near state of the art accuracy and perform high-performance inference using NVIDIA TensorRT. This repository is tested and maintained by NVIDIA. ## Table Of Contents - [Model overview](#model-overview) @@ -23,6 +23,7 @@ This repository provides a script and recipe to train the Jasper model to achiev * [Training process](#training-process) * [Inference process](#inference-process) * [Evaluation process](#evaluation-process) + * [Inference process with TensorRT](#inference-process-with-tensorrt) - [Performance](#performance) * [Benchmarking](#benchmarking) * [Training performance benchmark](#training-performance-benchmark) @@ -50,7 +51,7 @@ This repository provides an implementation of the Jasper model in PyTorch from t The Jasper model is an end-to-end neural acoustic model for automatic speech recognition (ASR) that provides near state-of-the-art results on LibriSpeech among end-to-end ASR models without any external data. The Jasper architecture of convolutional layers was designed to facilitate fast GPU inference, by allowing whole sub-blocks to be fused into a single GPU kernel. This is important for meeting strict real-time requirements of ASR systems in deployment. The results of the acoustic model are combined with the results of external language models to get the top-ranked word sequences -corresponding to a given audio segment. This post-processing step is called decoding. +corresponding to a given audio segment. This post-processing step is called decoding. This repository is a PyTorch implementation of Jasper and provides scripts to train the Jasper 10x5 model with dense residuals from scratch on the [Librispeech](http://www.openslr.org/12) dataset to achieve the greedy decoding results of the original paper. The original reference code provides Jasper as part of a research toolkit in TensorFlow [openseq2seq](https://github.com/NVIDIA/OpenSeq2Seq). @@ -85,7 +86,7 @@ Each sub-block applies the following operations in sequence: 1D-Convolution, Bat Each block input is connected directly to the last subblock of all following blocks via a residual connection, which is referred to as `dense residual` in the paper. Every block differs in kernel size and number of filters, which are increasing in size from the bottom to the top layers. Irrespective of the exact block configuration parameters B and R, every Jasper model has four additional convolutional blocks: -one immediately succeeding the input layer (Prologue) and three at the end of the B blocks (Epilogue). +one immediately succeeding the input layer (Prologue) and three at the end of the B blocks (Epilogue). The Prologue is to decimate the audio signal in time in order to process a shorter time sequence for efficiency. The Epilogue with dilation captures a bigger context around an audio time step, which decreases the model word error rate (WER). @@ -96,7 +97,7 @@ The paper achieves best results with Jasper 10x5 with dense residual connections The following features were implemented in this model: * GPU-supported feature extraction with data augmentation options [SpecAugment](https://arxiv.org/abs/1904.08779) and [Cutout](https://arxiv.org/pdf/1708.04552.pdf) -* offline and online [Speed Perturbation](https://www.danielpovey.com/files/2015_interspeech_augmentation.pdf) +* offline and online [Speed Perturbation](https://www.danielpovey.com/files/2015_interspeech_augmentation.pdf) * data-parallel multi-GPU training and evaluation * AMP with dynamic loss scaling for Tensor Core training * FP16 inference with AMP @@ -153,7 +154,7 @@ For information about: For training, mixed precision can be enabled by setting the flag: `train.py --fp16`. You can change this behavior and execute the training in single precision by removing the `--fp16` flag for the `train.py` training -script. For example, in the bash scripts `scripts/train.sh`, `scripts/inference.sh`, etc. the precision can be specified with the variable `PRECISION` by setting it to either `PRECISION=’fp16’` or `PRECISION=’fp32’`. +script. For example, in the bash scripts `scripts/train.sh`, `scripts/inference.sh`, etc. the precision can be specified with the variable `PRECISION` by setting it to either `PRECISION=’fp16’` or `PRECISION=’fp32’`. Mixed precision is enabled in PyTorch by using the Automatic Mixed Precision (AMP) library from [APEX](https://github.com/NVIDIA/apex) that casts variables @@ -169,7 +170,7 @@ value to be used can be For an in-depth walk through on AMP, check out sample usage [here](https://nvidia.github.io/apex/amp.html#). [APEX](https://github.com/NVIDIA/apex) is a PyTorch extension that contains utility libraries, such as AMP, which require minimal network code changes to -leverage tensor cores performance. +leverage Tensor Cores performance. The following steps were needed to enable mixed precision training in Jasper: @@ -178,7 +179,7 @@ The following steps were needed to enable mixed precision training in Jasper: from apex import amp ``` -* Initialize AMP and wrap the model and the optimizer +* Initialize AMP and wrap the model and the optimizer ``` model, optimizer = amp.initialize( min_loss_scale=1.0, @@ -188,7 +189,7 @@ from apex import amp ``` -* Apply `scale_loss` context manager +* Apply `scale_loss` context manager ``` with amp.scale_loss(loss, optimizer) as scaled_loss: scaled_loss.backward() @@ -216,11 +217,11 @@ The following section lists the requirements in order to start training and eval ### Requirements -This repository contains a `Dockerfile` which extends the PyTorch 19.06-py3 NGC container and encapsulates some dependencies. Aside from these dependencies, ensure you have the following components: +This repository contains a `Dockerfile` which extends the PyTorch 19.09-py3 NGC container and encapsulates some dependencies. Aside from these dependencies, ensure you have the following components: * [NVIDIA Docker](https://github.com/NVIDIA/nvidia-docker) -* [PyTorch 19.06-py3 NGC container](https://ngc.nvidia.com/catalog/containers/nvidia:pytorch) -* [NVIDIA Volta](https://www.nvidia.com/en-us/data-center/volta-gpu-architecture/) based GPU +* [PyTorch 19.09-py3 NGC container](https://ngc.nvidia.com/catalog/containers/nvidia:pytorch) +* [NVIDIA Volta](https://www.nvidia.com/en-us/data-center/volta-gpu-architecture/) or [Turing](https://www.nvidia.com/en-us/geforce/turing/) based GPU Further required python packages are listed in `requirements.txt`, which are automatically installed with the Docker container built. To manually install them, run ```bash @@ -240,7 +241,7 @@ For those unable to use the PyTorch NGC container, to set up the required enviro ## Quick Start Guide -To train your model using mixed precision with Tensor Cores or using FP32, perform the following steps using the default parameters of the Jasper model on the Librispeech dataset. For details concerning training and inference, see [Advanced](#Advanced). +To train your model using mixed precision with Tensor Cores or using FP32, perform the following steps using the default parameters of the Jasper model on the Librispeech dataset. For details concerning training and inference, see [Advanced](#Advanced) section. 1. Clone the repository. ```bash @@ -265,7 +266,7 @@ and mapped to the corresponding directories ``, ``, `< 4. Download and preprocess the dataset. -No GPU is required for data download and preprocessing. Therefore, if GPU usage is a limited resource, launch the container for this section on a CPU machine by following Steps 2 and 3. +No GPU is required for data download and preprocessing. Therefore, if GPU usage is a limited resource, launch the container for this section on a CPU machine by following Steps 2 and 3. Note: Downloading and preprocessing the dataset requires 500GB of free disk space and can take several hours to complete. @@ -290,7 +291,7 @@ Once the data download is complete, the following folders should exist: * `test-clean/` * `test-other/` -Since `/datasets/` is mounted to `` on the host (see Step 3), once the dataset is downloaded it is accessible from outside of the container at `/LibriSpeech`. +Since `/datasets/` is mounted to `` on the host (see Step 3), once the dataset is downloaded it will be accessible from outside of the container at `/LibriSpeech`. Next, convert the data into WAV files and add speed perturbation with 0.9 and 1.1 to the training files: @@ -317,8 +318,8 @@ Once the data is converted, the following additional files and folders should ex 5. Start training. -Inside the container, use the following script to start training. -Make sure the downloaded and preprocessed dataset is located at `/LibriSpeech` on the host (see Step 3), which corresponds to `/datasets/LibriSpeech` inside the container. +Inside the container, use the following script to start training. +Make sure the downloaded and preprocessed dataset is located at `/LibriSpeech` on the host (see Step 3), which corresponds to `/datasets/LibriSpeech` inside the container. ```bash bash scripts/train.sh [OPTIONS] @@ -330,7 +331,7 @@ More details on available [OPTIONS] can be found in [Parameters](#parameters) an 6. Start validation/evaluation. Inside the container, use the following script to run evaluation. - Make sure the downloaded and preprocessed dataset is located at `/LibriSpeech` on the host (see Step 3), which corresponds to `/datasets/LibriSpeech` inside the container. + Make sure the downloaded and preprocessed dataset is located at `/LibriSpeech` on the host (see Step 3), which corresponds to `/datasets/LibriSpeech` inside the container. ```bash bash scripts/evaluation.sh [OPTIONS] ``` @@ -342,7 +343,9 @@ More details on available [OPTIONS] can be found in [Parameters](#parameters) an 7. Start inference/predictions. Inside the container, use the following script to run inference. - Make sure the downloaded and preprocessed dataset is located at `/LibriSpeech` on the host (see Step 3), which corresponds to `/datasets/LibriSpeech` inside the container. + Make sure the downloaded and preprocessed dataset is located at `/LibriSpeech` on the host (see Step 3), which corresponds to `/datasets/LibriSpeech` inside the container. +A pretrained model checkpoint can be downloaded from `NGC model repository`[https://ngc.nvidia.com/catalog/models/nvidia:jasperpyt_fp16]. + ```bash bash scripts/inference.sh [OPTIONS] ``` @@ -364,7 +367,7 @@ In the `root` directory, the most important files are: * `model.py` - Contains the model architecture * `dataset.py` - Contains the data loader and related functionality * `optimizer.py` - Contains the optimizer -* `inference_benchmark.py` - Serves as inference benchmarking script that measures the latency of pre-processing and the acoustic model +* `inference_benchmark.py` - Serves as inference benchmarking script that measures the latency of pre-processing and the acoustic model * `requirements.py` - Contains the required dependencies that are installed when building the Docker container * `Dockerfile` - Container with the basic set of dependencies to run Jasper @@ -380,9 +383,9 @@ The `scripts/` folder encapsulates all the one-click scripts required for runnin Other folders included in the `root` directory are: +* `notebooks/` - Contains Jupyter notebook * `configs/` - Model configurations * `utils/` - Contains the necessary files for data download and processing - * `parts/` - Contains the necessary files for data pre-processing ### Parameters @@ -438,7 +441,7 @@ SEED: seed for random number generator and useful for ensuring reproducibility. BATCH_SIZE: data batch size.(default: 64) ``` -The `scripts/inference_benchmark.sh` script pads all input to the same length and computes the mean, 90%, 95%, 99% percentile of latency for the specified number of inference steps. Latency is measured in millisecond per batch. The `scripts/inference_benchmark.sh` +The `scripts/inference_benchmark.sh` script pads all input to the same length and computes the mean, 90%, 95%, 99% percentile of latency for the specified number of inference steps. Latency is measured in millisecond per batch. The `scripts/inference_benchmark.sh` measures latency for a single GPU and extends `scripts/inference.sh` by : ```bash MAX_DURATION: filters out input audio data that exceeds a maximum number of seconds. This ensures that when all filtered audio samples are padded to maximum length that length will stay under this specified threshold (default: 36) @@ -538,7 +541,7 @@ Apart from the default arguments as listed in the [Parameters](#parameters) sect ### Evaluation process Evaluation is performed using the `inference.py` script along with parameters defined in `scripts/evaluation.sh`. -The `scripts/evaluation.sh` script runs a job on a a single GPU, taking a pre-trained Jasper model checkpoint and running it on the specified dataset. +The `scripts/evaluation.sh` script runs a job on a single GPU, taking a pre-trained Jasper model checkpoint and running it on the specified dataset. Apart from the default arguments as listed in the [Parameters](#parameters) section, by default the evaluation script: * Uses a batch size of 64 @@ -551,6 +554,9 @@ Apart from the default arguments as listed in the [Parameters](#parameters) sect * Has cudnn benchmark disabled +### Inference Process with TensorRT +NVIDIA TensorRT is a platform for high-performance deep learning inference. It includes a deep learning inference optimizer and runtime that delivers low latency and high-throughput for deep learning inference applications. Jasper’s architecture, which is of deep convolutional nature, is designed to facilitate fast GPU inference. After optimizing the compute-intensive acoustic model with NVIDIA TensorRT, inference throughput increased by up to 1.8x over native PyTorch. +More information on how to perform inference using TensorRT and speed up comparison between TensorRT and native PyTorch can be found in the subfolder [./trt/README.md](trt/README.md) ## Performance @@ -604,12 +610,12 @@ The results for Jasper Large's word error rate from the original paper after gre ##### Training accuracy: NVIDIA DGX-1 (8x V100 32G) -Our results were obtained by running the `scripts/train.sh` training script in the PyTorch 19.06-py3 NGC container with NVIDIA DGX-1 with (8x V100 32G) GPUs. +Our results were obtained by running the `scripts/train.sh` training script in the PyTorch 19.09-py3 NGC container with NVIDIA DGX-1 with (8x V100 32G) GPUs. The following tables report the word error rate(WER) of the acoustic model with greedy decoding on all LibriSpeech dev and test datasets for mixed precision training. FP16 (seed #6) -| **Number of GPUs** | **Batch size per GPU** | **dev-clean WER** | **dev-other WER**| **test-clean WER**| **test-other WER**| **Total time to train with FP16 (Hrs)** | +| **Number of GPUs** | **Batch size per GPU** | **dev-clean WER** | **dev-other WER**| **test-clean WER**| **test-other WER**| **Total time to train with FP16 (Hrs)** | |--- |--- |--- |--- |--- |--- |--- | |8 |64| 3.51|11.14|3.74|11.06|100 @@ -619,7 +625,7 @@ FP32 training matches the results of mixed precision training and takes approxim ##### Training stability test -The following table compares greedy decoding word error rates across 8 different training runs with different seeds for mixed precision training. +The following table compares greedy decoding word error rates across 8 different training runs with different seeds for mixed precision training. | **FP16, 8x GPUs** | **seed #1** | **seed #2** | **seed #3** | **seed #4** | **seed #5** | **seed #6** | **seed #7** | **seed #8** | **mean** | **std** | |:-----------:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:| @@ -632,7 +638,7 @@ The following table compares greedy decoding word error rates across 8 different #### Training performance results -Our results were obtained by running the `scripts/train.sh` training script in the PyTorch 19.06-py3 NGC container. Performance (in sequences per second) is the steady-state throughput. +Our results were obtained by running the `scripts/train.sh` training script in the PyTorch 19.09-py3 NGC container. Performance (in sequences per second) is the steady-state throughput. ##### Training performance: NVIDIA DGX-1 (8x V100 16G) @@ -700,7 +706,7 @@ To achieve these same results, follow the [Quick Start Guide](#quick-start-guide #### Inference performance results -Our results were obtained by running the `scripts/inference_benchmark.sh` script in the PyTorch 19.06-py3 NGC container on NVIDIA DGX-1, DGX-2 and T4 on a single GPU. Performance numbers (latency in milliseconds per batch) were averaged over 1000 iterations. +Our results were obtained by running the `scripts/inference_benchmark.sh` script in the PyTorch 19.09-py3 NGC container on NVIDIA DGX-1, DGX-2 and T4 on a single GPU. Performance numbers (latency in milliseconds per batch) were averaged over 1000 iterations. ##### Inference performance: NVIDIA DGX-1 (1x V100 16G) @@ -800,6 +806,9 @@ To achieve these same results, follow the [Quick Start Guide](#quick-start-guide ## Release notes ### Changelog +September 2019 +* Inference support for TRT 6 +* Jupyter notebook for inference July 2019 * Initial release @@ -808,9 +817,3 @@ July 2019 ### Known issues There are no known issues in this release. - - - - - - diff --git a/PyTorch/SpeechRecognition/Jasper/configs/jasper10x5dr.toml b/PyTorch/SpeechRecognition/Jasper/configs/jasper10x5dr.toml index 7b7ce228..088cc426 100644 --- a/PyTorch/SpeechRecognition/Jasper/configs/jasper10x5dr.toml +++ b/PyTorch/SpeechRecognition/Jasper/configs/jasper10x5dr.toml @@ -55,7 +55,7 @@ dither = 0.00001 feat_type = "logfbank" normalize_transcripts = true trim_silence = true -pad_to = 16 +pad_to = 16 [encoder] diff --git a/PyTorch/SpeechRecognition/Jasper/configs/jasper10x5dr_nomask.toml b/PyTorch/SpeechRecognition/Jasper/configs/jasper10x5dr_nomask.toml new file mode 100644 index 00000000..d532543c --- /dev/null +++ b/PyTorch/SpeechRecognition/Jasper/configs/jasper10x5dr_nomask.toml @@ -0,0 +1,203 @@ +# Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +model = "Jasper" + +[input] +normalize = "per_feature" +sample_rate = 16000 +window_size = 0.02 +window_stride = 0.01 +window = "hann" +features = 64 +n_fft = 512 +frame_splicing = 1 +dither = 0.00001 +feat_type = "logfbank" +normalize_transcripts = true +trim_silence = true +pad_to = 16 +max_duration = 16.7 +speed_perturbation = false + + +cutout_rect_regions = 0 +cutout_rect_time = 60 +cutout_rect_freq = 25 + +cutout_x_regions = 0 +cutout_y_regions = 0 +cutout_x_width = 6 +cutout_y_width = 6 + + +[input_eval] +normalize = "per_feature" +sample_rate = 16000 +window_size = 0.02 +window_stride = 0.01 +window = "hann" +features = 64 +n_fft = 512 +frame_splicing = 1 +dither = 0.00001 +feat_type = "logfbank" +normalize_transcripts = true +trim_silence = true +pad_to = 16 + + +[encoder] +activation = "relu" +convmask = false + +[[jasper]] +filters = 256 +repeat = 1 +kernel = [11] +stride = [2] +dilation = [1] +dropout = 0.2 +residual = false + +[[jasper]] +filters = 256 +repeat = 5 +kernel = [11] +stride = [1] +dilation = [1] +dropout = 0.2 +residual = true +residual_dense = true + + +[[jasper]] +filters = 256 +repeat = 5 +kernel = [11] +stride = [1] +dilation = [1] +dropout = 0.2 +residual = true +residual_dense = true + + +[[jasper]] +filters = 384 +repeat = 5 +kernel = [13] +stride = [1] +dilation = [1] +dropout = 0.2 +residual = true +residual_dense = true + + +[[jasper]] +filters = 384 +repeat = 5 +kernel = [13] +stride = [1] +dilation = [1] +dropout = 0.2 +residual = true +residual_dense = true + + +[[jasper]] +filters = 512 +repeat = 5 +kernel = [17] +stride = [1] +dilation = [1] +dropout = 0.2 +residual = true +residual_dense = true + + +[[jasper]] +filters = 512 +repeat = 5 +kernel = [17] +stride = [1] +dilation = [1] +dropout = 0.2 +residual = true +residual_dense = true + + +[[jasper]] +filters = 640 +repeat = 5 +kernel = [21] +stride = [1] +dilation = [1] +dropout = 0.3 +residual = true +residual_dense = true + + +[[jasper]] +filters = 640 +repeat = 5 +kernel = [21] +stride = [1] +dilation = [1] +dropout = 0.3 +residual = true +residual_dense = true + + +[[jasper]] +filters = 768 +repeat = 5 +kernel = [25] +stride = [1] +dilation = [1] +dropout = 0.3 +residual = true +residual_dense = true + + +[[jasper]] +filters = 768 +repeat = 5 +kernel = [25] +stride = [1] +dilation = [1] +dropout = 0.3 +residual = true +residual_dense = true + + +[[jasper]] +filters = 896 +repeat = 1 +kernel = [29] +stride = [1] +dilation = [2] +dropout = 0.4 +residual = false + +[[jasper]] +filters = 1024 +repeat = 1 +kernel = [1] +stride = [1] +dilation = [1] +dropout = 0.4 +residual = false + +[labels] +labels = [" ", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "'"] diff --git a/PyTorch/SpeechRecognition/Jasper/configs/jasper10x5dr_sp_offline.toml b/PyTorch/SpeechRecognition/Jasper/configs/jasper10x5dr_sp_offline.toml index adb133db..bade525c 100644 --- a/PyTorch/SpeechRecognition/Jasper/configs/jasper10x5dr_sp_offline.toml +++ b/PyTorch/SpeechRecognition/Jasper/configs/jasper10x5dr_sp_offline.toml @@ -56,7 +56,7 @@ dither = 0.00001 feat_type = "logfbank" normalize_transcripts = true trim_silence = true -pad_to = 16 +pad_to = 16 [encoder] diff --git a/PyTorch/SpeechRecognition/Jasper/configs/jasper10x5dr_sp_offline_specaugment.toml b/PyTorch/SpeechRecognition/Jasper/configs/jasper10x5dr_sp_offline_specaugment.toml index 7b842eb2..d01dc51c 100644 --- a/PyTorch/SpeechRecognition/Jasper/configs/jasper10x5dr_sp_offline_specaugment.toml +++ b/PyTorch/SpeechRecognition/Jasper/configs/jasper10x5dr_sp_offline_specaugment.toml @@ -56,7 +56,7 @@ dither = 0.00001 feat_type = "logfbank" normalize_transcripts = true trim_silence = true -pad_to = 16 +pad_to = 16 [encoder] diff --git a/PyTorch/SpeechRecognition/Jasper/dataset.py b/PyTorch/SpeechRecognition/Jasper/dataset.py index f501a4dd..ad88d2f0 100644 --- a/PyTorch/SpeechRecognition/Jasper/dataset.py +++ b/PyTorch/SpeechRecognition/Jasper/dataset.py @@ -13,7 +13,7 @@ # limitations under the License. """ -This file contains classes and functions related to data loading +This file contains classes and functions related to data loading """ import torch import numpy as np @@ -66,7 +66,7 @@ class DistributedBucketBatchSampler(Sampler): bucket_start = self.bucket_size * bucket bucket_end = min(bucket_start + self.bucket_size, self.index_count) indices[bucket_start:bucket_end] = indices[bucket_start:bucket_end][torch.randperm(bucket_end - bucket_start, generator=g)] - + tile_indices = torch.randperm(self.index_count // self.tile_size, generator=g) for tile_index in tile_indices: start_index = self.tile_size * tile_index + self.batch_size * self.rank @@ -93,7 +93,7 @@ class data_prefetcher(): return with torch.cuda.stream(self.stream): self.next_input = [ x.cuda(non_blocking=True) for x in self.next_input] - + def __next__(self): torch.cuda.current_stream().wait_stream(self.stream) input = self.next_input @@ -133,7 +133,7 @@ def seq_collate_fn(batch): return batched_audio_signal, torch.stack(audio_lengths), batched_transcript, \ torch.stack(transcript_lengths) -class AudioToTextDataLayer: +class AudioToTextDataLayer: """Data layer with data loader """ def __init__(self, **kwargs): @@ -205,7 +205,7 @@ class AudioToTextDataLayer: sampler=self.sampler ) else: - raise RuntimeError("Sampler {} not supported".format(sampler_type)) + raise RuntimeError("Sampler {} not supported".format(sampler_type)) def __len__(self): return len(self._dataset) @@ -214,9 +214,9 @@ class AudioToTextDataLayer: def data_iterator(self): return self._dataloader -class AudioDataset(Dataset): +class AudioDataset(Dataset): def __init__(self, dataset_dir, manifest_filepath, labels, featurizer, max_duration=None, pad_to_max=False, - min_duration=None, blank_index=0, max_utts=0, normalize=True, sort_by_duration=False, + min_duration=None, blank_index=0, max_utts=0, normalize=True, sort_by_duration=False, trim=False, speed_perturbation=False): """Dataset that loads tensors via a json file containing paths to audio files, transcripts, and durations (in seconds). Each entry is a different audio sample. @@ -264,6 +264,3 @@ class AudioDataset(Dataset): def __len__(self): return len(self.manifest) - - - diff --git a/PyTorch/SpeechRecognition/Jasper/helpers.py b/PyTorch/SpeechRecognition/Jasper/helpers.py index c611bc48..5a17d4dc 100644 --- a/PyTorch/SpeechRecognition/Jasper/helpers.py +++ b/PyTorch/SpeechRecognition/Jasper/helpers.py @@ -43,7 +43,7 @@ def add_ctc_labels(labels): raise ValueError("labels must be a list of symbols") labels.append("") return labels - + def __ctc_decoder_predictions_tensor(tensor, labels): """ Takes output of greedy ctc decoder and performs ctc decoding algorithm to @@ -136,7 +136,7 @@ def __gather_transcripts(transcript_list: list, transcript_len_list: list, def process_evaluation_batch(tensors: dict, global_vars: dict, labels: list): """ - Processes results of an iteration and saves it in global_vars + Processes results of an iteration and saves it in global_vars Args: tensors: dictionary with results of an evaluation iteration, e.g. loss, predictions, transcript, and output global_vars: dictionary where processes results of iteration are saved @@ -162,11 +162,11 @@ def process_evaluation_batch(tensors: dict, global_vars: dict, labels: list): def process_evaluation_epoch(global_vars: dict, tag=None): """ - Processes results from each worker at the end of evaluation and combine to final result + Processes results from each worker at the end of evaluation and combine to final result Args: global_vars: dictionary containing information of entire evaluation Return: - wer: final word error rate + wer: final word error rate loss: final loss """ if 'EvalLoss' in global_vars: @@ -200,7 +200,7 @@ def process_evaluation_epoch(global_vars: dict, tag=None): def norm(x): - if not isinstance(x, List): + if not isinstance(x, list): if not isinstance(x, tuple): return x return x[0] @@ -220,4 +220,3 @@ def model_multi_gpu(model, multi_gpu=False): model = DDP(model) print('DDP(model)') return model - diff --git a/PyTorch/SpeechRecognition/Jasper/inference.py b/PyTorch/SpeechRecognition/Jasper/inference.py index 581dc148..fb8834e5 100644 --- a/PyTorch/SpeechRecognition/Jasper/inference.py +++ b/PyTorch/SpeechRecognition/Jasper/inference.py @@ -19,14 +19,16 @@ from tqdm import tqdm import math import toml from dataset import AudioToTextDataLayer -from helpers import process_evaluation_batch, process_evaluation_epoch, Optimization, add_ctc_labels, AmpOptimizations, print_dict, model_multi_gpu +from helpers import process_evaluation_batch, process_evaluation_epoch, Optimization, add_ctc_labels, AmpOptimizations, print_dict, model_multi_gpu, __ctc_decoder_predictions_tensor from model import AudioPreprocessing, GreedyCTCDecoder, JasperEncoderDecoder +from parts.features import audio_from_file import torch import apex from apex import amp import random import numpy as np import pickle +import time def parse_args(): parser = argparse.ArgumentParser(description='Jasper') @@ -44,14 +46,15 @@ def parse_args(): parser.add_argument("--save_prediction", type=str, default=None, help="if specified saves predictions in text form at this location") parser.add_argument("--logits_save_to", default=None, type=str, help="if specified will save logits to path") parser.add_argument("--seed", default=42, type=int, help='seed') + parser.add_argument("--wav", type=str, help='absolute path to .wav file (16KHz)') return parser.parse_args() def eval( data_layer, - audio_processor, - encoderdecoder, - greedy_decoder, - labels, + audio_processor, + encoderdecoder, + greedy_decoder, + labels, multi_gpu, args): """performs inference / evaluation @@ -74,6 +77,21 @@ def eval( 'logits' : [], } + + + if args.wav: + features, p_length_e = audio_processor(audio_from_file(args.wav)) + torch.cuda.synchronize() + t0 = time.perf_counter() + t_log_probs_e = encoderdecoder(features) + torch.cuda.synchronize() + t1 = time.perf_counter() + t_predictions_e = greedy_decoder(log_probs=t_log_probs_e) + hypotheses = __ctc_decoder_predictions_tensor(t_predictions_e, labels=labels) + print("INFERENCE TIME\t\t: {} ms".format((t1-t0)*1000.0)) + print("TRANSCRIPT\t\t:", hypotheses[0]) + return + for it, data in enumerate(tqdm(data_layer.data_iterator)): tensors = [] for d in data: @@ -83,8 +101,11 @@ def eval( inp = (t_audio_signal_e, t_a_sig_length_e) - t_processed_signal, p_length_e = audio_processor(x=inp) - t_log_probs_e, _ = encoderdecoder((t_processed_signal, p_length_e)) + t_processed_signal, p_length_e = audio_processor(x=inp) + if args.use_conv_mask: + t_log_probs_e, t_encoded_len_e = encoderdecoder((t_processed_signal, p_length_e)) + else: + t_log_probs_e = encoderdecoder(t_processed_signal) t_predictions_e = greedy_decoder(log_probs=t_log_probs_e) values_dict = dict( @@ -98,7 +119,7 @@ def eval( if args.steps is not None and it + 1 >= args.steps: break wer, _ = process_evaluation_epoch(_global_var_dict) - if (not multi_gpu or (multi_gpu and torch.distributed.get_rank() == 0)): + if (not multi_gpu or (multi_gpu and torch.distributed.get_rank() == 0)): print("==========>>>>>>Evaluation WER: {0}\n".format(wer)) if args.save_prediction is not None: with open(args.save_prediction, 'w') as fp: @@ -122,7 +143,7 @@ def main(args): if args.local_rank is not None: torch.cuda.set_device(args.local_rank) torch.distributed.init_process_group(backend='nccl', init_method='env://') - multi_gpu = args.local_rank is not None + multi_gpu = args.local_rank is not None if multi_gpu: print("DISTRIBUTED with ", torch.distributed.get_world_size()) @@ -135,9 +156,10 @@ def main(args): dataset_vocab = jasper_model_definition['labels']['labels'] ctc_vocab = add_ctc_labels(dataset_vocab) - val_manifest = args.val_manifest + val_manifest = args.val_manifest featurizer_config = jasper_model_definition['input_eval'] featurizer_config["optimization_level"] = optim_level + args.use_conv_mask = jasper_model_definition['encoder'].get('convmask', True) if args.max_duration is not None: featurizer_config['max_duration'] = args.max_duration @@ -148,20 +170,22 @@ def main(args): print_dict(jasper_model_definition) print('feature_config') print_dict(featurizer_config) - - data_layer = AudioToTextDataLayer( - dataset_dir=args.dataset_dir, - featurizer_config=featurizer_config, - manifest_filepath=val_manifest, - labels=dataset_vocab, - batch_size=args.batch_size, - pad_to_max=featurizer_config['pad_to'] == "max", - shuffle=False, - multi_gpu=multi_gpu) + data_layer = None + + if args.wav is None: + data_layer = AudioToTextDataLayer( + dataset_dir=args.dataset_dir, + featurizer_config=featurizer_config, + manifest_filepath=val_manifest, + labels=dataset_vocab, + batch_size=args.batch_size, + pad_to_max=featurizer_config['pad_to'] == "max", + shuffle=False, + multi_gpu=multi_gpu) audio_preprocessor = AudioPreprocessing(**featurizer_config) encoderdecoder = JasperEncoderDecoder(jasper_model_definition=jasper_model_definition, feat_in=1024, num_classes=len(ctc_vocab)) - + if args.ckpt is not None: print("loading model from ", args.ckpt) checkpoint = torch.load(args.ckpt, map_location="cpu") @@ -169,25 +193,28 @@ def main(args): checkpoint['state_dict'][k] = checkpoint['state_dict'].pop("audio_preprocessor." + k) audio_preprocessor.load_state_dict(checkpoint['state_dict'], strict=False) encoderdecoder.load_state_dict(checkpoint['state_dict'], strict=False) - + greedy_decoder = GreedyCTCDecoder() # print("Number of parameters in encoder: {0}".format(model.jasper_encoder.num_weights())) + if args.wav is None: + N = len(data_layer) + step_per_epoch = math.ceil(N / (args.batch_size * (1 if not torch.distributed.is_initialized() else torch.distributed.get_world_size()))) - N = len(data_layer) - step_per_epoch = math.ceil(N / (args.batch_size * (1 if not torch.distributed.is_initialized() else torch.distributed.get_world_size()))) - - if args.steps is not None: - print('-----------------') - print('Have {0} examples to eval on.'.format(args.steps * args.batch_size * (1 if not torch.distributed.is_initialized() else torch.distributed.get_world_size()))) - print('Have {0} steps / (gpu * epoch).'.format(args.steps)) - print('-----------------') + if args.steps is not None: + print('-----------------') + print('Have {0} examples to eval on.'.format(args.steps * args.batch_size * (1 if not torch.distributed.is_initialized() else torch.distributed.get_world_size()))) + print('Have {0} steps / (gpu * epoch).'.format(args.steps)) + print('-----------------') + else: + print('-----------------') + print('Have {0} examples to eval on.'.format(N)) + print('Have {0} steps / (gpu * epoch).'.format(step_per_epoch)) + print('-----------------') else: - print('-----------------') - print('Have {0} examples to eval on.'.format(N)) - print('Have {0} steps / (gpu * epoch).'.format(step_per_epoch)) - print('-----------------') + audio_preprocessor.featurizer.normalize = "per_feature" + print ("audio_preprocessor.normalize: ", audio_preprocessor.featurizer.normalize) audio_preprocessor.cuda() encoderdecoder.cuda() if args.fp16: @@ -197,8 +224,9 @@ def main(args): encoderdecoder = model_multi_gpu(encoderdecoder, multi_gpu) + eval( - data_layer=data_layer, + data_layer=data_layer, audio_processor=audio_preprocessor, encoderdecoder=encoderdecoder, greedy_decoder=greedy_decoder, @@ -208,7 +236,7 @@ def main(args): if __name__=="__main__": args = parse_args() - + print_dict(vars(args)) main(args) diff --git a/PyTorch/SpeechRecognition/Jasper/inference_benchmark.py b/PyTorch/SpeechRecognition/Jasper/inference_benchmark.py index 4e5e7a7a..fcc927ec 100644 --- a/PyTorch/SpeechRecognition/Jasper/inference_benchmark.py +++ b/PyTorch/SpeechRecognition/Jasper/inference_benchmark.py @@ -98,7 +98,11 @@ def eval( t_processed_signal, p_length_e = audio_processor(x=inp) torch.cuda.synchronize() t1 = time.perf_counter() - t_log_probs_e, _ = encoderdecoder((t_processed_signal, p_length_e)) + + if args.use_conv_mask: + t_log_probs_e, t_encoded_len_e = encoderdecoder((t_processed_signal, p_length_e)) + else: + t_log_probs_e = encoderdecoder(t_processed_signal) torch.cuda.synchronize() stop_time = time.perf_counter() @@ -115,13 +119,13 @@ def eval( durations_dnn.append(time_dnn) durations_dnn_and_prep.append(time_prep_and_dnn) seq_lens.append(t_processed_signal.shape[-1]) - + if it >= steps: - + wer, _ = process_evaluation_epoch(_global_var_dict) print("==========>>>>>>Evaluation of all iterations WER: {0}\n".format(wer)) break - + ratios = [0.9, 0.95,0.99, 1.] latencies_dnn = take_durations_and_output_percentile(durations_dnn, ratios) latencies_dnn_and_prep = take_durations_and_output_percentile(durations_dnn_and_prep, ratios) @@ -131,7 +135,7 @@ def eval( def take_durations_and_output_percentile(durations, ratios): durations = np.asarray(durations) * 1000 # in ms - latency = durations + latency = durations latency = latency[5:] mean_latency = np.mean(latency) @@ -167,11 +171,12 @@ def main(args): dataset_vocab = jasper_model_definition['labels']['labels'] ctc_vocab = add_ctc_labels(dataset_vocab) - val_manifest = args.val_manifest + val_manifest = args.val_manifest featurizer_config = jasper_model_definition['input_eval'] featurizer_config["optimization_level"] = optim_level + args.use_conv_mask = jasper_model_definition['encoder'].get('convmask', True) if args.max_duration is not None: - featurizer_config['max_duration'] = args.max_duration + featurizer_config['max_duration'] = args.max_duration if args.pad_to is not None: featurizer_config['pad_to'] = args.pad_to if args.pad_to >= 0 else "max" @@ -181,7 +186,7 @@ def main(args): print_dict(featurizer_config) data_layer = AudioToTextDataLayer( - dataset_dir=args.dataset_dir, + dataset_dir=args.dataset_dir, featurizer_config=featurizer_config, manifest_filepath=val_manifest, labels=dataset_vocab, @@ -226,16 +231,16 @@ def main(args): opt_level=AmpOptimizations[optim_level]) eval( - data_layer=data_layer, + data_layer=data_layer, audio_processor=audio_preprocessor, - encoderdecoder=encoderdecoder, - greedy_decoder=greedy_decoder, + encoderdecoder=encoderdecoder, + greedy_decoder=greedy_decoder, labels=ctc_vocab, args=args) if __name__=="__main__": args = parse_args() - + print_dict(vars(args)) main(args) diff --git a/PyTorch/SpeechRecognition/Jasper/metrics.py b/PyTorch/SpeechRecognition/Jasper/metrics.py index 76fe8ea5..fdf28784 100644 --- a/PyTorch/SpeechRecognition/Jasper/metrics.py +++ b/PyTorch/SpeechRecognition/Jasper/metrics.py @@ -65,4 +65,3 @@ def word_error_rate(hypotheses: List[str], references: List[str]) -> float: else: wer = float('inf') return wer, scores, words - diff --git a/PyTorch/SpeechRecognition/Jasper/model.py b/PyTorch/SpeechRecognition/Jasper/model.py index f0b49d6c..d61d68f2 100644 --- a/PyTorch/SpeechRecognition/Jasper/model.py +++ b/PyTorch/SpeechRecognition/Jasper/model.py @@ -13,7 +13,7 @@ # limitations under the License. from apex import amp -import torch +import torch import torch.nn as nn from parts.features import FeatureFactory from helpers import Optimization @@ -50,7 +50,6 @@ def init_weights(m, mode='xavier_uniform'): def get_same_padding(kernel_size, stride, dilation): if stride > 1 and dilation > 1: raise ValueError("Only stride OR dilation may be greater than 1") - return (kernel_size // 2) * dilation class AudioPreprocessing(nn.Module): @@ -74,7 +73,7 @@ class AudioPreprocessing(nn.Module): return processed_signal, processed_length class SpectrogramAugmentation(nn.Module): - """Spectrogram augmentation + """Spectrogram augmentation """ def __init__(self, **kwargs): nn.Module.__init__(self) @@ -90,11 +89,8 @@ class SpectrogramAugmentation(nn.Module): class SpecAugment(nn.Module): """Spec augment. refer to https://arxiv.org/abs/1904.08779 """ - def __init__(self, cfg, rng=None): + def __init__(self, cfg): super(SpecAugment, self).__init__() - - self._rng = random.Random() if rng is None else rng - self.cutout_x_regions = cfg.get('cutout_x_regions', 0) self.cutout_y_regions = cfg.get('cutout_y_regions', 0) @@ -108,12 +104,12 @@ class SpecAugment(nn.Module): mask = torch.zeros(x.shape).byte() for idx in range(sh[0]): for _ in range(self.cutout_x_regions): - cutout_x_left = int(self._rng.uniform(0, sh[1] - self.cutout_x_width)) + cutout_x_left = int(random.uniform(0, sh[1] - self.cutout_x_width)) mask[idx, cutout_x_left:cutout_x_left + self.cutout_x_width, :] = 1 for _ in range(self.cutout_y_regions): - cutout_y_left = int(self._rng.uniform(0, sh[2] - self.cutout_y_width)) + cutout_y_left = int(random.uniform(0, sh[2] - self.cutout_y_width)) mask[idx, :, cutout_y_left:cutout_y_left + self.cutout_y_width] = 1 @@ -124,11 +120,9 @@ class SpecAugment(nn.Module): class SpecCutoutRegions(nn.Module): """Cutout. refer to https://arxiv.org/pdf/1708.04552.pdf """ - def __init__(self, cfg, rng=None): + def __init__(self, cfg): super(SpecCutoutRegions, self).__init__() - self._rng = random.Random() if rng is None else rng - self.cutout_rect_regions = cfg.get('cutout_rect_regions', 0) self.cutout_rect_time = cfg.get('cutout_rect_time', 5) self.cutout_rect_freq = cfg.get('cutout_rect_freq', 20) @@ -141,9 +135,9 @@ class SpecCutoutRegions(nn.Module): for idx in range(sh[0]): for i in range(self.cutout_rect_regions): - cutout_rect_x = int(self._rng.uniform( + cutout_rect_x = int(random.uniform( 0, sh[1] - self.cutout_rect_freq)) - cutout_rect_y = int(self._rng.uniform( + cutout_rect_y = int(random.uniform( 0, sh[2] - self.cutout_rect_time)) mask[idx, cutout_rect_x:cutout_rect_x + self.cutout_rect_freq, @@ -154,18 +148,19 @@ class SpecCutoutRegions(nn.Module): return x class JasperEncoder(nn.Module): - """Jasper encoder + + """Jasper encoder """ def __init__(self, **kwargs): cfg = {} for key, value in kwargs.items(): cfg[key] = value - nn.Module.__init__(self) + nn.Module.__init__(self) self._cfg = cfg activation = jasper_activations[cfg['encoder']['activation']]() - use_conv_mask = cfg['encoder'].get('convmask', False) + self.use_conv_mask = cfg['encoder'].get('convmask', False) feat_in = cfg['input']['features'] * cfg['input'].get('frame_splicing', 1) init_mode = cfg.get('init_mode', 'xavier_uniform') @@ -183,7 +178,7 @@ class JasperEncoder(nn.Module): kernel_size=lcfg['kernel'], stride=lcfg['stride'], dilation=lcfg['dilation'], dropout=lcfg['dropout'], residual=lcfg['residual'], activation=activation, - residual_panes=dense_res, conv_mask=use_conv_mask)) + residual_panes=dense_res, use_conv_mask=self.use_conv_mask)) feat_in = lcfg['filters'] self.encoder = nn.Sequential(*encoder_layers) @@ -193,106 +188,146 @@ class JasperEncoder(nn.Module): return sum(p.numel() for p in self.parameters() if p.requires_grad) def forward(self, x): - audio_signal, length = x - s_input, length = self.encoder(([audio_signal], length)) - return s_input, length + if self.use_conv_mask: + audio_signal, length = x + return self.encoder(([audio_signal], length)) + else: + return self.encoder([x]) class JasperDecoderForCTC(nn.Module): - """Jasper decoder + """Jasper decoder """ def __init__(self, **kwargs): - nn.Module.__init__(self) + nn.Module.__init__(self) self._feat_in = kwargs.get("feat_in") self._num_classes = kwargs.get("num_classes") init_mode = kwargs.get('init_mode', 'xavier_uniform') self.decoder_layers = nn.Sequential( - nn.Conv1d(self._feat_in, self._num_classes, kernel_size=1, bias=True), - nn.LogSoftmax(dim=1)) + nn.Conv1d(self._feat_in, self._num_classes, kernel_size=1, bias=True),) self.apply(lambda x: init_weights(x, mode=init_mode)) - def num_weights(self): return sum(p.numel() for p in self.parameters() if p.requires_grad) def forward(self, encoder_output): - out = self.decoder_layers(encoder_output[-1]) - return out.transpose(1, 2) + out = self.decoder_layers(encoder_output[-1]).transpose(1, 2) + return nn.functional.log_softmax(out, dim=2) class Jasper(nn.Module): - """Contains data preprocessing, spectrogram augmentation, jasper encoder and decoder + """Contains data preprocessing, spectrogram augmentation, jasper encoder and decoder """ def __init__(self, **kwargs): - nn.Module.__init__(self) - self.audio_preprocessor = AudioPreprocessing(**kwargs.get("feature_config")) + nn.Module.__init__(self) + if kwargs.get("no_featurizer", False): + self.audio_preprocessor = None + else: + self.audio_preprocessor = AudioPreprocessing(**kwargs.get("feature_config")) + self.data_spectr_augmentation = SpectrogramAugmentation(**kwargs.get("feature_config")) self.jasper_encoder = JasperEncoder(**kwargs.get("jasper_model_definition")) self.jasper_decoder = JasperDecoderForCTC(feat_in=kwargs.get("feat_in"), - num_classes=kwargs.get("num_classes")) + num_classes=kwargs.get("num_classes")) + self.acoustic_model = JasperAcousticModel(self.jasper_encoder, self.jasper_decoder) def num_weights(self): return sum(p.numel() for p in self.parameters() if p.requires_grad) def forward(self, x): - input_signal, length = x - t_processed_signal, p_length_t = self.audio_preprocessor(x) + + # Apply optional preprocessing + if self.audio_preprocessor is not None: + t_processed_signal, p_length_t = self.audio_preprocessor(x) + # Apply optional spectral augmentation if self.training: t_processed_signal = self.data_spectr_augmentation(input_spec=t_processed_signal) - t_encoded_t, t_encoded_len_t = self.jasper_encoder((t_processed_signal, p_length_t)) - return self.jasper_decoder(encoder_output=t_encoded_t), t_encoded_len_t + + if (self.jasper_encoder.use_conv_mask): + a_inp = (t_processed_signal, p_length_t) + else: + a_inp = t_processed_signal + # Forward Pass through Encoder-Decoder + return self.acoustic_model.forward(a_inp) + + +class JasperAcousticModel(nn.Module): + def __init__(self, enc, dec, transpose_in=False): + nn.Module.__init__(self) + self.jasper_encoder = enc + self.jasper_decoder = dec + self.transpose_in = transpose_in + def forward(self, x): + if self.jasper_encoder.use_conv_mask: + t_encoded_t, t_encoded_len_t = self.jasper_encoder(x) + else: + if self.transpose_in: + x = x.transpose(1, 2) + t_encoded_t = self.jasper_encoder(x) + + out = self.jasper_decoder(encoder_output=t_encoded_t) + if self.jasper_encoder.use_conv_mask: + return out, t_encoded_len_t + else: + return out class JasperEncoderDecoder(nn.Module): - """Contains jasper encoder and decoder + """Contains jasper encoder and decoder """ def __init__(self, **kwargs): - nn.Module.__init__(self) + nn.Module.__init__(self) self.jasper_encoder = JasperEncoder(**kwargs.get("jasper_model_definition")) self.jasper_decoder = JasperDecoderForCTC(feat_in=kwargs.get("feat_in"), - num_classes=kwargs.get("num_classes")) + num_classes=kwargs.get("num_classes")) + self.acoustic_model = JasperAcousticModel(self.jasper_encoder, + self.jasper_decoder, + kwargs.get("transpose_in", False)) + def num_weights(self): return sum(p.numel() for p in self.parameters() if p.requires_grad) def forward(self, x): - t_processed_signal, p_length_t = x - t_encoded_t, t_encoded_len_t = self.jasper_encoder((t_processed_signal, p_length_t)) - return self.jasper_decoder(encoder_output=t_encoded_t), t_encoded_len_t + return self.acoustic_model.forward(x) class MaskedConv1d(nn.Conv1d): - """1D convolution with sequence masking + """1D convolution with sequence masking """ def __init__(self, in_channels, out_channels, kernel_size, stride=1, - padding=0, dilation=1, groups=1, bias=False, use_mask=True): + padding=0, dilation=1, groups=1, bias=False, use_conv_mask=True): super(MaskedConv1d, self).__init__(in_channels, out_channels, kernel_size, stride=stride, padding=padding, dilation=dilation, groups=groups, bias=bias) - self.use_mask = use_mask + self.use_conv_mask = use_conv_mask def get_seq_len(self, lens): return ((lens + 2 * self.padding[0] - self.dilation[0] * ( self.kernel_size[0] - 1) - 1) / self.stride[0] + 1) def forward(self, inp): - x, lens = inp - if self.use_mask: + if self.use_conv_mask: + x, lens = inp max_len = x.size(2) - mask = torch.arange(max_len).to(lens.dtype).to(lens.device).expand(len(lens), - max_len) >= lens.unsqueeze( - 1) + idxs = torch.arange(max_len).to(lens.dtype).to(lens.device).expand(len(lens), max_len) + mask = idxs >= lens.unsqueeze(1) x = x.masked_fill(mask.unsqueeze(1).to(device=x.device), 0) del mask - + del idxs lens = self.get_seq_len(lens) - + else: + x = inp out = super(MaskedConv1d, self).forward(x) - return out, lens + + if self.use_conv_mask: + return out, lens + else: + return out class JasperBlock(nn.Module): """Jasper Block. See https://arxiv.org/pdf/1904.03288.pdf """ def __init__(self, inplanes, planes, repeat=3, kernel_size=11, stride=1, dilation=1, padding='same', dropout=0.2, activation=None, - residual=True, residual_panes=[], conv_mask=False): + residual=True, residual_panes=[], use_conv_mask=False): super(JasperBlock, self).__init__() if padding != "same": @@ -300,7 +335,7 @@ class JasperBlock(nn.Module): padding_val = get_same_padding(kernel_size[0], stride[0], dilation[0]) - self.conv_mask = conv_mask + self.use_conv_mask = use_conv_mask self.conv = nn.ModuleList() inplanes_loop = inplanes for _ in range(repeat - 1): @@ -334,7 +369,7 @@ class JasperBlock(nn.Module): layers = [ MaskedConv1d(in_channels, out_channels, kernel_size, stride=stride, dilation=dilation, padding=padding, bias=bias, - use_mask=self.conv_mask), + use_conv_mask=self.use_conv_mask), nn.BatchNorm1d(out_channels, eps=1e-3, momentum=0.1) ] return layers @@ -352,13 +387,16 @@ class JasperBlock(nn.Module): return sum(p.numel() for p in self.parameters() if p.requires_grad) def forward(self, input_): - - xs, lens_orig = input_ + if self.use_conv_mask: + xs, lens_orig = input_ + else: + xs = input_ + lens_orig = 0 # compute forward convolutions out = xs[-1] lens = lens_orig for i, l in enumerate(self.conv): - if isinstance(l, MaskedConv1d): + if self.use_conv_mask and isinstance(l, MaskedConv1d): out, lens = l((out, lens)) else: out = l(out) @@ -367,7 +405,7 @@ class JasperBlock(nn.Module): for i, layer in enumerate(self.res): res_out = xs[i] for j, res_layer in enumerate(layer): - if j == 0: + if j == 0 and self.use_conv_mask: res_out, _ = res_layer((res_out, lens_orig)) else: res_out = res_layer(res_out) @@ -376,9 +414,14 @@ class JasperBlock(nn.Module): # compute the output out = self.out(out) if self.res is not None and self.dense_residual: - return xs + [out], lens + out = xs + [out] + else: + out = [out] - return [out], lens + if self.use_conv_mask: + return out, lens + else: + return out class GreedyCTCDecoder(nn.Module): """ Greedy CTC Decoder diff --git a/PyTorch/SpeechRecognition/Jasper/notebooks/JasperTRT.ipynb b/PyTorch/SpeechRecognition/Jasper/notebooks/JasperTRT.ipynb new file mode 100644 index 00000000..8981c470 --- /dev/null +++ b/PyTorch/SpeechRecognition/Jasper/notebooks/JasperTRT.ipynb @@ -0,0 +1,451 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Copyright 2019 NVIDIA Corporation. All Rights Reserved.\n", + "#\n", + "# Licensed under the Apache License, Version 2.0 (the \"License\");\n", + "# you may not use this file except in compliance with the License.\n", + "# You may obtain a copy of the License at\n", + "#\n", + "# http://www.apache.org/licenses/LICENSE-2.0\n", + "#\n", + "# Unless required by applicable law or agreed to in writing, software\n", + "# distributed under the License is distributed on an \"AS IS\" BASIS,\n", + "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", + "# See the License for the specific language governing permissions and\n", + "# limitations under the License.\n", + "# ==============================================================================" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "# Jasper Inference For TensorRT 6\n", + "This Jupyter notebook provides scripts to perform high-performance inference using NVIDIA TensorRT. \n", + "Jasper is a neural acoustic model for speech recognition. Its network architecture is designed to facilitate fast GPU inference. \n", + "NVIDIA TensorRT is a platform for high-performance deep learning inference. It includes a deep learning inference optimizer and runtime that delivers low latency and high-throughput for deep learning inference applications.\n", + "After optimizing the compute-intensive acoustic model with NVIDIA TensorRT, inference throughput increased by up to 1.8x over native PyTorch." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. Overview\n", + "\n", + "The Jasper model is an end-to-end neural acoustic model for automatic speech recognition (ASR) that provides near state-of-the-art results on LibriSpeech among end-to-end ASR models without any external data. The Jasper architecture of convolutional layers was designed to facilitate fast GPU inference, by allowing whole sub-blocks to be fused into a single GPU kernel. This is important for meeting strict real-time requirements of ASR systems in deployment.The results of the acoustic model are combined with the results of external language models to get the top-ranked word sequences corresponding to a given audio segment. This post-processing step is called decoding.\n", + "\n", + "The original paper is Jasper: An End-to-End Convolutional Neural Acoustic Model https://arxiv.org/pdf/1904.03288.pdf.\n", + "\n", + "### 1.1 Model architecture\n", + "By default the model configuration is Jasper 10x5 with dense residuals. A Jasper BxR model has B blocks, each consisting of R repeating sub-blocks.\n", + "Each sub-block applies the following operations in sequence: 1D-Convolution, Batch Normalization, ReLU activation, and Dropout. \n", + "In the original paper Jasper is trained with masked convolutions, which masks out the padded part of an input sequence in a batch before the 1D-Convolution.\n", + "For inference masking is not used. The reason for this is that in inference, the original mask operation does not achieve better accuracy than without the mask operation on the test and development dataset. However, no masking achieves better inference performance especially after TensorRT optimization.\n", + "More information on the model architecture can be found in the [root folder](https://github.com/NVIDIA/DeepLearningExamples/tree/master/PyTorch/SpeechRecognition/Jasper)\n", + "\n", + "### 1.2 TensorRT Inference pipeline\n", + "The Jasper inference pipeline consists of 3 components: data preprocessor, acoustic model and greedy decoder. The acoustic model is the most compute intensive, taking more than 90% of the entire end-to-end pipeline. The acoustic model is the only component with learnable parameters and also what differentiates Jasper from the competition. So, we focus on the acoustic model for the most part.\n", + "For the non-TRT Jasper inference pipeline, all 3 components are implemented and run with native PyTorch. For the TensorRT inference pipeline, we show the speedup of running the acoustic model with TensorRT, while preprocessing and decoding are reused from the native PyTorch pipeline.\n", + "To run a model with TensorRT, we first construct the model in PyTorch, which is then exported into a ONNX static graph. Finally, a TensorRT engine is constructed from the ONNX file and can be launched to do inference." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.3 Learning objectives\n", + "\n", + "This notebook demonstrates:\n", + "- Speed up Jasper Inference with TensorRT\n", + "- The use/download of fine-tuned NVIDIA Jasper models\n", + "- Use of Mixed Precision for Inference" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. Requirements\n", + "\n", + "Please refer to README.md" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. Jasper Inference\n", + "### 3.1 Start a detached session in the NGC container" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "DATA_DIR=\"$PWD/data\" # replace with user path to dataset root folder that contains various datasets. E.g. this path should contain LibriSpeech as subfolder\n", + "CHECKPOINT_DIR=\"$PWD/checkpoints\" # replace with user path to checkpoint folder. Following code assumes this folder to contain 'jasper_fp16.pt'\n", + "RESULT_DIR=\"$PWD/results\" # replace with user path to result folder, where log files and prediction files will be saved after inference." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!nvidia-docker run -it -d --rm --name \"JasperTRT\" \\\n", + " --runtime=nvidia \\\n", + " --shm-size=4g \\\n", + " --ulimit memlock=-1 \\\n", + " --ulimit stack=67108864 \\\n", + " -v $DATA_DIR:/datasets \\\n", + " -v $CHECKPOINT_DIR:/checkpoints/ \\\n", + " -v $RESULT_DIR:/results/ \\\n", + " jasper:trt6 bash" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can also specify the GPU(s) to run the container by adding NV_GPU before the nvidia-docker run command, for example, to specify GPU 1 to run the container, add \"NV_GPU=1\" before the nvidia-docker run command." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!NV_GPU=1 nvidia-docker run -it -d --rm --name \"JasperTRT\" \\\n", + " --runtime=nvidia \\\n", + " --shm-size=4g \\\n", + " --ulimit memlock=-1 \\\n", + " --ulimit stack=67108864 \\\n", + " -v $DATA_DIR:/datasets \\\n", + " -v $CHECKPOINT_DIR:/checkpoints/ \\\n", + " -v $RESULT_DIR:/results/ \\\n", + " jasper:trt6 bash" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.2 Download and preprocess the dataset.\n", + "If LibriSpeech http://www.openslr.org/12 has already been downloaded and preprocessed, no further steps in this subsection need to be taken.\n", + "If LibriSpeech has not been downloaded already, note that only a subset of LibriSpeech is typically used for inference (dev-* and test-*). LibriSpeech contains 1000 hours of 16kHz read English speech derived from public domain audiobooks from LibriVox project and has been carefully segmented and aligned. For more information, see paper [LIBRISPEECH: AN ASR CORPUS BASED ON PUBLIC DOMAIN AUDIO BOOKS paper](http://www.danielpovey.com/files/2015_icassp_librispeech.pdf).\n", + "To acquire the inference subset of LibriSpeech run (does not require GPU):" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!nvidia-docker exec -it JasperTRT bash trt/scripts/download_inference_librispeech.sh" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once the data download is complete, the following folders should exist:\n", + "* /datasets/LibriSpeech/\n", + " * dev-clean/\n", + " * dev-other/\n", + " * test-clean/\n", + " * test-other/\n", + "\n", + "Since /datasets/ is mounted to on the host, once the dataset is downloaded it is accessible from outside of the container at /LibriSpeech.\n", + "\n", + "Next, preprocessing the data can be performed with the following command:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!nvidia-docker exec -it JasperTRT bash trt/scripts/preprocess_inference_librispeech.sh" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once the data is preprocessed, the following additional files should now exist:\n", + "\n", + "* /datasets/LibriSpeech/\n", + " * librispeech-dev-clean-wav.json\n", + " * librispeech-dev-other-wav.json\n", + " * librispeech-test-clean-wav.json\n", + " * librispeech-test-other-wav.json\n", + " * dev-clean/\n", + " * dev-other/\n", + " * test-clean/\n", + " * test-other/" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.3 Download pretrained model checkpoint\n", + "A pretrained model checkpoint can be downloaded from NGC model repository https://ngc.nvidia.com/catalog/models/nvidia:jasperpyt_fp16\n", + " \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.4. Start TensorRT inference prediction\n", + "\n", + "Inside the container, use the following script to run inference with TensorRT.\n", + "You will need to set the parameters such as: \n", + "\n", + "\n", + "* `CHECKPOINT`: Model checkpoint path\n", + "* `TRT_PRECISION`: \"fp32\" or \"fp16\". Defines which precision kernels will be used for TensorRT engine (default: \"fp32\")\n", + "* `PYTORCH_PRECISION`: \"fp32\" or \"fp16\". Defines which precision will be used for inference in PyTorch (default: \"fp32\")\n", + "* `TRT_PREDICTION_PATH`: file to store inference prediction results generated with TensorRT\n", + "* `PYT_PREDICTION_PATH`: file to store inference prediction results generated with native PyTorch\n", + "* `DATASET`: LibriSpeech dataset (default: dev-clean)\n", + "* `NUM_STEPS`: Number of inference steps (default: -1)\n", + "* `BATCH_SIZE`: Mini batch size (default: 1)\n", + "* `NUM_FRAMES`: cuts/pads all pre-processed feature tensors to this length. 100 frames ~ 1 second of audio (default: 3600)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!nvidia-docker exec -it -e CHECKPOINT=/checkpoints/jasper_fp16.pt -e TRT_PREDICTION_PATH=/results/result.txt JasperTRT bash trt/scripts/trt_inference.sh" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " ### 3.5. Start TensorRT Inference Benchmark\n", + "\n", + "Run the following commmand to run inference benchmark with TensorRT inside the container.\n", + "\n", + "You will need to set the parameters such as:\n", + "\n", + "* `CHECKPOINT`: Model checkpoint path \n", + "* `NUM_STEPS`: number of inference steps. If -1 runs inference on entire dataset. (default: -1)\n", + "* `NUM_FRAMES`: cuts/pads all pre-processed feature tensors to this length. 100 frames ~ 1 second of audio (default: 512)\n", + "* `BATCH_SIZE`: data batch size (default: 64)\n", + "* `TRT_PRECISION`: \"fp32\" or \"fp16\". Defines which precision kernels will be used for TensorRT engine (default: \"fp32\")\n", + "* `PYTORCH_PRECISION`: \"fp32\" or \"fp16\". Defines which precision will be used for inference in PyTorch (default: \"fp32\")\n", + "* `CSV_PATH`: file to store CSV results (default: \"/results/res.csv\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!nvidia-docker exec -it -e CHECKPOINT=/checkpoints/jasper_fp16.pt -e TRT_PREDICTION_PATH=/results/benchmark.txt JasperTRT bash trt/scripts/trt_inference_benchmark.sh" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4. Automatic Mixed Precision\n", + "\n", + "Mixed precision is the combined use of different numerical precisions in a computational method. Mixed precision training offers significant computational speedup by performing operations in half-precision format, while storing minimal information in single-precision to retain as much information as possible in critical parts of the network. Since the introduction of Tensor Cores in the Volta and Turing architecture, significant training speedups are experienced by switching to mixed precision -- up to 3x overall speedup on the most arithmetically intense model architectures. \n", + "\n", + "Using mixed precision training requires two steps:\n", + "\n", + "* Porting the model to use the FP16 data type where appropriate.\n", + "* Adding loss scaling to preserve small gradient values.\n", + "\n", + "The ability to train deep learning networks with lower precision was introduced in the Pascal architecture and first supported in CUDA 8 in the NVIDIA Deep Learning SDK.\n", + "For information about:\n", + "\n", + "How to train using mixed precision, see the [Mixed Precision Training](https://arxiv.org/abs/1710.03740) paper and [Training With Mixed Precision](https://docs.nvidia.com/deeplearning/sdk/mixed-precision-training/index.html) documentation.\n", + "\n", + "Techniques used for mixed precision training, see the blog [Mixed-Precision Training of Deep Neural Networks](https://devblogs.nvidia.com/mixed-precision-training-deep-neural-networks/).\n", + "\n", + "APEX tools for mixed precision training, see the [NVIDIA Apex: Tools for Easy Mixed-Precision Training in PyTorch](https://devblogs.nvidia.com/apex-pytorch-easy-mixed-precision-training/).\n", + "\n", + "To enable mixed precision, we can specify the variables `TRT_PRECISION` and `PYTORCH_PRECISION` by setting them to `TRT_PRECISION=fp16` and `PYTORCH_PRECISION=fp16` when running the inference. To run the TensorRT inference benchmarking using automatic mixed precision:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!nvidia-docker exec -it -e CHECKPOINT=/checkpoints/jasper_fp16.pt -e TRT_PREDICTION_PATH=/results/benchmark.txt -e TRT_PRECISION=fp16 -e PYTORCH_PRECISION=fp16 -e CSV_PATH=/results/res_fp16.csv JasperTRT bash trt/scripts/trt_inference_benchmark.sh" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From the performance metrics that you get from res.csv (fp32) and res_fp16.csv (automatic mixed precision) files, you can see that automatic mixed precision can speedup the inference efficiently compared to fp32." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5. Play with audio examples\n", + "\n", + "You can perform inference using pre-trained checkpoints which takes audio file (in .wav format) as input, and produces the corresponding text file. You can customize the content of the text file. For example, there is a keynote.wav file as input and we can listen to it:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import IPython.display as ipd\n", + "ipd.Audio('keynote.wav', rate=22050)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can run inference using the trt/perf.py script, the checkpoint is passed as `--ckpt` argument, `--model`_toml specifies the path to network configuration file (see examples in \"config\" directory), `--make_onnx` does export to ONNX file at if set, `--engine_path` saves the engine (*.plan) file.\n", + "\n", + "To create a new engine file (jasper.plan) for TensorRT and run it using fp32 (building the engine for the first time can take several minutes):" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!nvidia-docker exec -it JasperTRT python trt/perf.py --ckpt_path /checkpoints/jasper_fp16.pt --wav=keynote.wav --model_toml=configs/jasper10x5dr_nomask.toml --make_onnx --onnx_path jasper.onnx --engine_path jasper.plan" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you already have the engine file (jasper.plan), to run an existing engine file of TensorRT using fp32: " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!nvidia-docker exec -it JasperTRT python trt/perf.py --wav=keynote.wav --model_toml=configs/jasper10x5dr_nomask.toml --use_existing_engine --engine_path jasper.plan --trt_fp16" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To run inference of the input audio file using automatic mixed precision, add the argument `--trt_fp16`. Using automatic mixed precision, the inference time can be reduced efficiently compared to that of using fp32 (building the engine for the first time can take several minutes):" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!nvidia-docker exec -it JasperTRT python trt/perf.py --ckpt_path /checkpoints/jasper_fp16.pt --wav=keynote.wav --model_toml=configs/jasper10x5dr_nomask.toml --make_onnx --onnx_path jasper.onnx --engine_path jasper_fp16.plan --trt_fp16" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you already have the engine file (jasper_fp16.plan), to run an existing engine file of TensorRT using automatic mixed precision: " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!nvidia-docker exec -it JasperTRT python trt/perf.py --wav=keynote.wav --model_toml=configs/jasper10x5dr_nomask.toml --use_existing_engine --engine_path jasper_fp16.plan --trt_fp16" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can input your own audio file and generate the output text file using this way.\n", + "\n", + "For more information about TensorRT and building an engine file in Python, please see: https://docs.nvidia.com/deeplearning/sdk/tensorrt-developer-guide/index.html#python_topics" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#stop your container in the end\n", + "!docker stop JasperTRT" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 7. What's next" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now you are familiar with running Jasper inference with TensorRT, using automatic mixed precision, you may want to play with your own dataset, or train the model using your own dataset. For information on training, please see our Github repo: https://github.com/NVIDIA/DeepLearningExamples/tree/master/PyTorch/SpeechRecognition/Jasper" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/PyTorch/SpeechRecognition/Jasper/notebooks/README.md b/PyTorch/SpeechRecognition/Jasper/notebooks/README.md new file mode 100644 index 00000000..9d0eca87 --- /dev/null +++ b/PyTorch/SpeechRecognition/Jasper/notebooks/README.md @@ -0,0 +1,57 @@ +## Overview + +This notebook provides scripts for you to run Jasper with TRT for inference step by step. You can run inference using either LibriSpeech dataset or your own audio input in .wav format, to generate the corresponding text file for the audio file. + +## Requirements + +This repository contains a Dockerfile which extends the PyTorch 19.09-py3 NGC container and encapsulates some dependencies. Aside from these dependencies, ensure you have the following components: + +* [NVIDIA Docker](https://github.com/NVIDIA/nvidia-docker) +* [PyTorch 19.09-py3 NGC container](https://ngc.nvidia.com/catalog/containers/nvidia:pytorch) +* [NVIDIA Turing](https://www.nvidia.com/en-us/geforce/turing/) or [Volta](https://www.nvidia.com/en-us/data-center/volta-gpu-architecture/) based GPU +* [Pretrained Jasper Model Checkpoint](https://ngc.nvidia.com/catalog/models/nvidia:jasperpyt_fp16) + +## Quick Start Guide + +Running the following scripts will build and launch the container containing all required dependencies for both TensorRT as well as native PyTorch. This is necessary for using inference with TensorRT and can also be used for data download, processing and training of the model. + +1. Clone the repository. + +```bash +git clone https://github.com/NVIDIA/DeepLearningExamples +cd DeepLearningExamples/PyTorch/SpeechRecognition/Jasper +``` +2. Build the Jasper PyTorch with TRT 6 container: + +```bash +bash trt/scripts/docker/trt_build.sh +``` +3. Prepare to start a detached session in the NGC container +Create three directories on your local machine for dataset, checkpoint, and result, respectively, naming "data" "checkpoint" "result": + +```bash +mkdir data checkpoint result +``` +Download the checkpoint file `jasperpyt_fp16` to the directory `checkpoint` from NGC Model Repository: https://ngc.nvidia.com/catalog/models/nvidia:jasperpyt_fp16 +Assume you will download the dataset to /dev/sdb and mount the data on /dev/sdb to "data", please replace "/dev/sdb" with your own directories if you use other directories: + +```bash +sudo mount /dev/sdb data +``` +The Jasper PyTorch container will be launched in the Jupyter notebook. Within the container, the contents of the root repository will be copied to the /workspace/jasper directory. The /datasets, /checkpoints, /results directories are mounted as volumes and mapped to the corresponding directories "data" "checkpoint" "result" on the host. +For running the notebook on your local machine, run: + +```bash +jupyter notebook notebooks/JasperTRT.ipynb +``` +For running the notebook on another machine remotely, run: + +```bash +jupyter notebook --ip=0.0.0.0 --allow-root +``` +And navigate a web browser to the IP address or hostname of the host machine at port 8888: http://[host machine]:8888 + +Use the token listed in the output from running the jupyter command to log in, for example: http://[host machine]:8888/?token=aae96ae9387cd28151868fee318c3b3581a2d794f3b25c6b + + + diff --git a/PyTorch/SpeechRecognition/Jasper/notebooks/keynote.wav b/PyTorch/SpeechRecognition/Jasper/notebooks/keynote.wav new file mode 100755 index 0000000000000000000000000000000000000000..39d444f82aac6a2e1477a7b8b23fc1174354b93d GIT binary patch literal 203598 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%0A=n$OiE%V|NE_GXhI6Rb~I5i#A| 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 sg`%Q_V21o}Ha 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