diff --git a/README.md b/README.md index a9e164e6..05e2c2b8 100644 --- a/README.md +++ b/README.md @@ -16,17 +16,17 @@ Below shows the generation speed gain by using FastSeq. | Model | W/O FastSeq (in samples/s) | W/ FastSeq (in samples/s) | Speedup | |------------------|:--------------------------:|:-------------------------:|:-----:| -| [ProphetNet](examples/prophetnet/README.md) | 2.8 | 10.7 | 3.8x | -| [Bart (`fs`)](examples/bart/README.md) | 2.4 | 25.3 | 10.5x | +| [ProphetNet](examples/prophetnet/README.md) | 2.8 | 11.9 | 4.3 | +| [Bart (`fs`)](examples/bart/README.md) | 3.3 | 25.1 | 7.7x | | [Bart (`hf`)](examples/bart/README.md#speedup-bart-huggingface-transformers-version-by-using-fastseq) | 2.5 | 12.4 | 5.0x | | [DistilBart (`hf`)](examples/distilbart/README.md) | 3.4 | 18.5 | 5.4x | | [T5 (`hf`)](examples/t5/README.md) | 8.7 | 31.3 | 3.6x | -| [WMT16 En-De (`fs`)](examples/wmt/README.md) | 96.0 | 417.0 | 4.3x | +| [WMT16 En-De (`fs`)](examples/wmt/README.md) | 144.5 | 422.8 | 2.9x | | [GPT2 (`hf`)](examples/gpt2/README.md) | 3.0 | 16.7 | 5.5x | | [UniLM (`hf`)](examples/unilm/README.md) | 1.7 | 16.4 | 9.6x | - All benchmarking experiments run on NVIDIA-V100-16GB with [docker](docker/Dockerfile). Highest speed recorded for each model by tuning batch size. For parameter setting details, click link of corresponding model. -- `fs` stands for [Fairseq](https://github.com/pytorch/fairseq) 0.9.0 version, `hf` stands for [Huggingface Transformers](https://github.com/huggingface/transformers) 3.0.2 version. +- `fs` stands for [Fairseq](https://github.com/pytorch/fairseq) 0.10.2 version, `hf` stands for [Huggingface Transformers](https://github.com/huggingface/transformers) 3.0.2 version. - Optimizations were automatically applied to all generation/sequence models in Fairseq & Huggingface Transformers. Above only lists a subset of them. ## How it works? diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 4d2f604a..9918cef0 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -15,13 +15,29 @@ jobs: demands: - agent.name -equals gpu3 container: - image: adsbrainwestus2.azurecr.io/fastseq:dev-py3 + image: adsbrainwestus2.azurecr.io/fastseq:dev-py3 endpoint: fastseq-acr options: --gpus device=3 steps: - script: | #install fastseq - pip install --editable .[transformers,fairseq] + which pip + which python + + echo "******* Installing fairseq *******" + pip install fairseq==0.10.2 + pip show fairseq + + echo "******* Installing transformers *******" + pip install transformers + pip show transformers + + echo "******* Installing fastseq *******" + pip install --editable . + pip show fastseq + + echo "******* Adding local bin to path *******" + export PATH="$HOME/bin:$HOME/.local/bin:$PATH" echo "******* Running fastseq unittests *******" pip install pytorch-transformers==1.0.0 diff --git a/benchmarks/benchmark_fs.sh b/benchmarks/benchmark_fs.sh index 237ead50..4f0e1795 100755 --- a/benchmarks/benchmark_fs.sh +++ b/benchmarks/benchmark_fs.sh @@ -112,6 +112,7 @@ for bs in "${bs_list[@]}"; do --no-repeat-ngram-size 3 \ --lenpen 2.0 \ --use-el-attn \ + --required-seq-len-multiple 8 \ `#--print-alignment` \ `#--print-step # KeyError: steps` \ --skip-invalid-size-inputs-valid-test $* \ @@ -132,6 +133,7 @@ for bs in "${bs_list[@]}"; do --max-len-b 140 \ --no-repeat-ngram-size 3 \ --lenpen 2.0 \ + --required-seq-len-multiple 8 \ `#--print-alignment` \ `#--print-step # KeyError: steps` \ --skip-invalid-size-inputs-valid-test $* \ @@ -140,7 +142,7 @@ for bs in "${bs_list[@]}"; do ret=$? end=`date +%s` runtime=$(($end-$start)) - tail=`tail -2 $STDOUT_FILE` + tail=`tail -3 $STDOUT_FILE` if [[ $ret -eq 0 && $tail == *$mark1* ]]; then samples=`echo $tail | sed 's/.*Translated \([0-9]*\) sentences.*/\1/'` tokens=`echo $tail | sed 's/.*Translated .* sentences (\([0-9]*\) tokens).*/\1/'` diff --git a/benchmarks/models/fs_bart.sh b/benchmarks/models/fs_bart.sh index a11f84ca..d1f76bac 100755 --- a/benchmarks/models/fs_bart.sh +++ b/benchmarks/models/fs_bart.sh @@ -34,21 +34,21 @@ grep "bart.large.cnn cnn_dm/len-1024.bin valid " perf \ | awk '{if($8!="NA"){c+=1;s+=$8}}END{print s/c}' \ | ./range.sh 17.9 18 # Speed on V100 16GB 250W -grep -E "fairseq_v0.9.0 bart.large.cnn cnn_dm/len-1024.bin valid 32 " perf \ +grep -E "fairseq_v0.10.2 bart.large.cnn cnn_dm/len-1024.bin valid 32 " perf \ | awk '{s+=$13}END{if(NR==0) print -1; else print s/NR}' \ - | ./range.sh 2.1 2.7 -grep -E "fairseq_v0.9.0\+fastseq_v.* bart.large.cnn cnn_dm/len-1024.bin valid 32 " perf \ + | ./range.sh 3.1 3.7 +grep -E "fairseq_v0.10.2\+fastseq_v.* bart.large.cnn cnn_dm/len-1024.bin valid 32 " perf \ | awk '{s+=$13}END{print s/NR}' \ | ./range.sh 7.8 100 -grep -E "fairseq_v0.9.0\+fastseq_v.* bart.large.cnn cnn_dm/len-1024.bin valid 64 " perf \ +grep -E "fairseq_v0.10.2\+fastseq_v.* bart.large.cnn cnn_dm/len-1024.bin valid 64 " perf \ | awk '{s+=$13}END{print s/NR}' \ | ./range.sh 13.0 100 -grep -E "fairseq_v0.9.0\+fastseq_v.* bart.large.cnn cnn_dm/len-1024.bin valid 128 " perf \ +grep -E "fairseq_v0.10.2\+fastseq_v.* bart.large.cnn cnn_dm/len-1024.bin valid 128 " perf \ | awk '{s+=$13}END{print s/NR}' \ | ./range.sh 18.1 100 -grep -E "fairseq_v0.9.0\+fastseq_v.* bart.large.cnn cnn_dm/len-1024.bin valid 256 " perf \ +grep -E "fairseq_v0.10.2\+fastseq_v.* bart.large.cnn cnn_dm/len-1024.bin valid 256 " perf \ | awk '{s+=$13}END{print s/NR}' \ | ./range.sh 19 100 -grep -E "fairseq_v0.9.0\+fastseq_v.* bart.large.cnn cnn_dm/len-1024.bin valid 320 " perf \ +grep -E "fairseq_v0.10.2\+fastseq_v.* bart.large.cnn cnn_dm/len-1024.bin valid 320 " perf \ | awk '{s+=$13}END{print s/NR}' \ - | ./range.sh 25 100 + | ./range.sh 24.5 100 diff --git a/benchmarks/models/fs_prophetnet.sh b/benchmarks/models/fs_prophetnet.sh index fec6159b..70291193 100755 --- a/benchmarks/models/fs_prophetnet.sh +++ b/benchmarks/models/fs_prophetnet.sh @@ -8,19 +8,20 @@ # source utils.sh +# TODO: update when ProphetNet is compatible with fairseq 0.10.2 # Download ProphetNet repo as the baseline if it does not exist -prophetnet_repo_path=$CACHE_DIR/ProphetNet -git_clone_if_not_in_cache \ - https://github.com/microsoft/ProphetNet.git \ - $prophetnet_repo_path - -./benchmark.sh \ - fairseq \ - prophetnet_large_160G_cnndm_model \ - cnn_dm_bert/len-512.bin \ - valid \ - 64 \ - --user-dir $prophetnet_repo_path/src/prophetnet/ +# prophetnet_repo_path=$CACHE_DIR/ProphetNet +# git_clone_if_not_in_cache \ +# https://github.com/microsoft/ProphetNet.git \ +# $prophetnet_repo_path +# +# ./benchmark.sh \ +# fairseq \ +# prophetnet_large_160G_cnndm_model \ +# cnn_dm_bert/len-512.bin \ +# valid \ +# 64 \ +# --user-dir $prophetnet_repo_path/src/prophetnet/ ./benchmark.sh \ fairseq+fastseq \ prophetnet_large_160G_cnndm_model \ @@ -33,18 +34,19 @@ grep "prophetnet_large_160G_cnndm_model cnn_dm_bert/len-512.bin valid" perf \ | awk '{if($8!="NA"){c+=1;s+=$8}}END{print s/c}' \ | ./range.sh 19.1 19.2 # # Speed on V100 16GB 250W -grep -E "fairseq_v0.9.0 prophetnet_large_160G_cnndm_model cnn_dm_bert/len-512.bin valid 32 " perf \ - | awk '{s+=$13}END{if(NR==0) print -1; else print s/NR}' \ - | ./range.sh 2 3 -grep -E "fairseq_v0.9.0 prophetnet_large_160G_cnndm_model cnn_dm_bert/len-512.bin valid 64 " perf \ - | awk '{s+=$13}END{if(NR==0) print -1; else print s/NR}' \ - | ./range.sh 2 3 -grep -E "fairseq_v0.9.0\+fastseq_v.* prophetnet_large_160G_cnndm_model cnn_dm_bert/len-512.bin valid 32 " perf \ +# TODO: update when ProphetNet is compatible with fairseq 0.10.2 +# grep -E "fairseq_v0.10.2 prophetnet_large_160G_cnndm_model cnn_dm_bert/len-512.bin valid 32 " perf \ +# | awk '{s+=$13}END{if(NR==0) print -1; else print s/NR}' \ +# | ./range.sh 2 3 +# grep -E "fairseq_v0.10.2 prophetnet_large_160G_cnndm_model cnn_dm_bert/len-512.bin valid 64 " perf \ +# | awk '{s+=$13}END{if(NR==0) print -1; else print s/NR}' \ +# | ./range.sh 2 3 +grep -E "fairseq_v0.10.2\+fastseq_v.* prophetnet_large_160G_cnndm_model cnn_dm_bert/len-512.bin valid 32 " perf \ | awk '{s+=$13}END{if(NR==0) print -1; else print s/NR}' \ | ./range.sh 5.7 6.5 -grep -E "fairseq_v0.9.0\+fastseq_v.* prophetnet_large_160G_cnndm_model cnn_dm_bert/len-512.bin valid 64 " perf \ +grep -E "fairseq_v0.10.2\+fastseq_v.* prophetnet_large_160G_cnndm_model cnn_dm_bert/len-512.bin valid 64 " perf \ | awk '{s+=$13}END{print s/NR}' \ - | ./range.sh 7.5 10 -grep -E "fairseq_v0.9.0\+fastseq_v.* prophetnet_large_160G_cnndm_model cnn_dm_bert/len-512.bin valid 128 " perf \ + | ./range.sh 8 10.5 +grep -E "fairseq_v0.10.2\+fastseq_v.* prophetnet_large_160G_cnndm_model cnn_dm_bert/len-512.bin valid 128 " perf \ | awk '{s+=$13}END{print s/NR}'\ | ./range.sh 10 15 diff --git a/benchmarks/models/fs_wmt.sh b/benchmarks/models/fs_wmt.sh index 8f4ca628..abf20037 100755 --- a/benchmarks/models/fs_wmt.sh +++ b/benchmarks/models/fs_wmt.sh @@ -27,15 +27,15 @@ grep " wmt16.en.de.32k wmt16_en_de_bpe32k/bin valid " perf \ | awk '{if($8!="NA"){c+=1;s+=$8}}END{print s/c}' \ | ./range.sh 0.05 0.07 # Speed on V100 16GB 250W -grep -E "fairseq_v0.9.0 wmt16.en.de.32k wmt16_en_de_bpe32k/bin valid 256 " perf \ +grep -E "fairseq_v0.10.2 wmt16.en.de.32k wmt16_en_de_bpe32k/bin valid 256 " perf \ | awk '{s+=$13}END{if(NR==0) print -1; else print s/NR}' \ - | ./range.sh 93 100 -grep -E "fairseq_v0.9.0\+fastseq_v.* wmt16.en.de.32k wmt16_en_de_bpe32k/bin valid 256 " perf \ + | ./range.sh 100 150 +grep -E "fairseq_v0.10.2\+fastseq_v.* wmt16.en.de.32k wmt16_en_de_bpe32k/bin valid 256 " perf \ | awk '{s+=$13}END{print s/NR}' \ | ./range.sh 350 1000 -grep -E "fairseq_v0.9.0\+fastseq_v.* wmt16.en.de.32k wmt16_en_de_bpe32k/bin valid 512 " perf \ +grep -E "fairseq_v0.10.2\+fastseq_v.* wmt16.en.de.32k wmt16_en_de_bpe32k/bin valid 512 " perf \ | awk '{s+=$13}END{print s/NR}' \ | ./range.sh 390 1000 -grep -E "fairseq_v0.9.0\+fastseq_v.* wmt16.en.de.32k wmt16_en_de_bpe32k/bin valid 1024 " perf \ +grep -E "fairseq_v0.10.2\+fastseq_v.* wmt16.en.de.32k wmt16_en_de_bpe32k/bin valid 1024 " perf \ | awk '{s+=$13}END{print s/NR}' \ | ./range.sh 405 1000 diff --git a/docker/Dockerfile b/docker/Dockerfile index b46b5465..0c5ab6bb 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -49,7 +49,7 @@ RUN pip install --upgrade pip && \ pip install requests>=v2.24.0 && \ pip install gitpython>=v3.1.7 && \ pip install rouge_score==v0.0.4 && \ - pip install fairseq==v0.9.0 && \ + pip install fairseq==v0.10.2 && \ pip install transformers==v3.0.2 && \ pip install pytorch-transformers==1.0.0 diff --git a/examples/EL-attention/EL_attention_Demo.ipynb b/examples/EL-attention/EL_attention_Demo.ipynb index ee2faf98..efba7d2a 100644 --- a/examples/EL-attention/EL_attention_Demo.ipynb +++ b/examples/EL-attention/EL_attention_Demo.ipynb @@ -1,38 +1,18 @@ { - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "name": "EL-attention_Demo.ipynb", - "provenance": [], - "collapsed_sections": [], - "toc_visible": true - }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" - }, - "language_info": { - "name": "python" - }, - "accelerator": "GPU" - }, "cells": [ { "cell_type": "code", + "execution_count": 1, "metadata": { - "id": "9xZnWgQ1o7yW", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "9xZnWgQ1o7yW", "outputId": "fb630728-01e2-4cbc-c509-4874c97d8d94" }, - "source": [ - "!nvidia-smi" - ], - "execution_count": 1, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "Tue May 25 01:05:18 2021 \n", @@ -55,9 +35,11 @@ "|=============================================================================|\n", "| No running processes found |\n", "+-----------------------------------------------------------------------------+\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "!nvidia-smi" ] }, { @@ -71,6 +53,7 @@ }, { "cell_type": "code", + "execution_count": 2, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -78,17 +61,9 @@ "id": "ipS-Ptqupa1X", "outputId": "d7cd49e3-4183-40b2-fcbc-35706a606c93" }, - "source": [ - "!pip install fairseq==v0.9.0\n", - "!pip install git+https://github.com/microsoft/fastseq.git\n", - "\n", - "#!git clone https://github.com/NVIDIA/apex\n", - "#!sed -i 's/if (bare_metal_major != torch_binary_major) or (bare_metal_minor != torch_binary_minor):/if False:/' ./apex/setup.py\n", - "#!pip install -v --no-cache-dir --global-option=\"--cpp_ext\" --global-option=\"--cuda_ext\" ./apex" - ], - "execution_count": 2, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "Collecting fairseq==v0.9.0\n", @@ -161,13 +136,21 @@ "\u001b[31mERROR: botocore 1.20.79 has requirement urllib3<1.27,>=1.25.4, but you'll have urllib3 1.24.3 which is incompatible.\u001b[0m\n", "Installing collected packages: rouge-score, sentencepiece, jmespath, botocore, s3transfer, boto3, pytorch-transformers, fastseq\n", "Successfully installed boto3-1.17.79 botocore-1.20.79 fastseq-0.0.4 jmespath-0.10.0 pytorch-transformers-1.0.0 rouge-score-0.0.4 s3transfer-0.4.2 sentencepiece-0.1.95\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "!pip install fairseq==v0.10.2\n", + "!pip install git+https://github.com/microsoft/fastseq.git\n", + "\n", + "#!git clone https://github.com/NVIDIA/apex\n", + "#!sed -i 's/if (bare_metal_major != torch_binary_major) or (bare_metal_minor != torch_binary_minor):/if False:/' ./apex/setup.py\n", + "#!pip install -v --no-cache-dir --global-option=\"--cpp_ext\" --global-option=\"--cuda_ext\" ./apex" ] }, { "cell_type": "code", + "execution_count": 3, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -175,23 +158,9 @@ "id": "nsnnkjHV4VHq", "outputId": "751fe3ec-cf88-4861-8734-3c5b358d34b4" }, - "source": [ - "!mkdir -p data\n", - "!wget https://fastseq.blob.core.windows.net/data/tasks/cnn_dm/for_bart/test.source -P data/\n", - "!wget https://fastseq.blob.core.windows.net/data/tasks/cnn_dm/for_bart/test.target -P data/\n", - "\n", - "!mkdir -p data/bin\n", - "!wget https://fastseq.blob.core.windows.net/data/tasks/cnn_dm/len-1024.bin/test.source-target.source.bin -P data/bin/\n", - "!wget https://fastseq.blob.core.windows.net/data/tasks/cnn_dm/len-1024.bin/test.source-target.source.idx -P data/bin/\n", - "!wget https://fastseq.blob.core.windows.net/data/tasks/cnn_dm/len-1024.bin/test.source-target.target.bin -P data/bin/\n", - "!wget https://fastseq.blob.core.windows.net/data/tasks/cnn_dm/len-1024.bin/test.source-target.target.idx -P data/bin/\n", - "\n", - "!wget https://fastseq.blob.core.windows.net/data/tasks/cnn_dm/len-1024.bin/dict.source.txt -P data/bin/\n", - "!wget https://fastseq.blob.core.windows.net/data/tasks/cnn_dm/len-1024.bin/dict.target.txt -P data/bin/\n" - ], - "execution_count": 3, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "--2021-05-25 01:07:00-- https://fastseq.blob.core.windows.net/data/tasks/cnn_dm/for_bart/test.source\n", @@ -282,27 +251,37 @@ "\n", "2021-05-25 01:07:09 (1.53 MB/s) - ‘data/bin/dict.target.txt’ saved [603290/603290]\n", "\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "!mkdir -p data\n", + "!wget https://fastseq.blob.core.windows.net/data/tasks/cnn_dm/for_bart/test.source -P data/\n", + "!wget https://fastseq.blob.core.windows.net/data/tasks/cnn_dm/for_bart/test.target -P data/\n", + "\n", + "!mkdir -p data/bin\n", + "!wget https://fastseq.blob.core.windows.net/data/tasks/cnn_dm/len-1024.bin/test.source-target.source.bin -P data/bin/\n", + "!wget https://fastseq.blob.core.windows.net/data/tasks/cnn_dm/len-1024.bin/test.source-target.source.idx -P data/bin/\n", + "!wget https://fastseq.blob.core.windows.net/data/tasks/cnn_dm/len-1024.bin/test.source-target.target.bin -P data/bin/\n", + "!wget https://fastseq.blob.core.windows.net/data/tasks/cnn_dm/len-1024.bin/test.source-target.target.idx -P data/bin/\n", + "\n", + "!wget https://fastseq.blob.core.windows.net/data/tasks/cnn_dm/len-1024.bin/dict.source.txt -P data/bin/\n", + "!wget https://fastseq.blob.core.windows.net/data/tasks/cnn_dm/len-1024.bin/dict.target.txt -P data/bin/\n" ] }, { "cell_type": "code", + "execution_count": 4, "metadata": { - "id": "KJ40BxorphD2", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "KJ40BxorphD2", "outputId": "6720f603-f167-4e9c-9bc6-7b709105939e" }, - "source": [ - "!wget 'https://dl.fbaipublicfiles.com/fairseq/models/bart.large.cnn.tar.gz'\n", - "!tar xvzf 'bart.large.cnn.tar.gz'" - ], - "execution_count": 4, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "--2021-05-25 01:07:09-- https://dl.fbaipublicfiles.com/fairseq/models/bart.large.cnn.tar.gz\n", @@ -321,9 +300,12 @@ "bart.large.cnn/model.pt\n", "bart.large.cnn/dict.source.txt\n", "bart.large.cnn/dict.target.txt\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "!wget 'https://dl.fbaipublicfiles.com/fairseq/models/bart.large.cnn.tar.gz'\n", + "!tar xvzf 'bart.large.cnn.tar.gz'" ] }, { @@ -346,6 +328,7 @@ }, { "cell_type": "code", + "execution_count": 5, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -353,14 +336,9 @@ "id": "hZs68SvhVD7p", "outputId": "65f1af03-6806-46bf-dec1-71c79095c002" }, - "source": [ - "!time fastseq-generate-for-fairseq data/bin/ --path bart.large.cnn/model.pt --use-el-attn --fp16 --task translation --batch-size 256 --gen-subset test --truncate-source --bpe gpt2 --beam 4 --min-len 55 --max-len-b 140 --no-repeat-ngram-size 3 --lenpen 2.0 --skip-invalid-size-inputs-valid-test > bart.el-attention_256.txt\n", - "# uncomment above line to run\n", - "# Expected time: (real\t24m23.314s for inference on T5 in colab)" - ], - "execution_count": 5, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "WARNING 2021-05-25 01:11:15,116 /usr/local/lib/python3.7/dist-packages/fastseq/models/__init__.py:17] transformers can not be imported.\n", @@ -375,9 +353,13 @@ "real\t25m19.342s\n", "user\t29m29.255s\n", "sys\t0m26.392s\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "!time fastseq-generate-for-fairseq data/bin/ --path bart.large.cnn/model.pt --use-el-attn --fp16 --task translation --batch-size 256 --gen-subset test --truncate-source --bpe gpt2 --beam 4 --min-len 55 --max-len-b 140 --no-repeat-ngram-size 3 --lenpen 2.0 --skip-invalid-size-inputs-valid-test > bart.el-attention_256.txt\n", + "# uncomment above line to run\n", + "# Expected time: (real\t24m23.314s for inference on T5 in colab)" ] }, { @@ -391,28 +373,27 @@ }, { "cell_type": "code", + "execution_count": 6, "metadata": { "id": "LVHnPI7CVNdZ" }, + "outputs": [], "source": [ "# !time fairseq-generate data/bin/ --path bart.large.cnn/model.pt --fp16 --task translation --batch-size 32 --gen-subset test --truncate-source --bpe gpt2 --beam 4 --min-len 55 --max-len-b 140 --no-repeat-ngram-size 3 --lenpen 2.0 --skip-invalid-size-inputs-valid-test > bart.multihead-attention_32.txt\n", "# uncomment above line to run\n", "# fairseq 0.9.0 is compariable with Pytorch 1.6, but in colab its version is 1.8.1" - ], - "execution_count": 6, - "outputs": [] + ] }, { "cell_type": "markdown", "metadata": { "id": "sCfbk3wuhtYO" }, - "source": [ - "" - ] + "source": [] }, { "cell_type": "code", + "execution_count": 7, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -420,23 +401,23 @@ "id": "xuXz8Zzwhs2u", "outputId": "2e9a521f-eae5-487c-cc44-3a76ca8d2c4f" }, - "source": [ - "!ls " - ], - "execution_count": 7, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "bart.el-attention_256.txt bart.large.cnn.tar.gz sample_data\n", "bart.large.cnn\t\t data\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "!ls " ] }, { "cell_type": "code", + "execution_count": 8, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -444,25 +425,24 @@ "id": "8xpZw27qjkoe", "outputId": "8182ebeb-6e08-4be2-a846-fb9bde932152" }, - "source": [ - "!echo 'Inference speed when using el attention'\n", - "!tail -n 2 bart.el-attention_256.txt\n", - "\n", - "!echo 'Inference speed when using multihead attention'\n", - "#!tail -n 2 bart.multihead-attention_32.txt" - ], - "execution_count": 8, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "Inference speed when using el attention\n", "| Translated 11490 sentences (944820 tokens) in 1472.9s (7.80 sentences/s, 641.48 tokens/s)\n", "| Generate test with beam=4: BLEU4 = 17.18, 36.9/19.4/13.1/9.3 (BP=1.000, ratio=1.203, syslen=933330, reflen=776133)\n", "Inference speed when using multihead attention\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "!echo 'Inference speed when using el attention'\n", + "!tail -n 2 bart.el-attention_256.txt\n", + "\n", + "!echo 'Inference speed when using multihead attention'\n", + "#!tail -n 2 bart.multihead-attention_32.txt" ] }, { @@ -496,6 +476,7 @@ }, { "cell_type": "code", + "execution_count": 9, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -503,12 +484,9 @@ "id": "idZceGNOz5tF", "outputId": "081e2af7-4957-42cf-9660-3679de16a832" }, - "source": [ - "!wget https://raw.githubusercontent.com/microsoft/fastseq/EL-attention-doc/examples/EL-attention/summarize.py" - ], - "execution_count": 9, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "--2021-05-25 01:36:33-- https://raw.githubusercontent.com/microsoft/fastseq/EL-attention-doc/examples/EL-attention/summarize.py\n", @@ -522,13 +500,16 @@ "\n", "2021-05-25 01:36:33 (63.8 MB/s) - ‘summarize.py’ saved [3840/3840]\n", "\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "!wget https://raw.githubusercontent.com/microsoft/fastseq/EL-attention-doc/examples/EL-attention/summarize.py" ] }, { "cell_type": "code", + "execution_count": 10, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -536,21 +517,9 @@ "id": "FsuvH58auvsk", "outputId": "049fa56a-8921-4df6-ca84-8f4c3d7184c6" }, - "source": [ - "!time python summarize.py \\\n", - " --model-dir bart.large.cnn/ \\\n", - " --model-file model.pt \\\n", - " --src data/test.source \\\n", - " --bsz 320 \\\n", - " --out 320_test.hypo \\\n", - " --use-el-attn \\\n", - " --n 3200\n", - "\n", - " # Expected time: (real\t7m36.176s for inference 3200 samples on T5 in colab)" - ], - "execution_count": 10, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "WARNING 2021-05-25 01:36:34,967 /usr/local/lib/python3.7/dist-packages/fastseq/models/__init__.py:17] transformers can not be imported.\n", @@ -579,13 +548,25 @@ "real\t9m49.515s\n", "user\t7m50.919s\n", "sys\t0m8.170s\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "!time python summarize.py \\\n", + " --model-dir bart.large.cnn/ \\\n", + " --model-file model.pt \\\n", + " --src data/test.source \\\n", + " --bsz 320 \\\n", + " --out 320_test.hypo \\\n", + " --use-el-attn \\\n", + " --n 3200\n", + "\n", + " # Expected time: (real\t7m36.176s for inference 3200 samples on T5 in colab)" ] }, { "cell_type": "code", + "execution_count": 11, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -593,12 +574,9 @@ "id": "8wWy6E7410Zt", "outputId": "3bcd0637-f5bf-466f-ebe0-f926e1a2e38f" }, - "source": [ - "!head 320_test.hypo" - ], - "execution_count": 11, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "A French prosecutor says he is not aware of any video footage from on board the plane. German daily Bild and Paris Match claim to have found a cell phone video of the crash. A French Gendarmerie spokesman calls the reports \"completely wrong\" and \"unwarranted\" German airline Lufthansa says co-pilot Andreas Lubitz battled depression years before he took controls.\n", @@ -611,22 +589,24 @@ "Theia, a one-year-old bully breed mix, was hit by a car and buried in a field. She managed to stagger to a nearby farm, dirt-covered and emaciated. She suffered a dislocated jaw, leg injuries and a caved-in sinus cavity. A fundraising page has raised more than $10,000 for her care.\n", "Mohammad Javad Zarif is the Iranian foreign minister. He has been John Kerry's opposite number in securing a breakthrough in nuclear talks. He received a hero's welcome as he arrived in Iran on a sunny Friday morning. But there are some facts about Zarif that are less well-known.\n", "Bob Barker returned to \"The Price Is Right\" for the first time in eight years. The 91-year-old hosted the show for 35 years before stepping down in 2007. He handled the first price-guessing game, the classic \"Lucky Seven,\" before turning hosting duties over to Drew Carey.\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "!head 320_test.hypo" ] }, { "cell_type": "code", + "execution_count": 12, "metadata": { "id": "nmfO-Pj-7sYa" }, + "outputs": [], "source": [ "!cp 320_test.hypo test.hypo\n", "!cp data/test.target test.target" - ], - "execution_count": 12, - "outputs": [] + ] }, { "cell_type": "markdown", @@ -648,6 +628,7 @@ }, { "cell_type": "code", + "execution_count": 13, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -655,18 +636,9 @@ "id": "D4YkacBQyyke", "outputId": "81b3db13-85e7-4d7b-9aaa-54fbd09e2ded" }, - "source": [ - "!export CLASSPATH=/path/to/stanford-corenlp-full-2016-10-31/stanford-corenlp-3.7.0.jar\n", - "\n", - "# Tokenize hypothesis and target files.\n", - "!cat test.hypo | java edu.stanford.nlp.process.PTBTokenizer -ioFileList -preserveLines > test.hypo.tokenized\n", - "!cat test.target | java edu.stanford.nlp.process.PTBTokenizer -ioFileList -preserveLines > test.hypo.target\n", - "!files2rouge test.hypo.tokenized test.hypo.target\n", - "# Expected output: (ROUGE-2 Average_F: 0.21227)" - ], - "execution_count": 13, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ "Error: Could not find or load main class edu.stanford.nlp.process.PTBTokenizer\n", @@ -674,21 +646,45 @@ "Error: Could not find or load main class edu.stanford.nlp.process.PTBTokenizer\n", "Caused by: java.lang.ClassNotFoundException: edu.stanford.nlp.process.PTBTokenizer\n", "/bin/bash: files2rouge: command not found\n" - ], - "name": "stdout" + ] } + ], + "source": [ + "!export CLASSPATH=/path/to/stanford-corenlp-full-2016-10-31/stanford-corenlp-3.7.0.jar\n", + "\n", + "# Tokenize hypothesis and target files.\n", + "!cat test.hypo | java edu.stanford.nlp.process.PTBTokenizer -ioFileList -preserveLines > test.hypo.tokenized\n", + "!cat test.target | java edu.stanford.nlp.process.PTBTokenizer -ioFileList -preserveLines > test.hypo.target\n", + "!files2rouge test.hypo.tokenized test.hypo.target\n", + "# Expected output: (ROUGE-2 Average_F: 0.21227)" ] }, { "cell_type": "code", + "execution_count": 13, "metadata": { "id": "5TfX3oz97yC_" }, - "source": [ - "" - ], - "execution_count": 13, - "outputs": [] + "outputs": [], + "source": [] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "collapsed_sections": [], + "name": "EL-attention_Demo.ipynb", + "provenance": [], + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" } - ] -} \ No newline at end of file + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/examples/bart/README.md b/examples/bart/README.md index 27e415cc..a1008d9f 100644 --- a/examples/bart/README.md +++ b/examples/bart/README.md @@ -12,8 +12,8 @@ BART is sequence-to-sequence model trained with denoising as pretraining objecti | BatchSize | 32 | 64 | 128 | 320 | |:----------------:|:-------------:|:---------------:|:--------------:|:--------------:| - | fairseq-0.9.0 | 2.4 samples/s | OOM | OOM | OOM | - | above + fastseq | 8.1 samples/s | 13.3 samples/s | 18.4 samples/s | 25.3 samples/s | + | fairseq-0.10.2 | 3.3 samples/s | OOM | OOM | OOM | + | above + fastseq | 10.7 samples/s | 17.1 samples/s | 21.8 samples/s | 25.1 samples/s | ### Model diff --git a/examples/prophetnet/README.md b/examples/prophetnet/README.md index df65e7aa..996f225f 100644 --- a/examples/prophetnet/README.md +++ b/examples/prophetnet/README.md @@ -10,8 +10,8 @@ A pre-trained language model for sequence-to-sequence learning with a novel self | BatchSize | 32 | 64 | 128 | |:--------------------:|:-------------:|:---------------:|:--------------:| - | prophetnet | 2.4 samples/s | 2.8 samples/s | OOM | - | above + fastseq | 6.0 samples/s | 7.6 samples/s | 10.7 samples/s | + | prophetnet (fs 0.9.0) | 2.4 samples/s | 2.8 samples/s | OOM | + | above + fastseq | 6.1 samples/s | 9.1 samples/s | 11.9 samples/s | ### Model diff --git a/examples/wmt/README.md b/examples/wmt/README.md index 55bd3e71..958d0f05 100644 --- a/examples/wmt/README.md +++ b/examples/wmt/README.md @@ -7,8 +7,8 @@ https://arxiv.org/abs/1806.00187 | BatchSize | 256 | 512 | 1024 | |:----------------:|:--------------:|:--------------:|:--------------:| - | fairseq-0.9.0 | 96 samples/s | OOM | OOM | - | above + fastseq | 350 samples/s | 400 samples/s | 417 samples/s | + | fairseq-0.10.2 | 144.5 samples/s | OOM | OOM | + | above + fastseq | 364.1 samples/s | 402.1 samples/s | 422.8 samples/s | ### Training a new model on WMT'16 En-De diff --git a/fastseq/config.py b/fastseq/config.py index 66e0a62f..cdb3eed9 100644 --- a/fastseq/config.py +++ b/fastseq/config.py @@ -15,15 +15,15 @@ FASTSEQ_LOG_FORMAT = ( '%(levelname)s %(asctime)s %(pathname)s:%(lineno)d] %(message)s') -FASTSEQ_VERSION = '0.0.4' +FASTSEQ_VERSION = '0.2.0' # supported versions of transformers MIN_TRANSFORMERS_VERSION = '3.0.2' MAX_TRANSFORMER_VERSION = '3.0.2' # supported versions of fairseq -MIN_FAIRSEQ_VERSION = '0.9.0' -MAX_FAIRSEQ_VERSION = '0.9.0' +MIN_FAIRSEQ_VERSION = '0.10.0' +MAX_FAIRSEQ_VERSION = '0.10.2' #Set following variable to use Efficient-Lossless Attention USE_EL_ATTN = True if os.getenv('USE_EL_ATTN', '0') == '1' else False diff --git a/fastseq/models/prophetnet_fs/bert_dictionary.py b/fastseq/models/prophetnet_fs/bert_dictionary.py index b4d0a372..710e958f 100644 --- a/fastseq/models/prophetnet_fs/bert_dictionary.py +++ b/fastseq/models/prophetnet_fs/bert_dictionary.py @@ -29,7 +29,7 @@ def __init__( bos='', extra_special_symbols=None, ): - super().__init__(pad, eos, unk, bos, extra_special_symbols) + super().__init__(pad=pad, eos=eos, unk=unk, bos=bos, extra_special_symbols=extra_special_symbols) @classmethod def load_from_file(cls, filename): diff --git a/fastseq/models/prophetnet_fs/hub_interface.py b/fastseq/models/prophetnet_fs/hub_interface.py index c309bc03..a01e14b0 100644 --- a/fastseq/models/prophetnet_fs/hub_interface.py +++ b/fastseq/models/prophetnet_fs/hub_interface.py @@ -6,6 +6,8 @@ """Hub interface for ProphetNet""" import copy +import logging +from fastseq.logging import get_logger from typing import List import numpy as np @@ -16,6 +18,7 @@ from fairseq import utils from fairseq.data import encoders +logger = get_logger(__name__, logging.INFO) class ProphetNetHubInterface(nn.Module): """A simple PyTorch Hub interface to BART. @@ -127,7 +130,7 @@ def generate(self, gen_args.beam = beam for k, v in kwargs.items(): setattr(gen_args, k, v) - generator = self.task.build_generator(gen_args) + generator = self.task.build_generator([self.model], gen_args) translations = self.task.inference_step( generator, [self.model], @@ -137,7 +140,7 @@ def generate(self, if verbose: src_str_with_unk = self.string(tokens) - print('S\t{}'.format(src_str_with_unk)) + logger.info("S\t{}".format(src_str_with_unk)) def getarg(name, default): return getattr(gen_args, name, getattr(self.args, name, default)) diff --git a/fastseq/models/prophetnet_fs/ngram_multihead_attention.py b/fastseq/models/prophetnet_fs/ngram_multihead_attention.py index 80cf300b..d9d62527 100644 --- a/fastseq/models/prophetnet_fs/ngram_multihead_attention.py +++ b/fastseq/models/prophetnet_fs/ngram_multihead_attention.py @@ -8,6 +8,7 @@ """NgramMultiheadAttention""" import math +from fairseq.incremental_decoding_utils import with_incremental_state import torch from torch import nn from torch.nn import Parameter @@ -30,7 +31,7 @@ def ngram_attention_bias(length, num_skip): bias_result.append(bias_n_skip) return torch.from_numpy(np.array(bias_result, dtype=np.float32)) - +@with_incremental_state class NgramMultiheadAttention(nn.Module): """Multi-headed attention. diff --git a/fastseq/optimizer/fairseq/beam_search_optimizer.py b/fastseq/optimizer/fairseq/beam_search_optimizer.py index f340dde5..42675db5 100644 --- a/fastseq/optimizer/fairseq/beam_search_optimizer.py +++ b/fastseq/optimizer/fairseq/beam_search_optimizer.py @@ -4,7 +4,7 @@ """Apply the beam search optimizations to fairseq-v0.9.0""" import math -from typing import Optional +from typing import Dict, List, Optional, Tuple import torch import logging @@ -23,7 +23,6 @@ logger = get_logger(__name__, logging.INFO) - if config.USE_EL_ATTN: logger.info(f"Using Efficient-Lossless Attention optimization") #cache optimiztion without Efficient-Lossless Attention @@ -31,10 +30,21 @@ @replace(BeamSearch) -class BeamSearchV2(BeamSearch): - - def step(self, step, lprobs, scores): - super()._init_buffers(lprobs) +class BeamSearch(BeamSearch): +# Fastseq BeamSearch inherits from Fairseq BeamSearch and then replaces it. +# Parent and child classes share the same name for compatibility with fairseq +# unittests which rely on class name. Same for other replaced classes. +# (https://github.com/pytorch/fairseq/blob/265df7144c79446f5ea8d835bda6e727f54dad9d/tests/test_inference_dropout.py#L58) + + @torch.jit.export + def step( + self, + step: int, + lprobs, + scores: Optional[Tensor], + prev_output_tokens: Optional[Tensor] = None, + original_batch_idxs: Optional[Tensor] = None + ): bsz, beam_size, vocab_size = lprobs.size() if step == 0: @@ -43,28 +53,28 @@ def step(self, step, lprobs, scores): lprobs = lprobs[:, ::beam_size, :].contiguous() else: # make probs contain cumulative scores for each hypothesis - lprobs.add_(scores[:, :, step - 1].unsqueeze(-1)) + assert scores is not None + lprobs = lprobs + scores[:, :, step - 1].unsqueeze(-1) - torch.topk( + scores_buf, indices_buf = torch.topk( lprobs.view(bsz, -1), k=min( # Take the best 2 x beam_size predictions. We'll choose the first # beam_size of these which don't predict eos to continue with. beam_size * 2, lprobs.view(bsz, -1).size(1) - 1, # -1 so we never select pad - ), - out=(self.scores_buf, self.indices_buf), - ) - self.beams_buf = torch.floor_divide(self.indices_buf, vocab_size) - self.indices_buf.fmod_(vocab_size) - return self.scores_buf, self.indices_buf, self.beams_buf + ),)[:2] + + beams_buf = indices_buf // vocab_size + indices_buf = indices_buf.fmod(vocab_size) + + return scores_buf, indices_buf, beams_buf @replace(TransformerEncoder, USE_OPTIMIZED_CACHE_ATTN) -class TransformerEncoderV2(TransformerEncoder): +class TransformerEncoder(TransformerEncoder): """ Transformer encoder consisting of *args.encoder_layers* layers. Each layer is a :class:`TransformerEncoderLayer`. - Args: args (argparse.Namespace): parsed command-line arguments dictionary (~fairseq.data.Dictionary): encoding dictionary @@ -73,21 +83,20 @@ class TransformerEncoderV2(TransformerEncoder): def _reorder_encoder_out(self, encoder_out, new_order): return encoder_out - @replace(TransformerModel, USE_OPTIMIZED_CACHE_ATTN) -class TransformerModelV2(TransformerModel): +class TransformerModel(TransformerModel): """ Represent the BART model.""" def make_generation_fast_(self, **kwargs): super().make_generation_fast_(**kwargs) # pylint: disable=bad-super-call # Replace reorder_encoder_out with a dummy function. + if ('beamable_mm_beam_size' in kwargs and kwargs['beamable_mm_beam_size'] > 1): self.encoder.reorder_encoder_out = self.encoder._reorder_encoder_out - @replace(MultiheadAttention, USE_OPTIMIZED_CACHE_ATTN) -class MultiheadAttentionV2(MultiheadAttention): +class MultiheadAttention(MultiheadAttention): """Multi-headed attention. See "Attention Is All You Need" for more details. @@ -103,31 +112,29 @@ def __init__(self, add_bias_kv=False, add_zero_attn=False, self_attention=False, - encoder_decoder_attention=False): + encoder_decoder_attention=False, + q_noise=0.0, + qn_block_size=8 + ): super().__init__(embed_dim, num_heads, kdim, vdim, dropout, bias, add_bias_kv, add_zero_attn, self_attention, - encoder_decoder_attention) - + encoder_decoder_attention, q_noise, qn_block_size) self.beam_size = 1 self.tpu = False - def apply_sparse_mask( - self, attn_weights, tgt_len: int, src_len: int, bsz: int): - return attn_weights - def forward( self, query, - key, - value, - key_padding_mask=None, - incremental_state=None, - need_weights=True, - static_kv=False, - attn_mask=None, - before_softmax=False, - need_head_weights=False, - ): + key: Optional[Tensor], + value: Optional[Tensor], + key_padding_mask: Optional[Tensor] = None, + incremental_state: Optional[Dict[str, Dict[str, Optional[Tensor]]]] = None, + need_weights: bool = True, + static_kv: bool = False, + attn_mask: Optional[Tensor] = None, + before_softmax: bool =False, + need_head_weights: bool = False, + ) -> Tuple[Tensor, Optional[Tensor]]: """Input shape: Time x Batch x Channel Args: @@ -152,10 +159,16 @@ def forward( assert embed_dim == self.embed_dim assert list(query.size()) == [tgt_len, bsz, embed_dim] - if (self.enable_torch_version and - not self.onnx_trace and - incremental_state is None and - not static_kv): + if ( + not self.onnx_trace + and not self.tpu # don't use PyTorch version on TPUs + and incremental_state is None + and not static_kv + # A workaround for quantization to work. Otherwise JIT compilation + # treats bias in linear module as method. + and not torch.jit.is_scripting() + ): + assert key is not None and value is not None return F.multi_head_attention_forward( query, key, @@ -163,41 +176,39 @@ def forward( self.embed_dim, self.num_heads, torch.empty([0]), - torch.cat( - (self.q_proj.bias, self.k_proj.bias, self.v_proj.bias)), + torch.cat((self.q_proj.bias, self.k_proj.bias, self.v_proj.bias)), self.bias_k, self.bias_v, self.add_zero_attn, - self.dropout, + self.dropout_module.p, self.out_proj.weight, self.out_proj.bias, - self.training, + self.training or self.dropout_module.apply_during_inference, key_padding_mask, need_weights, attn_mask, use_separate_proj_weight=True, q_proj_weight=self.q_proj.weight, k_proj_weight=self.k_proj.weight, - v_proj_weight=self.v_proj.weight) + v_proj_weight=self.v_proj.weight, + ) if incremental_state is not None: saved_state = self._get_input_buffer(incremental_state) - if 'prev_key' in saved_state: + if saved_state is not None and "prev_key" in saved_state: # previous time steps are cached - no need to recompute # key and value if they are static if static_kv: - assert (self.encoder_decoder_attention and - not self.self_attention) + assert self.encoder_decoder_attention and not self.self_attention key = value = None else: saved_state = None if self.self_attention: - q = self.q_proj(query) - k = self.k_proj(query) - v = self.v_proj(query) + q : Tensor = self.q_proj(query) + k : Tensor = self.k_proj(query) + v : Tensor = self.v_proj(query) elif self.encoder_decoder_attention: - # encoder-decoder attention q = self.q_proj(query) if key is None: assert value is None @@ -215,6 +226,7 @@ def forward( v = self.v_proj(key) else: + assert key is not None and value is not None q = self.q_proj(query) k = self.k_proj(key) v = self.v_proj(value) @@ -226,44 +238,56 @@ def forward( v = torch.cat([v, self.bias_v.repeat(1, bsz, 1)]) if attn_mask is not None: attn_mask = torch.cat( - [attn_mask, attn_mask.new_zeros(attn_mask.size(0), 1)], - dim=1) + [attn_mask, attn_mask.new_zeros(attn_mask.size(0), 1)], dim=1 + ) if key_padding_mask is not None: key_padding_mask = torch.cat( - [key_padding_mask, - key_padding_mask.new_zeros(key_padding_mask.size(0), 1)], - dim=1) + [ + key_padding_mask, + key_padding_mask.new_zeros(key_padding_mask.size(0), 1), + ], + dim=1, + ) - q = q.contiguous().view(tgt_len, bsz * self.num_heads, - self.head_dim).transpose(0, 1) + q = ( + q.contiguous() + .view(tgt_len, bsz * self.num_heads, self.head_dim) + .transpose(0, 1) + ) + + kv_bsz = 0 if k is not None: kv_bsz = k.size(1) - k = k.contiguous().view(-1, kv_bsz * self.num_heads, - self.head_dim).transpose(0, 1) + k = ( + k.contiguous() + .view(-1, kv_bsz * self.num_heads, self.head_dim) + .transpose(0, 1) + ) if v is not None: assert kv_bsz - v = v.contiguous().view(-1, kv_bsz * self.num_heads, - self.head_dim).transpose(0, 1) + v = ( + v.contiguous() + .view(-1, kv_bsz * self.num_heads, self.head_dim) + .transpose(0, 1) + ) if saved_state is not None: # saved states are stored with shape (bsz, num_heads, seq_len, head_dim) - if 'prev_key' in saved_state: - saved_prev_key = saved_state["prev_key"] - assert saved_prev_key is not None - kv_bsz = saved_prev_key.size(0) - prev_key = saved_prev_key.view(kv_bsz * self.num_heads, -1, - self.head_dim) + if "prev_key" in saved_state: + _prev_key = saved_state["prev_key"] + assert _prev_key is not None + kv_bsz = _prev_key.size(0) + prev_key = _prev_key.view(kv_bsz * self.num_heads, -1, self.head_dim) if static_kv: k = prev_key else: assert k is not None - k = torch.cat((prev_key, k), dim=1) - if 'prev_value' in saved_state: - saved_prev_value = saved_state["prev_value"] - assert saved_prev_value is not None - assert kv_bsz == saved_prev_value.size(0) - prev_value = saved_prev_value.view(kv_bsz * self.num_heads, -1, - self.head_dim) + k = torch.cat([prev_key, k], dim=1) + if "prev_value" in saved_state: + _prev_value = saved_state["prev_value"] + assert _prev_value is not None + assert kv_bsz == _prev_value.size(0) + prev_value = _prev_value.view(kv_bsz * self.num_heads, -1, self.head_dim) if static_kv: v = prev_value else: @@ -273,7 +297,7 @@ def forward( if "prev_key_padding_mask" in saved_state: prev_key_padding_mask = saved_state["prev_key_padding_mask"] assert k is not None and v is not None - key_padding_mask = self._append_prev_key_padding_mask( + key_padding_mask = MultiheadAttention._append_prev_key_padding_mask( key_padding_mask=key_padding_mask, prev_key_padding_mask=prev_key_padding_mask, batch_size=kv_bsz, @@ -281,15 +305,12 @@ def forward( static_kv=static_kv, ) - saved_state['prev_key'] = k.view(kv_bsz, self.num_heads, -1, - self.head_dim) - saved_state['prev_value'] = v.view(kv_bsz, self.num_heads, -1, - self.head_dim) - saved_state['prev_key_padding_mask'] = key_padding_mask + saved_state["prev_key"] = k.view(kv_bsz, self.num_heads, -1, self.head_dim) + saved_state["prev_value"] = v.view(kv_bsz, self.num_heads, -1, self.head_dim) + saved_state["prev_key_padding_mask"] = key_padding_mask # In this branch incremental_state is never None assert incremental_state is not None - self._set_input_buffer(incremental_state, saved_state) - + incremental_state = self._set_input_buffer(incremental_state, saved_state) assert k is not None src_len = k.size(1) @@ -303,39 +324,38 @@ def forward( assert key_padding_mask.size(1) == src_len if self.add_zero_attn: + assert v is not None src_len += 1 - k = torch.cat([k, k.new_zeros((k.size(0), 1) + k.size()[2:])], - dim=1) - v = torch.cat([v, v.new_zeros((v.size(0), 1) + v.size()[2:])], - dim=1) + k = torch.cat([k, k.new_zeros((k.size(0), 1) + k.size()[2:])], dim=1) + v = torch.cat([v, v.new_zeros((v.size(0), 1) + v.size()[2:])], dim=1) if attn_mask is not None: attn_mask = torch.cat( - [attn_mask, - attn_mask.new_zeros(attn_mask.size(0), 1)], - dim=1) + [attn_mask, attn_mask.new_zeros(attn_mask.size(0), 1)], dim=1 + ) if key_padding_mask is not None: - key_padding_mask = torch.cat([ - key_padding_mask, - torch.zeros(key_padding_mask.size(0), - 1).type_as(key_padding_mask) - ], - dim=1) - + key_padding_mask = torch.cat( + [ + key_padding_mask, + torch.zeros(key_padding_mask.size(0), 1).type_as( + key_padding_mask + ), + ], + dim=1, + ) if self.encoder_decoder_attention and bsz != kv_bsz: + q_shape = (kv_bsz, -1, self.num_heads) + q.size()[1:] + k_shape = (kv_bsz, self.num_heads) + k.size()[1:] attn_weights = torch.einsum( 'bxhtd,bhsd->bxhts', - q.view(kv_bsz, -1, self.num_heads, - *q.size()[1:]), - k.view(kv_bsz, self.num_heads, - *k.size()[1:])) - attn_weights = attn_weights.reshape(-1, *attn_weights.size()[-2:]) + q.view(q_shape), + k.view(k_shape)) + aw_shape = (-1, ) + attn_weights.size()[-2:] + attn_weights = attn_weights.reshape(aw_shape) else: attn_weights = torch.bmm(q, k.transpose(1, 2)) - attn_weights = self.apply_sparse_mask( - attn_weights, tgt_len, src_len, bsz) + attn_weights = self.apply_sparse_mask(attn_weights, tgt_len, src_len, bsz) - assert list( - attn_weights.size()) == [bsz * self.num_heads, tgt_len, src_len] + assert list(attn_weights.size()) == [bsz * self.num_heads, tgt_len, src_len] if attn_mask is not None: attn_mask = attn_mask.unsqueeze(0) @@ -345,90 +365,81 @@ def forward( if key_padding_mask is not None: # don't attend to padding symbols - attn_weights = attn_weights.view(bsz, self.num_heads, tgt_len, - src_len) + attn_weights = attn_weights.view(bsz, self.num_heads, tgt_len, src_len) if not self.tpu: - attn_weights = attn_weights.view(kv_bsz, -1, self.num_heads, - tgt_len, src_len) + attn_weights = attn_weights.view(kv_bsz, -1, self.num_heads, tgt_len, src_len) attn_weights = attn_weights.masked_fill( - key_padding_mask.unsqueeze(1).unsqueeze(2).unsqueeze(3).to( - torch.bool), float("-inf")) + key_padding_mask.unsqueeze(1).unsqueeze(2).unsqueeze(3).to(torch.bool), + float("-inf"), + ) else: attn_weights = attn_weights.transpose(0, 2) - attn_weights = attn_weights.masked_fill( - key_padding_mask, float('-inf')) + attn_weights = attn_weights.masked_fill(key_padding_mask, float("-inf")) attn_weights = attn_weights.transpose(0, 2) - attn_weights = attn_weights.view(bsz * self.num_heads, tgt_len, - src_len) + attn_weights = attn_weights.view(bsz * self.num_heads, tgt_len, src_len) if before_softmax: return attn_weights, v - attn_weights_float = utils.softmax(attn_weights, - dim=-1, - onnx_trace=self.onnx_trace) + attn_weights_float = utils.softmax( + attn_weights, dim=-1, onnx_trace=self.onnx_trace + ) attn_weights = attn_weights_float.type_as(attn_weights) - attn_probs = F.dropout(attn_weights, - p=self.dropout, - training=self.training) + attn_probs = self.dropout_module(attn_weights) + assert v is not None if self.encoder_decoder_attention and bsz != kv_bsz: + ap_shape = (kv_bsz, -1, self.num_heads) + attn_probs.size()[1:] + v_shape = (-1, self.num_heads) + v.size()[1:] attn = torch.einsum( 'bxhts,bhsd->bxhtd', - attn_probs.view(kv_bsz, -1, self.num_heads, - *attn_probs.size()[1:]), - v.view(kv_bsz, self.num_heads, - *v.size()[1:])) - attn = attn.reshape(-1, *attn.size()[-2:]) + attn_probs.view(ap_shape), + v.view(v_shape)) + a_shape = (-1, ) + attn.size()[-2:] + attn = attn.reshape(a_shape) else: attn = torch.bmm(attn_probs, v) - assert list( - attn.size()) == [bsz * self.num_heads, tgt_len, self.head_dim] - if (self.onnx_trace and attn.size(1) == 1): + assert list(attn.size()) == [bsz * self.num_heads, tgt_len, self.head_dim] + if self.onnx_trace and attn.size(1) == 1: # when ONNX tracing a single decoder step (sequence length == 1) # the transpose is a no-op copy before view, thus unnecessary attn = attn.contiguous().view(tgt_len, bsz, embed_dim) else: - attn = attn.transpose(0, - 1).contiguous().view(tgt_len, bsz, embed_dim) + attn = attn.transpose(0, 1).contiguous().view(tgt_len, bsz, embed_dim) attn = self.out_proj(attn) - + attn_weights: Optional[Tensor] = None if need_weights: - attn_weights = attn_weights_float.view(bsz, self.num_heads, - tgt_len, - src_len).transpose(1, 0) + attn_weights = attn_weights_float.view( + bsz, self.num_heads, tgt_len, src_len + ).transpose(1, 0) if not need_head_weights: # average attention weights over heads attn_weights = attn_weights.mean(dim=0) - else: - attn_weights = None return attn, attn_weights - def reorder_incremental_state(self, incremental_state, new_order): + @torch.jit.export + def reorder_incremental_state( + self, + incremental_state: Dict[str, Dict[str, Optional[Tensor]]], + new_order: Tensor, + ): """Reorder buffered internal state (for incremental generation).""" input_buffer = self._get_input_buffer(incremental_state) if input_buffer is not None: for k in input_buffer.keys(): input_buffer_k = input_buffer[k] - if input_buffer[k] is not None: + if input_buffer_k is not None: if self.encoder_decoder_attention: - if input_buffer_k.size( - 0) * self.beam_size == new_order.size(0): - return incremental_state + if input_buffer_k.size(0) * self.beam_size == new_order.size(0): + break elif self.beam_size > 1: - input_buffer[k] = input_buffer_k.index_select( - 0, - new_order.reshape(-1, self.beam_size)[:, 0] // - self.beam_size) - else: - input_buffer[k] = input_buffer_k.index_select( - 0, new_order) - else: - input_buffer[k] = input_buffer_k.index_select( - 0, new_order) - self._set_input_buffer(incremental_state, input_buffer) + input_buffer[k] = input_buffer_k.index_select(0, new_order.reshape(-1, self.beam_size)[:, 0] // self.beam_size) + continue + input_buffer[k] = input_buffer_k.index_select(0, new_order) + incremental_state = self._set_input_buffer(incremental_state, input_buffer) + return incremental_state def set_beam_size(self, beam_size): self.beam_size = beam_size @@ -437,77 +448,217 @@ def make_generation_fast_(self, beamable_mm_beam_size=None, **kwargs): if beamable_mm_beam_size is not None: self.set_beam_size(beamable_mm_beam_size) - @replace(SequenceGenerator, USE_OPTIMIZED_CACHE_ATTN) -class SequenceGeneratorV2(SequenceGenerator): +class SequenceGenerator(SequenceGenerator): """ Sequence Generator is optimized by reducing the cached memory usage during the encoding period for beam search. """ + def finalize_hypos( + self, + step: int, + bbsz_idx, + eos_scores, + tokens, + scores, + finalized: List[List[Dict[str, Tensor]]], + finished: List[bool], + beam_size: int, + attn: Optional[Tensor], + src_lengths, + max_len: int, + ): + """Finalize hypothesis, store finalized information in `finalized`, and change `finished` accordingly. + A sentence is finalized when {beam_size} finished items have been collected for it. + Returns number of sentences (not beam items) being finalized. + These will be removed from the batch and not processed further. + Args: + bbsz_idx (Tensor): + """ + assert bbsz_idx.numel() == eos_scores.numel() + + # clone relevant token and attention tensors. + # tokens is (batch * beam, max_len). So the index_select + # gets the newly EOS rows, then selects cols 1..{step + 2} + tokens_clone = tokens.index_select(0, bbsz_idx)[ + :, 1 : step + 2 + ] # skip the first index, which is EOS + + tokens_clone[:, step] = self.eos + attn_clone = ( + attn.index_select(0, bbsz_idx)[:, :, 1 : step + 2] + if attn is not None + else None + ) + + # compute scores per token position + pos_scores = scores.index_select(0, bbsz_idx)[:, : step + 1] + pos_scores[:, step] = eos_scores + # convert from cumulative to per-position scores + pos_scores[:, 1:] = pos_scores[:, 1:] - pos_scores[:, :-1] + + # normalize sentence-level scores + if self.normalize_scores: + eos_scores /= (step + 1) ** self.len_penalty + + # cum_unfin records which sentences in the batch are finished. + # It helps match indexing between (a) the original sentences + # in the batch and (b) the current, possibly-reduced set of + # sentences. + cum_unfin: List[int] = [] + prev = 0 + for f in finished: + if f: + prev += 1 + else: + cum_unfin.append(prev) + + # set() is not supported in script export + + # The keys here are of the form "{sent}_{unfin_idx}", where + # "unfin_idx" is the index in the current (possibly reduced) + # list of sentences, and "sent" is the index in the original, + # unreduced batch + sents_seen = set() + + # For every finished beam item + for i, (idx, score) in enumerate( + zip(bbsz_idx.tolist(), eos_scores.tolist())): + # sentence index in the current (possibly reduced) batch + unfin_idx = idx // beam_size + # sentence index in the original (unreduced) batch + sent = unfin_idx + cum_unfin[unfin_idx] + + sents_seen.add((sent, unfin_idx)) + + if self.match_source_len and step > src_lengths[unfin_idx]: + score = torch.tensor(-math.inf).to(score) + + # An input sentence (among those in a batch) is finished when + # beam_size hypotheses have been collected for it + if len(finalized[sent]) < beam_size: + if attn_clone is not None: + # remove padding tokens from attn scores + hypo_attn = attn_clone[i] + else: + hypo_attn = torch.empty(0) + + finalized[sent].append( + { + "tokens": tokens_clone[i], + "score": score, + "attention": hypo_attn, # src_len x tgt_len + "alignment": torch.empty(0), + "positional_scores": pos_scores[i], + } + ) + + newly_finished: List[int] = [] + + for sent, unfin_idx in sents_seen: + # check termination conditions for this sentence + if not finished[sent] and self.is_finished( + step, unfin_idx, max_len, len(finalized[sent]), beam_size + ): + finished[sent] = True + newly_finished.append(unfin_idx) + return newly_finished @torch.no_grad() def _generate(self, - model, sample, prefix_tokens=None, - bos_token=None, - **kwargs): - if not self.retain_dropout: - model.eval() - - # model.forward normally channels prev_output_tokens into the decoder - # separately, but SequenceGenerator directly calls model.encoder - encoder_input = { - k: v - for k, v in sample['net_input'].items() - if k != 'prev_output_tokens' - } - - src_tokens = encoder_input['src_tokens'] - src_lengths = (src_tokens.ne(self.eos) - & src_tokens.ne(self.pad)).long().sum(dim=1) - input_size = src_tokens.size() - # batch dimension goes first followed by source lengths - bsz = input_size[0] - src_len = input_size[1] + constraints=None, + bos_token=None + ): + incremental_states = torch.jit.annotate( + List[Dict[str, Dict[str, Optional[Tensor]]]], + [ + torch.jit.annotate(Dict[str, Dict[str, Optional[Tensor]]], {}) + for i in range(self.model.models_size) + ], + ) + net_input = sample["net_input"] + + if "src_tokens" in net_input: + src_tokens = net_input["src_tokens"] + # length of the source text being the character length except EndOfSentence and pad + src_lengths = ( + (src_tokens.ne(self.eos) & src_tokens.ne(self.pad)).long().sum(dim=1) + ) + elif "source" in net_input: + src_tokens = net_input["source"] + src_lengths = ( + net_input["padding_mask"].size(-1) - net_input["padding_mask"].sum(-1) + if net_input["padding_mask"] is not None + else torch.tensor(src_tokens.size(-1)).to(src_tokens) + ) + else: + raise Exception("expected src_tokens or source in net input. input keys: " + str(net_input.keys())) + + # bsz: total number of sentences in beam + # Note that src_tokens may have more than 2 dimenions (i.e. audio features) + bsz, src_len = src_tokens.size()[:2] beam_size = self.beam_size + self.no_repeat_ngram_op = NGramRepeatBlock() + if constraints is not None and not self.search.supports_constraints: + raise NotImplementedError( + "Target-side constraints were provided, but search method doesn't support them" + ) + + # Initialize constraints, when active + self.search.init_constraints(constraints, beam_size) + + max_len: int = -1 + if self.match_source_len: max_len = src_lengths.max().item() else: max_len = min( int(self.max_len_a * src_len + self.max_len_b), # exclude the EOS marker - model.max_decoder_positions() - 1, + self.model.max_decoder_positions() - 1, ) # compute the encoder output for each beam - encoder_outs = model.forward_encoder(encoder_input) + encoder_outs = self.model.forward_encoder(net_input) new_order = torch.arange(bsz).view(-1, 1).repeat(1, beam_size).view(-1) new_order = new_order.to(src_tokens.device).long() - encoder_outs = model.reorder_encoder_out(encoder_outs, new_order) + encoder_outs = self.model.reorder_encoder_out(encoder_outs, new_order) + assert encoder_outs is not None # initialize buffers - scores = src_tokens.new(bsz * beam_size, max_len + 1).float().fill_(0) - scores_buf = scores.clone() - tokens = src_tokens.new(bsz * beam_size, - max_len + 2).long().fill_(self.pad) - tokens_buf = tokens.clone() + scores = ( + torch.zeros(bsz * beam_size, max_len + 1).to(src_tokens).float() + ) # +1 for eos; pad is never chosen for scoring + tokens = ( + torch.zeros(bsz * beam_size, max_len + 2) + .to(src_tokens) + .long() + .fill_(self.pad) + ) # +2 for eos and pad tokens[:, 0] = self.eos if bos_token is None else bos_token - attn, attn_buf = None, None + attn: Optional[Tensor] = None - # The blacklist indicates candidates that should be ignored. + # A list that indicates candidates that should be ignored. # For example, suppose we're sampling and have already finalized 2/5 - # samples. Then the blacklist would mark 2 positions as being ignored, + # samples. Then cands_to_ignore would mark 2 positions as being ignored, # so that we only finalize the remaining 3 samples. - blacklist = src_tokens.new_zeros(bsz, beam_size).eq( - -1) # forward and backward-compatible False mask + cands_to_ignore = ( + torch.zeros(bsz, beam_size).to(src_tokens).eq(-1) + ) # forward and backward-compatible False mask # list of completed sentences - finalized = [[] for i in range(bsz)] - finished = [False for i in range(bsz)] - num_remaining_sent = bsz + finalized = torch.jit.annotate( + List[List[Dict[str, Tensor]]], + [torch.jit.annotate(List[Dict[str, Tensor]], []) for i in range(bsz)], + ) # contains lists of dictionaries of infomation about the hypothesis being finalized at each step + finished = [ + False for i in range(bsz) + ] # a boolean array indicating if the sentence at the index is finished or not + num_remaining_sent = bsz # number of sentences remaining # number of candidate hypos per step cand_size = 2 * beam_size # 2 x beam size in case half are EOS @@ -517,172 +668,49 @@ def _generate(self, beam_size).unsqueeze(1).type_as(tokens) cand_offsets = torch.arange(0, cand_size).type_as(tokens) - # helper function for allocating buffers on the fly - buffers = {} - - def buffer(name, type_of=tokens): # noqa - if name not in buffers: - buffers[name] = type_of.new() - return buffers[name] - - def is_finished(sent, step, unfin_idx): - """ - Check whether we've finished generation for a given sentence, by - comparing the worst score among finalized hypotheses to the best - possible score among unfinalized hypotheses. - """ - assert len(finalized[sent]) <= beam_size - if len(finalized[sent]) == beam_size or step == max_len: - return True - return False - - def apply_no_repeat_ngram_cpu(self, tokens,lprobs, bsz,step, - beam_size, no_repeat_ngram_size): - """ Fairseq implementation of blocking - repeated ngrams - """ - banned_list = [[] for bbsz_idx in range(bsz * beam_size)] - cpu_tokens = tokens.cpu()[:, :step + 1].numpy() - check_start_pos = step + 2 - no_repeat_ngram_size - for bbsz_idx in range(bsz * beam_size): - for i in range(check_start_pos): - is_banned = True - for k in range(no_repeat_ngram_size - 1): - if cpu_tokens[bbsz_idx, i + k] != cpu_tokens[ - bbsz_idx, check_start_pos + k]: - is_banned = False - break - if is_banned: - banned_list[bbsz_idx].append( - cpu_tokens[bbsz_idx, - i + no_repeat_ngram_size - 1]) - - def calculate_banned_tokens(bbsz_idx): - """before decoding the next token, prevent decoding - of ngrams that have already appeared - """ - banned_tokens_per_sample = [ - (bbsz_idx, t) for t in banned_list[bbsz_idx] - ] - return banned_tokens_per_sample - - banned_tokens = [] - if step + 2 - no_repeat_ngram_size >= 0: - for bbsz_idx in range(bsz * beam_size): - banned_tokens.extend(calculate_banned_tokens(bbsz_idx)) - - if banned_tokens: - banned_tokens = torch.LongTensor(banned_tokens) - lprobs.index_put_( - tuple(banned_tokens.t()), - lprobs.new_tensor([-math.inf] * len(banned_tokens))) - - return lprobs - - def finalize_hypos(step, bbsz_idx, eos_scores): - """ - Finalize the given hypotheses at this step, while keeping the total - number of finalized hypotheses per sentence <= beam_size. - - Note: the input must be in the desired finalization order, so that - hypotheses that appear earlier in the input are preferred to those - that appear later. - - Args: - step: current time step - bbsz_idx: A vector of indices in the range [0, bsz*beam_size), - indicating which hypotheses to finalize - eos_scores: A vector of the same size as bbsz_idx containing - scores for each hypothesis - """ - assert bbsz_idx.numel() == eos_scores.numel() - - # clone relevant token and attention tensors - tokens_clone = tokens.index_select(0, bbsz_idx) - tokens_clone = tokens_clone[:, 1:step + - 2] # skip the first index, which is EOS - assert not tokens_clone.eq(self.eos).any() - tokens_clone[:, step] = self.eos - attn_clone = attn.index_select( - 0, bbsz_idx)[:, :, 1:step + 2] if attn is not None else None - - # compute scores per token position - pos_scores = scores.index_select(0, bbsz_idx)[:, :step + 1] - pos_scores[:, step] = eos_scores - # convert from cumulative to per-position scores - pos_scores[:, 1:] = pos_scores[:, 1:] - pos_scores[:, :-1] - - # normalize sentence-level scores - if self.normalize_scores: - eos_scores /= (step + 1)**self.len_penalty - - cum_unfin = [] - prev = 0 - for f in finished: - if f: - prev += 1 - else: - cum_unfin.append(prev) - - sents_seen = set() - for i, (idx, score) in enumerate( - zip(bbsz_idx.tolist(), eos_scores.tolist())): - unfin_idx = idx // beam_size - sent = unfin_idx + cum_unfin[unfin_idx] - - sents_seen.add((sent, unfin_idx)) - - if self.match_source_len and step > src_lengths[unfin_idx]: - score = -math.inf - - def get_hypo(): + reorder_state: Optional[Tensor] = None + batch_idxs: Optional[Tensor] = None - if attn_clone is not None: - # remove padding tokens from attn scores - hypo_attn = attn_clone[i] - else: - hypo_attn = None - - return { - 'tokens': tokens_clone[i], - 'score': score, - 'attention': hypo_attn, # src_len x tgt_len - 'alignment': None, - 'positional_scores': pos_scores[i], - } - - if len(finalized[sent]) < beam_size: - finalized[sent].append(get_hypo()) - - newly_finished = [] - for sent, unfin_idx in sents_seen: - # check termination conditions for this sentence - if not finished[sent] and is_finished(sent, step, unfin_idx): - finished[sent] = True - newly_finished.append(unfin_idx) - return newly_finished + original_batch_idxs: Optional[Tensor] = None + if "id" in sample and isinstance(sample["id"], Tensor): + original_batch_idxs = sample["id"] + else: + original_batch_idxs = torch.arange(0, bsz).type_as(tokens) - reorder_state = None - batch_idxs = None - for step in range(max_len + 1): # one extra step for EOS marker + for step in range(max_len + 1): # reorder decoder internal states based on the prev choice of beams if reorder_state is not None: if batch_idxs is not None: # update beam indices to take into account removed sentences - corr = batch_idxs - torch.arange( - batch_idxs.numel()).type_as(batch_idxs) + corr = batch_idxs - torch.arange(batch_idxs.numel()).type_as( + batch_idxs + ) reorder_state.view(-1, beam_size).add_( - corr.unsqueeze(-1) * beam_size) - model.reorder_incremental_state(reorder_state) - encoder_outs = model.reorder_encoder_out( - encoder_outs, reorder_state) + corr.unsqueeze(-1) * beam_size + ) + original_batch_idxs = original_batch_idxs[batch_idxs] + self.model.reorder_incremental_state(incremental_states, reorder_state) + encoder_outs = self.model.reorder_encoder_out( + encoder_outs, reorder_state + ) - lprobs, avg_attn_scores = model.forward_decoder( - tokens[:, :step + 1], + lprobs, avg_attn_scores = self.model.forward_decoder( + tokens[:, : step + 1], encoder_outs, - temperature=self.temperature, + incremental_states, + self.temperature, ) + if self.lm_model is not None: + lm_out = self.lm_model(tokens[:, : step + 1]) + probs = self.lm_model.get_normalized_probs( + lm_out, log_probs=True, sample=None + ) + probs = probs[:, -1, :] * self.lm_weight + lprobs += probs + + lprobs[lprobs != lprobs] = torch.tensor(-math.inf).to(lprobs) + lprobs[:, self.pad] = -math.inf # never select pad lprobs[:, self.unk] -= self.unk_penalty # apply unk penalty @@ -692,54 +720,35 @@ def get_hypo(): lprobs[:, self.eos + 1:] = -math.inf # handle prefix tokens (possibly with different lengths) - if prefix_tokens is not None and step < prefix_tokens.size( - 1) and step < max_len: - prefix_toks = prefix_tokens[:, step].unsqueeze(-1).repeat( - 1, beam_size).view(-1) - prefix_lprobs = lprobs.gather(-1, prefix_toks.unsqueeze(-1)) - prefix_mask = prefix_toks.ne(self.pad) - lprobs[prefix_mask] = -math.inf - lprobs[prefix_mask] = lprobs[prefix_mask].scatter_( - -1, prefix_toks[prefix_mask].unsqueeze(-1), - prefix_lprobs[prefix_mask]) - # if prefix includes eos, then we should make sure tokens and - # scores are the same across all beams - eos_mask = prefix_toks.eq(self.eos) - if eos_mask.any(): - # validate that the first beam matches the prefix - first_beam = tokens[eos_mask].view( - -1, beam_size, tokens.size(-1))[:, 0, 1:step + 1] - eos_mask_batch_dim = eos_mask.view(-1, beam_size)[:, 0] - target_prefix = prefix_tokens[eos_mask_batch_dim][:, :step] - assert (first_beam == target_prefix).all() - - def replicate_first_beam(tensor, mask): - tensor = tensor.view(-1, beam_size, tensor.size(-1)) - tensor[mask] = tensor[mask][:, :1, :] - return tensor.view(-1, tensor.size(-1)) - - # copy tokens, scores and lprobs from the first beam to all beams - tokens = replicate_first_beam(tokens, eos_mask_batch_dim) - scores = replicate_first_beam(scores, eos_mask_batch_dim) - lprobs = replicate_first_beam(lprobs, eos_mask_batch_dim) + if ( + prefix_tokens is not None + and step < prefix_tokens.size(1) + and step < max_len + ): + lprobs, tokens, scores = self._prefix_tokens( + step, lprobs, scores, tokens, prefix_tokens, beam_size + ) elif step < self.min_len: # minimum length constraint (does not apply if using prefix_tokens) lprobs[:, self.eos] = -math.inf - # Record attention scores + # Record attention scores, only support avg_attn_scores is a Tensor if avg_attn_scores is not None: if attn is None: - attn = scores.new(bsz * beam_size, src_tokens.size(1), - max_len + 2) - attn_buf = attn.clone() + attn = scores.new( + bsz * beam_size, avg_attn_scores.size(1), max_len + 2) attn[:, :, step + 1].copy_(avg_attn_scores) scores = scores.type_as(lprobs) - scores_buf = scores_buf.type_as(lprobs) - eos_bbsz_idx = buffer('eos_bbsz_idx') - eos_scores = buffer('eos_scores', type_of=scores) + eos_bbsz_idx = torch.empty(0).to( + tokens + ) # indices of hypothesis ending with eos (finished sentences) + eos_scores = torch.empty(0).to( + scores + ) # scores of hypothesis ending with eos (finished sentences) - self.search.set_src_lengths(src_lengths) + if self.should_set_src_lengths: + self.search.set_src_lengths(src_lengths) if self.no_repeat_ngram_size > 0: #Applying Cuda Op for NGram repeat Blocking @@ -747,13 +756,16 @@ def replicate_first_beam(tensor, mask): lprobs = self.no_repeat_ngram_op(tokens,lprobs, bsz, step, beam_size, self.no_repeat_ngram_size) else: - lprobs = apply_no_repeat_ngram_cpu(tokens, lprobs, bsz, - step, beam_size, self.ngram_repeat_block_size) + lprobs = self._no_repeat_ngram(tokens, lprobs, bsz, + beam_size, step) + # Shape: (batch, cand_size) cand_scores, cand_indices, cand_beams = self.search.step( step, lprobs.view(bsz, -1, self.vocab_size), scores.view(bsz, beam_size, -1)[:, :, :step], + tokens[:, : step + 1], + original_batch_idxs, ) # cand_bbsz_idx contains beam indices for the top candidate @@ -761,39 +773,60 @@ def replicate_first_beam(tensor, mask): # and dimensions: [bsz, cand_size] cand_bbsz_idx = cand_beams.add(bbsz_offsets) - # finalize hypotheses that end in eos, except for blacklisted ones - # or candidates with a score of -inf + # finalize hypotheses that end in eos + # Shape of eos_mask: (batch size, beam size) eos_mask = cand_indices.eq(self.eos) & cand_scores.ne(-math.inf) - eos_mask[:, :beam_size][blacklist] = 0 + eos_mask[:, :beam_size][cands_to_ignore] = torch.tensor(0).to(eos_mask) # only consider eos when it's among the top beam_size indices + # Now we know what beam item(s) to finish + # Shape: 1d list of absolute-numbered eos_bbsz_idx = torch.masked_select( - cand_bbsz_idx[:, :beam_size], - mask=eos_mask[:, :beam_size], + cand_bbsz_idx[:, :beam_size], mask=eos_mask[:, :beam_size] ) - finalized_sents = set() + finalized_sents: List[int] = [] if eos_bbsz_idx.numel() > 0: eos_scores = torch.masked_select( - cand_scores[:, :beam_size], - mask=eos_mask[:, :beam_size], + cand_scores[:, :beam_size], mask=eos_mask[:, :beam_size] + ) + + finalized_sents = self.finalize_hypos( + step, + eos_bbsz_idx, + eos_scores, + tokens, + scores, + finalized, + finished, + beam_size, + attn, + src_lengths, + max_len, ) - finalized_sents = finalize_hypos(step, eos_bbsz_idx, - eos_scores) num_remaining_sent -= len(finalized_sents) assert num_remaining_sent >= 0 if num_remaining_sent == 0: break + if self.search.stop_on_max_len and step >= max_len: + break assert step < max_len if len(finalized_sents) > 0: new_bsz = bsz - len(finalized_sents) # construct batch_idxs which holds indices of batches to keep for the next pass - batch_mask = cand_indices.new_ones(bsz) - batch_mask[cand_indices.new(finalized_sents)] = 0 - batch_idxs = torch.nonzero(batch_mask).squeeze(-1) + batch_mask = torch.ones( + bsz, dtype=torch.bool, device=cand_indices.device + ) + batch_mask[finalized_sents] = False + batch_idxs = torch.arange( + bsz, device=cand_indices.device + ).masked_select(batch_mask) + + # Choose the subset of the hypothesized constraints that will continue + self.search.prune_sentences(batch_idxs) eos_mask = eos_mask[batch_idxs] cand_beams = cand_beams[batch_idxs] @@ -801,115 +834,87 @@ def replicate_first_beam(tensor, mask): cand_bbsz_idx = cand_beams.add(bbsz_offsets) cand_scores = cand_scores[batch_idxs] cand_indices = cand_indices[batch_idxs] + if prefix_tokens is not None: prefix_tokens = prefix_tokens[batch_idxs] src_lengths = src_lengths[batch_idxs] - blacklist = blacklist[batch_idxs] - - scores = scores.view(bsz, -1)[batch_idxs].view( - new_bsz * beam_size, -1) - scores_buf.resize_as_(scores) - tokens = tokens.view(bsz, -1)[batch_idxs].view( - new_bsz * beam_size, -1) - tokens_buf.resize_as_(tokens) + cands_to_ignore = cands_to_ignore[batch_idxs] + + scores = scores.view(bsz, -1)[batch_idxs].view(new_bsz * beam_size, -1) + tokens = tokens.view(bsz, -1)[batch_idxs].view(new_bsz * beam_size, -1) if attn is not None: attn = attn.view(bsz, -1)[batch_idxs].view( - new_bsz * beam_size, attn.size(1), -1) - attn_buf.resize_as_(attn) + new_bsz * beam_size, attn.size(1), -1 + ) bsz = new_bsz else: batch_idxs = None - # Set active_mask so that values > cand_size indicate eos or - # blacklisted hypos and values < cand_size indicate candidate - # active hypos. After this, the min values per row are the top - # candidate active hypos. - active_mask = buffer('active_mask') - eos_mask[:, :beam_size] |= blacklist + # Set active_mask so that values > cand_size indicate eos hypos + # and values < cand_size indicate candidate active hypos. + # After, the min values per row are the top candidate active hypos + eos_mask[:, :beam_size] = ~((~cands_to_ignore) & (~eos_mask[:, :beam_size])) active_mask = torch.add( eos_mask.type_as(cand_offsets) * cand_size, - cand_offsets[:eos_mask.size(1)], + cand_offsets[: eos_mask.size(1)] ) - # get the top beam_size active hypotheses, which are just the hypos - # with the smallest values in active_mask - active_hypos, new_blacklist = buffer('active_hypos'), buffer( - 'new_blacklist') - torch.topk(active_mask, - k=beam_size, - dim=1, - largest=False, - out=(new_blacklist, active_hypos)) - - # update blacklist to ignore any finalized hypos - blacklist = new_blacklist.ge(cand_size)[:, :beam_size] - assert (~blacklist).any(dim=1).all() - - active_bbsz_idx = buffer('active_bbsz_idx') - torch.gather( - cand_bbsz_idx, - dim=1, - index=active_hypos, - out=active_bbsz_idx, - ) - active_scores = torch.gather( - cand_scores, - dim=1, - index=active_hypos, - out=scores[:, step].view(bsz, beam_size), + new_cands_to_ignore, active_hypos = torch.topk( + active_mask, k=beam_size, dim=1, largest=False ) + # update cands_to_ignore to ignore any finalized hypos. + cands_to_ignore = new_cands_to_ignore.ge(cand_size)[:, :beam_size] + # Make sure there is at least one active item for each sentence in the batch. + assert (~cands_to_ignore).any(dim=1).all() + + # {active_bbsz_idx} denotes which beam number is continued for each new hypothesis (a beam + # can be selected more than once). + active_bbsz_idx = torch.gather(cand_bbsz_idx, dim=1, index=active_hypos) + active_scores = torch.gather(cand_scores, dim=1, index=active_hypos) + active_bbsz_idx = active_bbsz_idx.view(-1) active_scores = active_scores.view(-1) # copy tokens and scores for active hypotheses - torch.index_select( - tokens[:, :step + 1], - dim=0, - index=active_bbsz_idx, - out=tokens_buf[:, :step + 1], + + # Set the tokens for each beam (can select the same row more than once) + tokens[:, : step + 1] = torch.index_select( + tokens[:, : step + 1], dim=0, index=active_bbsz_idx ) - torch.gather( - cand_indices, - dim=1, - index=active_hypos, - out=tokens_buf.view(bsz, beam_size, -1)[:, :, step + 1], + # Select the next token for each of them + tokens.view(bsz, beam_size, -1)[:, :, step + 1] = torch.gather( + cand_indices, dim=1, index=active_hypos ) if step > 0: - torch.index_select( - scores[:, :step], - dim=0, - index=active_bbsz_idx, - out=scores_buf[:, :step], + scores[:, :step] = torch.index_select( + scores[:, :step], dim=0, index=active_bbsz_idx ) - torch.gather( - cand_scores, - dim=1, - index=active_hypos, - out=scores_buf.view(bsz, beam_size, -1)[:, :, step], + scores.view(bsz, beam_size, -1)[:, :, step] = torch.gather( + cand_scores, dim=1, index=active_hypos ) + # Update constraints based on which candidates were selected for the next beam + self.search.update_constraints(active_hypos) + # copy attention for active hypotheses if attn is not None: - torch.index_select( - attn[:, :, :step + 2], - dim=0, - index=active_bbsz_idx, - out=attn_buf[:, :, :step + 2], + attn[:, :, : step + 2] = torch.index_select( + attn[:, :, : step + 2], dim=0, index=active_bbsz_idx ) - # swap buffers - tokens, tokens_buf = tokens_buf, tokens - scores, scores_buf = scores_buf, scores - if attn is not None: - attn, attn_buf = attn_buf, attn - # reorder incremental state in decoder reorder_state = active_bbsz_idx # sort by score descending - for sent_id, _ in enumerate(finalized): - finalized[sent_id] = sorted(finalized[sent_id], - key=lambda r: r['score'], - reverse=True) + for sent in range(len(finalized)): + scores = torch.tensor( + [float(elem["score"]) for elem in finalized[sent]] + ) + _, sorted_scores_indices = torch.sort(scores, descending=True) + finalized[sent] = [finalized[sent][ssi] for ssi in sorted_scores_indices] + finalized[sent] = torch.jit.annotate( + List[Dict[str, Tensor]], finalized[sent] + ) + return finalized diff --git a/fastseq/optimizer/fairseq/el_attention_optimizer.py b/fastseq/optimizer/fairseq/el_attention_optimizer.py index bd703a03..f045addc 100644 --- a/fastseq/optimizer/fairseq/el_attention_optimizer.py +++ b/fastseq/optimizer/fairseq/el_attention_optimizer.py @@ -1,26 +1,19 @@ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. -"""Apply the EL Attention optimizations to fairseq-v0.9.0""" +"""Apply the EL Attention optimizations to fairseq-v0.10.2""" import math -from typing import Optional -from typing import List -from collections import namedtuple +from typing import Optional, List, NamedTuple, Dict, Tuple import torch import torch.nn.functional as F from torch import Tensor -import random from fairseq import utils -from fairseq.models.transformer import TransformerEncoder, TransformerModel +from fairseq.models.transformer import TransformerEncoder, TransformerDecoder, TransformerModel from fairseq.modules.multihead_attention import MultiheadAttention -from fairseq.sequence_generator import SequenceGenerator +from fairseq.sequence_generator import SequenceGenerator, EnsembleModel from fairseq.models.fairseq_model import FairseqEncoderDecoderModel -from fairseq.models.transformer import TransformerAlignModel -from fairseq.models.transformer import TransformerEncoder -from fairseq.models.transformer import TransformerDecoder from fairseq.modules.transformer_layer import TransformerDecoderLayer -from fairseq.sequence_generator import EnsembleModel from fairseq.tasks.fairseq_task import FairseqTask from fairseq.data.data_utils import collate_tokens from fastseq.utils.api_decorator import replace @@ -28,63 +21,74 @@ from fastseq.config import USE_EL_ATTN @replace(collate_tokens, USE_EL_ATTN) -def collate_tokens(values, pad_idx, eos_idx=None, - left_pad=False, move_eos_to_beginning=False): +def collate_tokens( + values, + pad_idx, + eos_idx=None, + left_pad=False, + move_eos_to_beginning=False, + pad_to_length=None, + pad_to_multiple=8, +): """Convert a list of 1d tensors into a padded 2d tensor.""" size = max(v.size(0) for v in values) - - pad_to_multiple = 8 - if size % pad_to_multiple != 0: - size = int(((size-0.1)//pad_to_multiple + 1) * pad_to_multiple) - + size = size if pad_to_length is None else max(size, pad_to_length) + if pad_to_multiple != 1 and size % pad_to_multiple != 0: + size = int(((size - 0.1) // pad_to_multiple + 1) * pad_to_multiple) res = values[0].new(len(values), size).fill_(pad_idx) def copy_tensor(src, dst): assert dst.numel() == src.numel() if move_eos_to_beginning: - assert src[-1] == eos_idx - dst[0] = eos_idx + if eos_idx is None: + # if no eos_idx is specified, then use the last token in src + dst[0] = src[-1] + else: + dst[0] = eos_idx dst[1:] = src[:-1] else: dst.copy_(src) for i, v in enumerate(values): - copy_tensor(v, res[i][size - len(v):] if left_pad else res[i][:len(v)]) + copy_tensor(v, res[i][size - len(v) :] if left_pad else res[i][: len(v)]) return res @replace(FairseqTask, USE_EL_ATTN) -class FairseqTaskV2(FairseqTask): +class FairseqTask(FairseqTask): +# Fastseq BeamSearch inherits from Fairseq BeamSearch and then replaces it. +# Parent and child classes share the same name for compatibility with fairseq +# unittests which rely on class name. Same for other replaced classes. +# (https://github.com/pytorch/fairseq/blob/265df7144c79446f5ea8d835bda6e727f54dad9d/tests/test_inference_dropout.py#L58) + def transpose_enc_dec_kv_proj(self, models): for model in models: model.transpose_enc_dec_kv_proj() @replace(TransformerDecoderLayer, USE_EL_ATTN) -class TransformerDecoderLayerV2(TransformerDecoderLayer): +class TransformerDecoderLayer(TransformerDecoderLayer): def forward( self, x, - encoder_out=None, - encoder_out_v=None, - encoder_padding_mask=None, - incremental_state=None, - prev_self_attn_state=None, - prev_attn_state=None, - self_attn_mask=None, - self_attn_padding_mask=None, - need_attn=False, - need_head_weights=False, + encoder_out: Optional[torch.Tensor] = None, + encoder_out_v: Optional[torch.Tensor] = None, + encoder_padding_mask: Optional[torch.Tensor] = None, + incremental_state: Optional[Dict[str, Dict[str, Optional[Tensor]]]] = None, + prev_self_attn_state: Optional[List[torch.Tensor]] = None, + prev_attn_state: Optional[List[torch.Tensor]] = None, + self_attn_mask: Optional[torch.Tensor] = None, + self_attn_padding_mask: Optional[torch.Tensor] = None, + need_attn: bool = False, + need_head_weights: bool = False, ): """ Args: - x (Tensor): input to the layer of shape - `(seq_len, batch, embed_dim)` + x (Tensor): input to the layer of shape `(seq_len, batch, embed_dim)` encoder_padding_mask (ByteTensor, optional): binary ByteTensor of shape `(batch, src_len)` where padding elements are indicated by ``1``. need_attn (bool, optional): return attention weights need_head_weights (bool, optional): return attention weights for each head (default: return average over heads). - Returns: encoded output of shape `(seq_len, batch, embed_dim)` """ @@ -92,33 +96,44 @@ def forward( need_attn = True residual = x - x = self.maybe_layer_norm(self.self_attn_layer_norm, x, before=True) + if self.normalize_before: + x = self.self_attn_layer_norm(x) if prev_self_attn_state is not None: - if incremental_state is None: - incremental_state = {} prev_key, prev_value = prev_self_attn_state[:2] - saved_state = {"prev_key": prev_key, "prev_value": prev_value} + saved_state: Dict[str, Optional[Tensor]] = { + "prev_key": prev_key, + "prev_value": prev_value, + } if len(prev_self_attn_state) >= 3: saved_state["prev_key_padding_mask"] = prev_self_attn_state[2] + assert incremental_state is not None self.self_attn._set_input_buffer(incremental_state, saved_state) - if self.cross_self_attention and not (incremental_state is not None - and "prev_key" in - self.self_attn._get_input_buffer(incremental_state)): + _self_attn_input_buffer = self.self_attn._get_input_buffer(incremental_state) + if self.cross_self_attention and not ( + incremental_state is not None + and _self_attn_input_buffer is not None + and "prev_key" in _self_attn_input_buffer + ): if self_attn_mask is not None: - self_attn_mask = torch.cat((x.new(x.size(0), - encoder_out.size(0)).zero_(), self_attn_mask), dim=1) + assert encoder_out is not None + self_attn_mask = torch.cat( + (x.new_zeros(x.size(0), encoder_out.size(0)), self_attn_mask), dim=1 + ) if self_attn_padding_mask is not None: if encoder_padding_mask is None: - encoder_padding_mask = self_attn_padding_mask.new( - encoder_out.size(1), encoder_out.size(0)).zero_() - self_attn_padding_mask = torch.cat((encoder_padding_mask, - self_attn_padding_mask), dim=1) + assert encoder_out is not None + encoder_padding_mask = self_attn_padding_mask.new_zeros( + encoder_out.size(1), encoder_out.size(0) + ) + self_attn_padding_mask = torch.cat( + (encoder_padding_mask, self_attn_padding_mask), dim=1 + ) + assert encoder_out is not None y = torch.cat((encoder_out, x), dim=0) else: y = x - torch.cuda.nvtx.range_push('self attn') x, attn = self.self_attn( query=x, key=y, @@ -128,26 +143,27 @@ def forward( need_weights=False, attn_mask=self_attn_mask, ) - torch.cuda.nvtx.range_pop() - x = F.dropout(x, p=self.dropout, training=self.training) - x = residual + x - x = self.maybe_layer_norm(self.self_attn_layer_norm, x, after=True) + x = self.dropout_module(x) + x = self.residual_connection(x, residual) + if not self.normalize_before: + x = self.self_attn_layer_norm(x) - if self.encoder_attn is not None: + if self.encoder_attn is not None and encoder_out is not None: residual = x - x = self.maybe_layer_norm(self.encoder_attn_layer_norm, - x, before=True) + if self.normalize_before: + x = self.encoder_attn_layer_norm(x) if prev_attn_state is not None: - if incremental_state is None: - incremental_state = {} prev_key, prev_value = prev_attn_state[:2] - saved_state = {"prev_key": prev_key, "prev_value": prev_value} + saved_state: Dict[str, Optional[Tensor]] = { + "prev_key": prev_key, + "prev_value": prev_value, + } if len(prev_attn_state) >= 3: saved_state["prev_key_padding_mask"] = prev_attn_state[2] - self.encoder_attn._set_input_buffer(incremental_state, - saved_state) + assert incremental_state is not None + self.encoder_attn._set_input_buffer(incremental_state, saved_state) - torch.cuda.nvtx.range_push('enc dec attn') + x, attn = self.encoder_attn( query=x, key=encoder_out, @@ -155,38 +171,42 @@ def forward( key_padding_mask=encoder_padding_mask, incremental_state=incremental_state, static_kv=True, - need_weights=need_attn or (not - self.training and self.need_attn), + need_weights=need_attn or (not self.training and self.need_attn), need_head_weights=need_head_weights, ) - torch.cuda.nvtx.range_pop() - - x = F.dropout(x, p=self.dropout, training=self.training) - x = residual + x - x = self.maybe_layer_norm(self.encoder_attn_layer_norm, - x, after=True) + + x = self.dropout_module(x) + x = self.residual_connection(x, residual) + if not self.normalize_before: + x = self.encoder_attn_layer_norm(x) + residual = x - x = self.maybe_layer_norm(self.final_layer_norm, x, before=True) + if self.normalize_before: + x = self.final_layer_norm(x) + x = self.activation_fn(self.fc1(x)) - x = F.dropout(x, p=self.activation_dropout, training=self.training) + x = self.activation_dropout_module(x) x = self.fc2(x) - x = F.dropout(x, p=self.dropout, training=self.training) - x = residual + x - x = self.maybe_layer_norm(self.final_layer_norm, x, after=True) + x = self.dropout_module(x) + x = self.residual_connection(x, residual) + if not self.normalize_before: + x = self.final_layer_norm(x) if self.onnx_trace and incremental_state is not None: saved_state = self.self_attn._get_input_buffer(incremental_state) + assert saved_state is not None if self_attn_padding_mask is not None: - self_attn_state = (saved_state["prev_key"], - saved_state["prev_value"], - saved_state["prev_key_padding_mask"]) + self_attn_state = [ + saved_state["prev_key"], + saved_state["prev_value"], + saved_state["prev_key_padding_mask"], + ] else: - self_attn_state = (saved_state["prev_key"], - saved_state["prev_value"]) + self_attn_state = [saved_state["prev_key"], saved_state["prev_value"]] return x, attn, self_attn_state - return x, attn + return x, attn, None @replace(TransformerEncoder, USE_EL_ATTN) -class TransformerEncoderV2(TransformerEncoder): +class TransformerEncoder(TransformerEncoder): """ Transformer encoder consisting of *args.encoder_layers* layers. Each layer is a :class:`TransformerEncoderLayer`. @@ -196,21 +216,29 @@ class TransformerEncoderV2(TransformerEncoder): dictionary (~fairseq.data.Dictionary): encoding dictionary embed_tokens (torch.nn.Embedding): input embedding """ - @classmethod - def create_named_tuple (cls): - EncoderOut = namedtuple('TransformerEncoderOut', [ - 'encoder_out', # T x B x C - 'encoder_out_v', # T x B x C - 'encoder_padding_mask', # B x T - 'encoder_embedding', # B x T x C - 'encoder_states', # List[T x B x C] - ]) + def create_named_tuple(cls): + EncoderOut = NamedTuple( + "TransformerEncoderOut", + [ + ("encoder_out", Tensor), # T x B x C + ("encoder_out_v", Tensor), # B x T x C + ("encoder_padding_mask", Optional[Tensor]), # B x T + ("encoder_embedding", Optional[Tensor]), # B x T x C + ("encoder_states", Optional[List[Tensor]]), # List[T x B x C] + ("src_tokens", Optional[Tensor]), # B x T + ("src_lengths", Optional[Tensor]), # B x 1 + ] + ) return EncoderOut - - def forward(self, src_tokens, src_lengths, cls_input=None, - return_all_hiddens=False, **unused): + def forward( + self, + src_tokens, + src_lengths, + return_all_hiddens: bool = False, + token_embeddings: Optional[torch.Tensor] = None, + ): """ Args: src_tokens (LongTensor): tokens in the source language of shape @@ -219,7 +247,8 @@ def forward(self, src_tokens, src_lengths, cls_input=None, shape `(batch)` return_all_hiddens (bool, optional): also return all of the intermediate hidden states (default: False). - + token_embeddings (torch.Tensor, optional): precomputed embeddings + default `None` will recompute embeddings Returns: namedtuple: - **encoder_out** (Tensor): the last encoder layer's output of @@ -231,103 +260,120 @@ def forward(self, src_tokens, src_lengths, cls_input=None, - **encoder_states** (List[Tensor]): all intermediate hidden states of shape `(src_len, batch, embed_dim)`. Only populated if *return_all_hiddens* is True. - """ - - if self.layer_wise_attention: - return_all_hiddens = True - - x, encoder_embedding = self.forward_embedding(src_tokens) + """ + x, encoder_embedding = self.forward_embedding(src_tokens, token_embeddings) # B x T x C -> T x B x C x = x.transpose(0, 1) # compute padding mask encoder_padding_mask = src_tokens.eq(self.padding_idx) - if not encoder_padding_mask.any(): - encoder_padding_mask = None encoder_states = [] if return_all_hiddens else None # encoder layers for layer in self.layers: - # add LayerDrop (see https://arxiv.org/abs/1909.11556 for description) - dropout_probability = random.uniform(0, 1) - if not self.training or (dropout_probability - > self.encoder_layerdrop): - x = layer(x, encoder_padding_mask) - if return_all_hiddens: - encoder_states.append(x) - - if self.layer_norm: - x = self.layer_norm(x) + x = layer(x, encoder_padding_mask) if return_all_hiddens: - encoder_states[-1] = x + assert encoder_states is not None + encoder_states.append(x) + if self.layer_norm is not None: + x = self.layer_norm(x) - EncoderOut = TransformerEncoder.create_named_tuple() + EncoderOut = self.create_named_tuple() return EncoderOut( - encoder_out=x.permute(1,2,0).contiguous(), # B x C x T - encoder_out_v=x.permute(1,0,2).contiguous(), # B x T x C + encoder_out=x.permute(1, 2, 0).contiguous(), # B x C x T + encoder_out_v=x.permute(1, 0, 2).contiguous(), # B x T x C encoder_padding_mask=encoder_padding_mask, # B x T encoder_embedding=encoder_embedding, # B x T x C encoder_states=encoder_states, # List[T x B x C] + src_tokens=None, + src_lengths=None, ) + @torch.jit.export def reorder_encoder_out(self, encoder_out, new_order, beam_size): """ Reorder encoder output according to *new_order*. Args: encoder_out: output from the ``forward()`` method new_order (LongTensor): desired order - Returns: *encoder_out* rearranged according to *new_order* """ - if encoder_out.encoder_out is not None: - encoder_out = encoder_out._replace( - encoder_out=encoder_out.encoder_out.index_select( + """ + Since encoder_padding_mask and encoder_embedding are both of type + Optional[Tensor] in EncoderOut, they need to be copied as local + variables for Torchscript Optional refinement + """ + encoder_padding_mask: Optional[Tensor] = encoder_out.encoder_padding_mask + encoder_embedding: Optional[Tensor] = encoder_out.encoder_embedding + encoder_states = encoder_out.encoder_states + + new_encoder_out = ( + encoder_out.encoder_out + if encoder_out.encoder_out is None + else encoder_out.encoder_out.index_select( 0, - new_order.reshape(-1, beam_size)[:, 0] // - beam_size)) - if encoder_out.encoder_out_v is not None: - encoder_out = encoder_out._replace( - encoder_out_v=encoder_out.encoder_out_v.index_select( + new_order.reshape(-1, beam_size)[:, 0] // beam_size) + ) + new_encoder_out_v = ( + encoder_out.encoder_out_v + if encoder_out.encoder_out_v is None + else encoder_out.encoder_out_v.index_select( + 0, + new_order.reshape(-1, beam_size)[:, 0] // beam_size) + ) + new_encoder_padding_mask = ( + encoder_padding_mask + if encoder_padding_mask is None + else encoder_padding_mask.index_select( 0, - new_order.reshape(-1, beam_size)[:, 0] // - beam_size)) - - if encoder_out.encoder_padding_mask is not None: - encoder_out = encoder_out._replace( - encoder_padding_mask= - encoder_out.encoder_padding_mask.index_select( - 0, - new_order.reshape(-1, beam_size)[:, 0] // - beam_size)) + new_order.reshape(-1, beam_size)[:, 0] // beam_size) + ) + src_tokens = encoder_out.src_tokens + if src_tokens is not None: + src_tokens = src_tokens.index_select(0, new_order) - return encoder_out + src_lengths = encoder_out.src_lengths + if src_lengths is not None: + src_lengths = src_lengths.index_select(0, new_order) + EncoderOut = TransformerEncoder.create_named_tuple() + return EncoderOut( + encoder_out=new_encoder_out, # T x B x C + encoder_out_v=new_encoder_out_v, # T x B x C + encoder_padding_mask=new_encoder_padding_mask, # B x T + encoder_embedding=encoder_embedding, # B x T x C + encoder_states=encoder_states, # List[T x B x C] + src_tokens=src_tokens, # B x T + src_lengths=src_lengths, # B x 1 + ) @replace(EnsembleModel, USE_EL_ATTN) -class EnsembleModelV2(EnsembleModel): +class EnsembleModel(EnsembleModel): """A wrapper around an ensemble of models.""" def transpose_enc_dec_kv_proj(self): for model in self.models: model.transpose_enc_dec_kv_proj() + # @torch.jit.export def reorder_encoder_out(self, encoder_outs, new_order, beam_size): + new_outs = [] if not self.has_encoder(): - return None - - return [ - model.encoder.reorder_encoder_out(encoder_out, new_order, beam_size) - for model, encoder_out in zip(self.models, encoder_outs) - ] - + return new_outs + for i, model in enumerate(self.models): + assert encoder_outs is not None + new_outs.append( + model.encoder.reorder_encoder_out(encoder_outs[i], new_order, beam_size) + ) + return new_outs @replace(TransformerDecoder, USE_EL_ATTN) -class TransformerDecoderV2(TransformerDecoder): +class TransformerDecoder(TransformerDecoder): """ Transformer decoder consisting of *args.decoder_layers* layers. Each layer is a :class:`TransformerDecoderLayer`. @@ -339,22 +385,19 @@ class TransformerDecoderV2(TransformerDecoder): (default: False). """ - def extract_features( + def extract_features_scriptable( self, prev_output_tokens, - encoder_out=None, - incremental_state=None, - full_context_alignment=False, - alignment_layer=None, - alignment_heads=None, - **unused, + encoder_out = None, + incremental_state: Optional[Dict[str, Dict[str, Optional[Tensor]]]] = None, + full_context_alignment: bool = False, + alignment_layer: Optional[int] = None, + alignment_heads: Optional[int] = None, ): """ Similar to *forward* but only return features. - Includes several features from "Jointly Learning to Align and Translate with Transformer Models" (Garg et al., EMNLP 2019). - Args: full_context_alignment (bool, optional): don't apply auto-regressive mask to self-attention (default: False). @@ -362,20 +405,22 @@ def extract_features( heads at this layer (default: last layer). alignment_heads (int, optional): only average alignment over this many heads (default: all heads). - Returns: tuple: - the decoder's features of shape `(batch, tgt_len, embed_dim)` - a dictionary with any model-specific outputs """ if alignment_layer is None: - alignment_layer = len(self.layers) - 1 + alignment_layer = self.num_layers - 1 # embed positions - positions = self.embed_positions( - prev_output_tokens, - incremental_state=incremental_state, - ) if self.embed_positions is not None else None + positions = ( + self.embed_positions( + prev_output_tokens, incremental_state=incremental_state + ) + if self.embed_positions is not None + else None + ) if incremental_state is not None: prev_output_tokens = prev_output_tokens[:, -1:] @@ -385,61 +430,50 @@ def extract_features( # embed tokens and positions x = self.embed_scale * self.embed_tokens(prev_output_tokens) + if self.quant_noise is not None: + x = self.quant_noise(x) + if self.project_in_dim is not None: x = self.project_in_dim(x) if positions is not None: x += positions - if self.layernorm_embedding: + if self.layernorm_embedding is not None: x = self.layernorm_embedding(x) - x = F.dropout(x, p=self.dropout, training=self.training) + x = self.dropout_module(x) # B x T x C -> T x B x C x = x.transpose(0, 1) - self_attn_padding_mask = None - if (self.cross_self_attention or - prev_output_tokens.eq(self.padding_idx).any()): + self_attn_padding_mask: Optional[Tensor] = None + if self.cross_self_attention or prev_output_tokens.eq(self.padding_idx).any(): self_attn_padding_mask = prev_output_tokens.eq(self.padding_idx) # decoder layers - attn = None - inner_states = [x] + attn: Optional[Tensor] = None + inner_states: List[Optional[Tensor]] = [x] for idx, layer in enumerate(self.layers): - encoder_state = None - if encoder_out is not None: - if self.layer_wise_attention: - encoder_state = encoder_out.encoder_states[idx] - else: - encoder_state = encoder_out.encoder_out - encoder_out_v = encoder_out.encoder_out_v - if incremental_state is None and not full_context_alignment: self_attn_mask = self.buffered_future_mask(x) else: self_attn_mask = None - # add LayerDrop (see https://arxiv.org/abs/1909.11556 for description) - dropout_probability = random.uniform(0, 1) - if not self.training or (dropout_probability - > self.decoder_layerdrop): - x, layer_attn = layer( - x, - encoder_state, - encoder_out_v, - (encoder_out.encoder_padding_mask - if encoder_out is not None else None), - incremental_state, - self_attn_mask=self_attn_mask, - self_attn_padding_mask=self_attn_padding_mask, - need_attn=(idx == alignment_layer), - need_head_weights=(idx == alignment_layer), - ) - inner_states.append(x) - if layer_attn is not None and idx == alignment_layer: - attn = layer_attn.float() + x, layer_attn, _ = layer( + x, + encoder_out.encoder_out if encoder_out is not None else None, + encoder_out.encoder_out_v if encoder_out is not None else None, + encoder_out.encoder_padding_mask if encoder_out is not None else None, + incremental_state, + self_attn_mask=self_attn_mask, + self_attn_padding_mask=self_attn_padding_mask, + need_attn=bool((idx == alignment_layer)), + need_head_weights=bool((idx == alignment_layer)), + ) + inner_states.append(x) + if layer_attn is not None and idx == alignment_layer: + attn = layer_attn.float().to(x) if attn is not None: if alignment_heads is not None: @@ -448,7 +482,7 @@ def extract_features( # average probabilities over heads attn = attn.mean(dim=0) - if self.layer_norm: + if self.layer_norm is not None: x = self.layer_norm(x) # T x B x C -> B x T x C @@ -457,11 +491,11 @@ def extract_features( if self.project_out_dim is not None: x = self.project_out_dim(x) - return x, {'attn': attn, 'inner_states': inner_states} + return x, {"attn": [attn], "inner_states": inner_states} @replace(FairseqEncoderDecoderModel, USE_EL_ATTN) -class FairseqEncoderDecoderModelV2(FairseqEncoderDecoderModel): +class FairseqEncoderDecoderModel(FairseqEncoderDecoderModel): """class for encoder-decoder models. Args: encoder (FairseqEncoder): the encoder @@ -498,15 +532,14 @@ def transpose_enc_dec_kv_proj (self): del self.decoder.layers[i].encoder_attn.k_proj del self.decoder.layers[i].encoder_attn.v_proj - @replace(TransformerModel, USE_EL_ATTN) -class TransformerModelV2(TransformerModel): +class TransformerModel(TransformerModel): """ Represent the BART model.""" def make_generation_fast_(self, **kwargs): super().make_generation_fast_(**kwargs) # pylint: disable=bad-super-call @replace(MultiheadAttention, USE_EL_ATTN) -class MultiheadAttentionV2(MultiheadAttention): +class MultiheadAttention(MultiheadAttention): """Multi-headed attention. See "Attention Is All You Need" for more details. @@ -522,17 +555,19 @@ def __init__(self, add_bias_kv=False, add_zero_attn=False, self_attention=False, - encoder_decoder_attention=False): + encoder_decoder_attention=False, + q_noise=0.0, + qn_block_size=8,): super().__init__(embed_dim, num_heads, kdim, vdim, dropout, bias, add_bias_kv, add_zero_attn, self_attention, - encoder_decoder_attention) + encoder_decoder_attention, q_noise, qn_block_size) self.beam_size = 1 self.tpu = False - self.k_proj_weight_t = None - self.k_proj_bias_t = None - self.v_proj_weight_t = None - self.v_proj_bias_t = None + self.k_proj_weight_t = torch.empty([0]) + self.k_proj_bias_t = torch.empty([0]) + self.v_proj_weight_t = torch.empty([0]) + self.v_proj_bias_t = torch.empty([0]) def apply_sparse_mask( self, attn_weights, tgt_len: int, src_len: int, bsz: int): @@ -541,18 +576,17 @@ def apply_sparse_mask( def forward( self, query, - key, - value, - key_padding_mask=None, - incremental_state=None, - need_weights=True, - static_kv=False, - attn_mask=None, - before_softmax=False, - need_head_weights=False, - ): + key: Optional[Tensor], + value: Optional[Tensor], + key_padding_mask: Optional[Tensor] = None, + incremental_state: Optional[Dict[str, Dict[str, Optional[Tensor]]]] = None, + need_weights: bool = True, + static_kv: bool = False, + attn_mask: Optional[Tensor] = None, + before_softmax: bool = False, + need_head_weights: bool = False, + ) -> Tuple[Tensor, Optional[Tensor]]: """Input shape: Time x Batch x Channel - Args: key_padding_mask (ByteTensor, optional): mask to exclude keys that are pads, of shape `(batch, src_len)`, where @@ -568,18 +602,24 @@ def forward( weights for each head. Implies *need_weights*. Default: return the average attention weights over all heads. """ - if need_head_weights: need_weights = True tgt_len, bsz, embed_dim = query.size() + kv_bsz = -1 assert embed_dim == self.embed_dim assert list(query.size()) == [tgt_len, bsz, embed_dim] - if (self.enable_torch_version and - not self.onnx_trace and - incremental_state is None and - not static_kv): + if ( + not self.onnx_trace + and not self.tpu # don't use PyTorch version on TPUs + and incremental_state is None + and not static_kv + # A workaround for quantization to work. Otherwise JIT compilation + # treats bias in linear module as method. + and not torch.jit.is_scripting() + ): + assert key is not None and value is not None return F.multi_head_attention_forward( query, key, @@ -587,41 +627,38 @@ def forward( self.embed_dim, self.num_heads, torch.empty([0]), - torch.cat( - (self.q_proj.bias, self.k_proj.bias, self.v_proj.bias)), + torch.cat((self.q_proj.bias, self.k_proj.bias, self.v_proj.bias)), self.bias_k, self.bias_v, self.add_zero_attn, - self.dropout, + self.dropout_module.p, self.out_proj.weight, self.out_proj.bias, - self.training, + self.training or self.dropout_module.apply_during_inference, key_padding_mask, need_weights, attn_mask, use_separate_proj_weight=True, q_proj_weight=self.q_proj.weight, k_proj_weight=self.k_proj.weight, - v_proj_weight=self.v_proj.weight) - + v_proj_weight=self.v_proj.weight, + ) if incremental_state is not None: saved_state = self._get_input_buffer(incremental_state) else: saved_state = None + # Get q, k, v if self.self_attention: q = self.q_proj(query) k = self.k_proj(query) v = self.v_proj(query) elif self.encoder_decoder_attention: - - kv_bsz = key.size(0) - src_len = key.size(2) - tgt_len = 1 + assert key is not None + kv_bsz = key.size(0) embed_dim = key.size(1) - - torch.cuda.nvtx.range_push('Q reshape') + tgt_len = 1 q = torch.addmm(self.q_proj.bias.view(1, -1), query.view(-1,embed_dim), self.q_proj.weight.T, beta=self.scaling, alpha=self.scaling) @@ -630,86 +667,92 @@ def forward( .view(bsz, self.num_heads, self.head_dim) .transpose(0, 1) ) - torch.cuda.nvtx.range_pop() - k, v = None, None else: + assert key is not None and value is not None q = self.q_proj(query) k = self.k_proj(key) v = self.v_proj(value) - + if not self.encoder_decoder_attention: q *= self.scaling - - if not self.encoder_decoder_attention: if self.bias_k is not None: assert self.bias_v is not None k = torch.cat([k, self.bias_k.repeat(1, bsz, 1)]) v = torch.cat([v, self.bias_v.repeat(1, bsz, 1)]) if attn_mask is not None: attn_mask = torch.cat( - [attn_mask, attn_mask.new_zeros(attn_mask.size(0), 1)], - dim=1) + [attn_mask, attn_mask.new_zeros(attn_mask.size(0), 1)], dim=1 + ) if key_padding_mask is not None: key_padding_mask = torch.cat( - [key_padding_mask, - key_padding_mask.new_zeros( - key_padding_mask.size(0), 1)], - dim=1) + [ + key_padding_mask, + key_padding_mask.new_zeros(key_padding_mask.size(0), 1), + ], + dim=1, + ) + q = ( + q.contiguous() + .view(tgt_len, bsz * self.num_heads, self.head_dim) + .transpose(0, 1) + ) - q = q.contiguous().view(tgt_len, bsz * self.num_heads, - self.head_dim).transpose(0, 1) if k is not None: kv_bsz = k.size(1) - k = k.contiguous().view(-1, kv_bsz * self.num_heads, - self.head_dim).transpose(0, 1) + k = ( + k.contiguous() + .view(-1, kv_bsz * self.num_heads, self.head_dim) + .transpose(0, 1) + ) if v is not None: assert kv_bsz - v = v.contiguous().view(-1, kv_bsz * self.num_heads, - self.head_dim).transpose(0, 1) - - - if saved_state is not None and not self.encoder_decoder_attention: - # saved states are stored with shape (bsz, num_heads, seq_len, head_dim) - if 'prev_key' in saved_state: - saved_prev_key = saved_state["prev_key"] - assert saved_prev_key is not None - kv_bsz = saved_prev_key.size(0) - prev_key = saved_prev_key.view(kv_bsz * self.num_heads, -1, - self.head_dim) - assert k is not None - k = torch.cat((prev_key, k), dim=1) - if 'prev_value' in saved_state: - saved_prev_value = saved_state["prev_value"] - assert saved_prev_value is not None - assert kv_bsz == saved_prev_value.size(0) - prev_value = saved_prev_value.view(kv_bsz * self.num_heads, -1, - self.head_dim) - assert v is not None - v = torch.cat([prev_value, v], dim=1) - prev_key_padding_mask: Optional[Tensor] = None - if "prev_key_padding_mask" in saved_state: - prev_key_padding_mask = saved_state["prev_key_padding_mask"] - assert k is not None and v is not None - - key_padding_mask = self._append_prev_key_padding_mask( - key_padding_mask=key_padding_mask, - prev_key_padding_mask=prev_key_padding_mask, - batch_size=kv_bsz, - src_len=k.size(1), - static_kv=static_kv, - ) + v = ( + v.contiguous() + .view(-1, kv_bsz * self.num_heads, self.head_dim) + .transpose(0, 1) + ) - saved_state['prev_key'] = k.view(kv_bsz, self.num_heads, -1, - self.head_dim) - saved_state['prev_value'] = v.view(kv_bsz, self.num_heads, -1, - self.head_dim) - saved_state['prev_key_padding_mask'] = key_padding_mask - # In this branch incremental_state is never None - assert incremental_state is not None - self._set_input_buffer(incremental_state, saved_state) + if saved_state is not None: + # saved states are stored with shape (bsz, num_heads, seq_len, head_dim) + if "prev_key" in saved_state: + _prev_key = saved_state["prev_key"] + assert _prev_key is not None + kv_bsz = _prev_key.size(0) + prev_key = _prev_key.view(kv_bsz * self.num_heads, -1, self.head_dim) + assert k is not None + k = torch.cat([prev_key, k], dim=1) + if "prev_value" in saved_state: + _prev_value = saved_state["prev_value"] + assert _prev_value is not None + assert kv_bsz == _prev_value.size(0) + prev_value = _prev_value.view(kv_bsz * self.num_heads, -1, self.head_dim) + assert v is not None + v = torch.cat([prev_value, v], dim=1) + prev_key_padding_mask: Optional[Tensor] = None + if "prev_key_padding_mask" in saved_state: + prev_key_padding_mask = saved_state["prev_key_padding_mask"] + assert k is not None and v is not None + key_padding_mask = MultiheadAttention._append_prev_key_padding_mask( + key_padding_mask=key_padding_mask, + prev_key_padding_mask=prev_key_padding_mask, + batch_size=kv_bsz, + src_len=k.size(1), + static_kv=static_kv, + ) - if not self.encoder_decoder_attention: src_len = k.size(1) + saved_state["prev_key"] = k.view(kv_bsz, self.num_heads, -1, self.head_dim) + saved_state["prev_value"] = v.view(kv_bsz, self.num_heads, -1, self.head_dim) + saved_state["prev_key_padding_mask"] = key_padding_mask + # In this branch incremental_state is never None + assert incremental_state is not None + incremental_state = self._set_input_buffer(incremental_state, saved_state) + + assert key is not None + src_len = key.size(2) + if not self.encoder_decoder_attention: + assert k is not None + src_len = k.size(1) # This is part of a workaround to get around fork/join parallelism # not supporting Optional types. @@ -717,33 +760,28 @@ def forward( key_padding_mask = None if self.add_zero_attn: + assert v is not None and k is not None src_len += 1 - k = torch.cat([k, k.new_zeros((k.size(0), 1) + k.size()[2:])], - dim=1) - v = torch.cat([v, v.new_zeros((v.size(0), 1) + v.size()[2:])], - dim=1) + k = torch.cat([k, k.new_zeros((k.size(0), 1) + k.size()[2:])], dim=1) + v = torch.cat([v, v.new_zeros((v.size(0), 1) + v.size()[2:])], dim=1) if attn_mask is not None: attn_mask = torch.cat( - [attn_mask, - attn_mask.new_zeros(attn_mask.size(0), 1)], - dim=1) + [attn_mask, attn_mask.new_zeros(attn_mask.size(0), 1)], dim=1 + ) if key_padding_mask is not None: - key_padding_mask = torch.cat([ - key_padding_mask, - torch.zeros(key_padding_mask.size(0), - 1).type_as(key_padding_mask) - ], - dim=1) + key_padding_mask = torch.cat( + [ + key_padding_mask, + torch.zeros(key_padding_mask.size(0), 1).type_as( + key_padding_mask + ), + ], + dim=1, + ) if self.encoder_decoder_attention: - - torch.cuda.nvtx.range_push('bmm_q_k_proj_weight') q_w = torch.bmm(q, self.k_proj_weight_t) - torch.cuda.nvtx.range_pop() - torch.cuda.nvtx.range_push('bmm_q_k_proj_bias') q_b = torch.bmm(q, self.k_proj_bias_t) - torch.cuda.nvtx.range_pop() - torch.cuda.nvtx.range_push('q_w_reshape') q_b = (q_b.view(self.num_heads, kv_bsz, self.beam_size, 1) .transpose(0,1) .reshape(kv_bsz, self.num_heads*self.beam_size, 1) @@ -754,20 +792,12 @@ def forward( .contiguous() .view(kv_bsz, self.num_heads*self.beam_size, embed_dim) ) - torch.cuda.nvtx.range_pop() - - torch.cuda.nvtx.range_push('bmm_q_w_key') attn_weights = torch.bmm(q_w, key) - torch.cuda.nvtx.range_pop() - torch.cuda.nvtx.range_push('add_attn_weight_q_b') attn_weights = attn_weights + q_b - torch.cuda.nvtx.range_pop() else: - torch.cuda.nvtx.range_push('Q_K') + assert k is not None attn_weights = torch.bmm(q, k.transpose(1, 2)) - torch.cuda.nvtx.range_pop() - attn_weights = self.apply_sparse_mask( - attn_weights, tgt_len, src_len, bsz) + attn_weights = self.apply_sparse_mask(attn_weights, tgt_len, src_len, bsz) if attn_mask is not None: attn_mask = attn_mask.unsqueeze(0) @@ -777,103 +807,77 @@ def forward( if key_padding_mask is not None: # don't attend to padding symbols - attn_weights = attn_weights.view(bsz, self.num_heads, tgt_len, - src_len) + attn_weights = attn_weights.view(bsz, self.num_heads, tgt_len, src_len) if not self.tpu: if not self.encoder_decoder_attention: - attn_weights = attn_weights.view(kv_bsz, -1, self.num_heads, - tgt_len, src_len) attn_weights = attn_weights.masked_fill( - key_padding_mask.unsqueeze(1).unsqueeze(2).unsqueeze(3).to( - torch.bool), float("-inf")) + key_padding_mask.unsqueeze(1).unsqueeze(2).to(torch.bool), + float("-inf"), + ) else: attn_weights = attn_weights.view(kv_bsz, self.num_heads,-1, tgt_len, src_len) attn_weights = attn_weights.masked_fill( key_padding_mask.unsqueeze(1).unsqueeze(2).unsqueeze(3).to( torch.bool), float("-inf")) - else: attn_weights = attn_weights.transpose(0, 2) - attn_weights = attn_weights.masked_fill( - key_padding_mask, float('-inf')) + attn_weights = attn_weights.masked_fill(key_padding_mask, float("-inf")) attn_weights = attn_weights.transpose(0, 2) - if not self.encoder_decoder_attention: - attn_weights = attn_weights.view(bsz * self.num_heads, tgt_len, - src_len) + attn_weights = attn_weights.view(bsz * self.num_heads, tgt_len, src_len) if before_softmax: - #TODO return attn_weights, v - attn_weights_float = utils.softmax(attn_weights, - dim=-1, - onnx_trace=self.onnx_trace) + attn_weights_float = utils.softmax( + attn_weights, dim=-1, onnx_trace=self.onnx_trace + ) attn_weights = attn_weights_float.type_as(attn_weights) - attn_probs = F.dropout(attn_weights, - p=self.dropout, - training=self.training) + attn_probs = self.dropout_module(attn_weights) if self.encoder_decoder_attention: - + assert value is not None attn_probs = attn_probs.view( kv_bsz, self.num_heads*self.beam_size*tgt_len, src_len) - - torch.cuda.nvtx.range_push('bmm_attn_prob_value') attn_h = torch.bmm(attn_probs, value) - torch.cuda.nvtx.range_pop() - - torch.cuda.nvtx.range_push('attn_h_reshape') attn_h = (attn_h.view(kv_bsz, self.num_heads, self.beam_size, embed_dim) .transpose(0,1) .contiguous() .view(self.num_heads, kv_bsz*self.beam_size, embed_dim) ) - torch.cuda.nvtx.range_pop() - - torch.cuda.nvtx.range_push('bmm_attn_h_v_proj_weight') + attn = torch.bmm(attn_h, self.v_proj_weight_t) - torch.cuda.nvtx.range_pop() - - torch.cuda.nvtx.range_push('attn reshape') + attn = (attn .transpose(0,1) .contiguous() .view(1, kv_bsz*self.beam_size, self.num_heads*self.head_dim) ) - torch.cuda.nvtx.range_pop() # (1, kv_bsz*beam, self.num_heads*self.head_dim) - torch.cuda.nvtx.range_push('add_attn_v_proj_bias') attn = attn + self.v_proj_bias_t - torch.cuda.nvtx.range_pop() - - torch.cuda.nvtx.range_push('attn_reshape') attn = attn.view(1, -1, self.head_dim).transpose(0,1).contiguous() - torch.cuda.nvtx.range_pop() else: - torch.cuda.nvtx.range_push('A_V') + assert v is not None attn = torch.bmm(attn_probs, v) - torch.cuda.nvtx.range_pop() - assert list( - attn.size()) == [bsz * self.num_heads, tgt_len, self.head_dim] - if (self.onnx_trace and attn.size(1) == 1): + + assert list(attn.size()) == [bsz * self.num_heads, tgt_len, self.head_dim] + if self.onnx_trace and attn.size(1) == 1: # when ONNX tracing a single decoder step (sequence length == 1) # the transpose is a no-op copy before view, thus unnecessary attn = attn.contiguous().view(tgt_len, bsz, embed_dim) else: - attn = attn.transpose(0, - 1).contiguous().view(tgt_len, bsz, embed_dim) + attn = attn.transpose(0, 1).contiguous().view(tgt_len, bsz, embed_dim) attn = self.out_proj(attn) - + attn_weights: Optional[Tensor] = None if need_weights: - attn_weights = attn_weights_float.view(bsz, self.num_heads, - tgt_len, - src_len).transpose(1, 0) + attn_weights = attn_weights_float.view( + bsz, self.num_heads, tgt_len, src_len + ).transpose(1, 0) if not need_head_weights: # average attention weights over heads attn_weights = attn_weights.mean(dim=0) @@ -890,9 +894,10 @@ def reorder_incremental_state(self, incremental_state, new_order): input_buffer_k = input_buffer[k] if input_buffer[k] is not None: if self.encoder_decoder_attention: - if (input_buffer_k.size( - 0) * self.beam_size == new_order.size(0)): + if (input_buffer_k.size(0) * self.beam_size == new_order.size(0)): return incremental_state + elif (input_buffer_k.size(0) == new_order.size(0)): + break elif self.beam_size > 1: input_buffer[k] = input_buffer_k.index_select( 0, @@ -915,53 +920,184 @@ def make_generation_fast_(self, beamable_mm_beam_size=None, **kwargs): @replace(SequenceGenerator, USE_EL_ATTN) -class SequenceGeneratorV2(SequenceGenerator): +class SequenceGenerator(SequenceGenerator): """ Sequence Generator is optimized by reducing the cached memory usage during the encoding period for beam search. """ + def finalize_hypos( + self, + step: int, + bbsz_idx, + eos_scores, + tokens, + scores, + finalized: List[List[Dict[str, Tensor]]], + finished: List[bool], + beam_size: int, + attn: Optional[Tensor], + src_lengths, + max_len: int, + ): + """Finalize hypothesis, store finalized information in `finalized`, and change `finished` accordingly. + A sentence is finalized when {beam_size} finished items have been collected for it. + Returns number of sentences (not beam items) being finalized. + These will be removed from the batch and not processed further. + Args: + bbsz_idx (Tensor): + """ + assert bbsz_idx.numel() == eos_scores.numel() + + # clone relevant token and attention tensors. + # tokens is (batch * beam, max_len). So the index_select + # gets the newly EOS rows, then selects cols 1..{step + 2} + tokens_clone = tokens.index_select(0, bbsz_idx)[ + :, 1 : step + 2 + ] # skip the first index, which is EOS + + tokens_clone[:, step] = self.eos + attn_clone = ( + attn.index_select(0, bbsz_idx)[:, :, 1 : step + 2] + if attn is not None + else None + ) + + # compute scores per token position + pos_scores = scores.index_select(0, bbsz_idx)[:, : step + 1] + pos_scores[:, step] = eos_scores + # convert from cumulative to per-position scores + pos_scores[:, 1:] = pos_scores[:, 1:] - pos_scores[:, :-1] + + # normalize sentence-level scores + if self.normalize_scores: + eos_scores /= (step + 1) ** self.len_penalty + + # cum_unfin records which sentences in the batch are finished. + # It helps match indexing between (a) the original sentences + # in the batch and (b) the current, possibly-reduced set of + # sentences. + cum_unfin: List[int] = [] + prev = 0 + for f in finished: + if f: + prev += 1 + else: + cum_unfin.append(prev) + + # set() is not supported in script export + + # The keys here are of the form "{sent}_{unfin_idx}", where + # "unfin_idx" is the index in the current (possibly reduced) + # list of sentences, and "sent" is the index in the original, + # unreduced batch + sents_seen = set() + + # For every finished beam item + for i, (idx, score) in enumerate( + zip(bbsz_idx.tolist(), eos_scores.tolist())): + # sentence index in the current (possibly reduced) batch + unfin_idx = idx // beam_size + # sentence index in the original (unreduced) batch + sent = unfin_idx + cum_unfin[unfin_idx] + + sents_seen.add((sent, unfin_idx)) + + if self.match_source_len and step > src_lengths[unfin_idx]: + score = torch.tensor(-math.inf).to(score) + + # An input sentence (among those in a batch) is finished when + # beam_size hypotheses have been collected for it + if len(finalized[sent]) < beam_size: + if attn_clone is not None: + # remove padding tokens from attn scores + hypo_attn = attn_clone[i] + else: + hypo_attn = torch.empty(0) + + finalized[sent].append( + { + "tokens": tokens_clone[i], + "score": score, + "attention": hypo_attn, # src_len x tgt_len + "alignment": torch.empty(0), + "positional_scores": pos_scores[i], + } + ) + + newly_finished: List[int] = [] + + for sent, unfin_idx in sents_seen: + # check termination conditions for this sentence + if not finished[sent] and self.is_finished( + step, unfin_idx, max_len, len(finalized[sent]), beam_size + ): + finished[sent] = True + newly_finished.append(unfin_idx) + return newly_finished @torch.no_grad() - def _generate(self, - model, - sample, - prefix_tokens=None, - bos_token=None, - **kwargs): - - if not self.retain_dropout: - model.eval() - - # model.forward normally channels prev_output_tokens into the decoder - # separately, but SequenceGenerator directly calls model.encoder - encoder_input = { - k: v - for k, v in sample['net_input'].items() - if k != 'prev_output_tokens' - } - - src_tokens = encoder_input['src_tokens'] - src_lengths = (src_tokens.ne(self.eos) - & src_tokens.ne(self.pad)).long().sum(dim=1) - input_size = src_tokens.size() - # batch dimension goes first followed by source lengths - bsz = input_size[0] - src_len = input_size[1] + def _generate( + self, + sample: Dict[str, Dict[str, Tensor]], + prefix_tokens: Optional[Tensor] = None, + constraints: Optional[Tensor] = None, + bos_token: Optional[int] = None, + ): + + incremental_states = torch.jit.annotate( + List[Dict[str, Dict[str, Optional[Tensor]]]], + [ + torch.jit.annotate(Dict[str, Dict[str, Optional[Tensor]]], {}) + for i in range(self.model.models_size) + ], + ) + net_input = sample["net_input"] + + if "src_tokens" in net_input: + src_tokens = net_input["src_tokens"] + # length of the source text being the character length except EndOfSentence and pad + src_lengths = ( + (src_tokens.ne(self.eos) & src_tokens.ne(self.pad)).long().sum(dim=1) + ) + elif "source" in net_input: + src_tokens = net_input["source"] + src_lengths = ( + net_input["padding_mask"].size(-1) - net_input["padding_mask"].sum(-1) + if net_input["padding_mask"] is not None + else torch.tensor(src_tokens.size(-1)).to(src_tokens) + ) + else: + raise Exception("expected src_tokens or source in net input") + + # bsz: total number of sentences in beam + # Note that src_tokens may have more than 2 dimenions (i.e. audio features) + bsz, src_len = src_tokens.size()[:2] beam_size = self.beam_size self.no_repeat_ngram_op = NGramRepeatBlock() + if constraints is not None and not self.search.supports_constraints: + raise NotImplementedError( + "Target-side constraints were provided, but search method doesn't support them" + ) + + # Initialize constraints, when active + self.search.init_constraints(constraints, beam_size) + + max_len: int = -1 if self.match_source_len: max_len = src_lengths.max().item() else: max_len = min( int(self.max_len_a * src_len + self.max_len_b), # exclude the EOS marker - model.max_decoder_positions() - 1, + self.model.max_decoder_positions() - 1, ) + assert ( + self.min_len <= max_len + ), "min_len cannot be larger than max_len, please adjust these!" EncoderOut = TransformerEncoder.create_named_tuple() - - + def merge_encoder_out(encoder_out_list: List[Optional[EncoderOut]]): encoder_out = torch.cat([ o.encoder_out for o in encoder_out_list], dim=0) @@ -989,11 +1125,13 @@ def merge_encoder_out(encoder_out_list: List[Optional[EncoderOut]]): encoder_embedding=encoder_embedding, # B x T x C encoder_out_v=encoder_out_v, # B x T x C encoder_states=None, # List[T x B x C] + src_tokens=None, + src_lengths=None, )] # compute the encoder output for each beam + max_batch_size = math.ceil(2_147_483_647 / (src_len*src_len*16) / 4) - #max_batch_size =32 sub_batch_size = 1 while sub_batch_size * 2 <= max_batch_size: sub_batch_size *= 2 @@ -1009,327 +1147,246 @@ def merge_encoder_out(encoder_out_list: List[Optional[EncoderOut]]): split_src_tokens, split_src_lengths): split_input = {'src_tokens': sub_src_tokens, 'src_lengths': sub_src_lengths} - split_output = model.forward_encoder(split_input) + split_output = self.model.forward_encoder(split_input) + encoder_out_list.append(split_output[0]) + encoder_outs = merge_encoder_out(encoder_out_list) + else: - encoder_outs = model.forward_encoder(encoder_input) + encoder_outs = self.model.forward_encoder(net_input) + - - # compute the encoder output for each beam - #encoder_outs = model.forward_encoder(encoder_input) + # placeholder of indices for bsz * beam_size to hold tokens and accumulative scores new_order = torch.arange(bsz).view(-1, 1).repeat(1, beam_size).view(-1) new_order = new_order.to(src_tokens.device).long() - #encoder_outs = model.reorder_encoder_out(encoder_outs, new_order, False) + # ensure encoder_outs is a List. + assert encoder_outs is not None + # initialize buffers - scores = src_tokens.new(bsz * beam_size, max_len + 1).float().fill_(0) - scores_buf = scores.clone() - tokens = src_tokens.new(bsz * beam_size, - max_len + 2).long().fill_(self.pad) - tokens_buf = tokens.clone() + + scores = ( + torch.zeros(bsz * beam_size, max_len + 1).to(src_tokens).float() + ) # +1 for eos; pad is never chosen for scoring + tokens = ( + torch.zeros(bsz * beam_size, max_len + 2) + .to(src_tokens) + .long() + .fill_(self.pad) + ) # +2 for eos and pad tokens[:, 0] = self.eos if bos_token is None else bos_token - attn, attn_buf = None, None + attn: Optional[Tensor] = None - # The blacklist indicates candidates that should be ignored. + # A list that indicates candidates that should be ignored. # For example, suppose we're sampling and have already finalized 2/5 - # samples. Then the blacklist would mark 2 positions as being ignored, + # samples. Then cands_to_ignore would mark 2 positions as being ignored, # so that we only finalize the remaining 3 samples. - blacklist = src_tokens.new_zeros(bsz, beam_size).eq( - -1) # forward and backward-compatible False mask + cands_to_ignore = ( + torch.zeros(bsz, beam_size).to(src_tokens).eq(-1) + ) # forward and backward-compatible False mask # list of completed sentences - finalized = [[] for i in range(bsz)] - finished = [False for i in range(bsz)] - num_remaining_sent = bsz + finalized = torch.jit.annotate( + List[List[Dict[str, Tensor]]], + [torch.jit.annotate(List[Dict[str, Tensor]], []) for i in range(bsz)], + ) # contains lists of dictionaries of infomation about the hypothesis being finalized at each step + + finished = [ + False for i in range(bsz) + ] # a boolean array indicating if the sentence at the index is finished or not + num_remaining_sent = bsz # number of sentences remaining # number of candidate hypos per step cand_size = 2 * beam_size # 2 x beam size in case half are EOS # offset arrays for converting between different indexing schemes - bbsz_offsets = (torch.arange(0, bsz) * - beam_size).unsqueeze(1).type_as(tokens) + bbsz_offsets = (torch.arange(0, bsz) * beam_size).unsqueeze(1).type_as(tokens) cand_offsets = torch.arange(0, cand_size).type_as(tokens) + - # helper function for allocating buffers on the fly - buffers = {} - - def buffer(name, type_of=tokens): # noqa - if name not in buffers: - buffers[name] = type_of.new() - return buffers[name] - - def is_finished(sent, step, unfin_idx): - """ - Check whether we've finished generation for a given sentence, by - comparing the worst score among finalized hypotheses to the best - possible score among unfinalized hypotheses. - """ - assert len(finalized[sent]) <= beam_size - if len(finalized[sent]) == beam_size or step == max_len: - return True - return False - - def apply_no_repeat_ngram_cpu(self, tokens,lprobs, bsz,step, - beam_size, no_repeat_ngram_size): - """ Fairseq implementation of blocking - repeated ngrams - """ - banned_list = [[] for bbsz_idx in range(bsz * beam_size)] - cpu_tokens = tokens.cpu()[:, :step + 1].numpy() - check_start_pos = step + 2 - no_repeat_ngram_size - for bbsz_idx in range(bsz * beam_size): - for i in range(check_start_pos): - is_banned = True - for k in range(no_repeat_ngram_size - 1): - if cpu_tokens[bbsz_idx, i + k] != cpu_tokens[ - bbsz_idx, check_start_pos + k]: - is_banned = False - break - if is_banned: - banned_list[bbsz_idx].append( - cpu_tokens[bbsz_idx, - i + no_repeat_ngram_size - 1]) - - def calculate_banned_tokens(bbsz_idx): - """before decoding the next token, prevent decoding - of ngrams that have already appeared - """ - banned_tokens_per_sample = [ - (bbsz_idx, t) for t in banned_list[bbsz_idx] - ] - return banned_tokens_per_sample - - banned_tokens = [] - if step + 2 - no_repeat_ngram_size >= 0: - for bbsz_idx in range(bsz * beam_size): - banned_tokens.extend(calculate_banned_tokens(bbsz_idx)) - - if banned_tokens: - banned_tokens = torch.LongTensor(banned_tokens) - lprobs.index_put_( - tuple(banned_tokens.t()), - lprobs.new_tensor([-math.inf] * len(banned_tokens))) - - return lprobs - - def finalize_hypos(step, bbsz_idx, eos_scores): - """ - Finalize the given hypotheses at this step, while keeping the total - number of finalized hypotheses per sentence <= beam_size. - - Note: the input must be in the desired finalization order, so that - hypotheses that appear earlier in the input are preferred to those - that appear later. - - Args: - step: current time step - bbsz_idx: A vector of indices in the range [0, bsz*beam_size), - indicating which hypotheses to finalize - eos_scores: A vector of the same size as bbsz_idx containing - scores for each hypothesis - """ - assert bbsz_idx.numel() == eos_scores.numel() - - # clone relevant token and attention tensors - tokens_clone = tokens.index_select(0, bbsz_idx) - tokens_clone = tokens_clone[:, 1:step + - 2] # skip the first index, which is EOS - assert not tokens_clone.eq(self.eos).any() - tokens_clone[:, step] = self.eos - attn_clone = attn.index_select( - 0, bbsz_idx)[:, :, 1:step + 2] if attn is not None else None - - # compute scores per token position - pos_scores = scores.index_select(0, bbsz_idx)[:, :step + 1] - pos_scores[:, step] = eos_scores - # convert from cumulative to per-position scores - pos_scores[:, 1:] = pos_scores[:, 1:] - pos_scores[:, :-1] - - # normalize sentence-level scores - if self.normalize_scores: - eos_scores /= (step + 1)**self.len_penalty - - cum_unfin = [] - prev = 0 - for f in finished: - if f: - prev += 1 - else: - cum_unfin.append(prev) - - - sents_seen = set() - for i, (idx, score) in enumerate( - zip(bbsz_idx.tolist(), eos_scores.tolist())): - unfin_idx = idx // beam_size - sent = unfin_idx + cum_unfin[unfin_idx] - - sents_seen.add((sent, unfin_idx)) - - if self.match_source_len and step > src_lengths[unfin_idx]: - score = -math.inf - - def get_hypo(): - - if attn_clone is not None: - # remove padding tokens from attn scores - hypo_attn = attn_clone[i] - else: - hypo_attn = None - - return { - 'tokens': tokens_clone[i], - 'score': score, - 'attention': hypo_attn, # src_len x tgt_len - 'alignment': None, - 'positional_scores': pos_scores[i], - } - - if len(finalized[sent]) < beam_size: - finalized[sent].append(get_hypo()) - - newly_finished = [] - for sent, unfin_idx in sents_seen: - # check termination conditions for this sentence - if not finished[sent] and is_finished(sent, step, unfin_idx): - finished[sent] = True - newly_finished.append(unfin_idx) - return newly_finished + reorder_state: Optional[Tensor] = None + batch_idxs: Optional[Tensor] = None + original_batch_idxs: Optional[Tensor] = None + if "id" in sample and isinstance(sample["id"], Tensor): + original_batch_idxs = sample["id"] + else: + original_batch_idxs = torch.arange(0, bsz).type_as(tokens) - reorder_state = None - batch_idxs = None for step in range(max_len + 1): # one extra step for EOS marker # reorder decoder internal states based on the prev choice of beams if reorder_state is not None: if batch_idxs is not None: # update beam indices to take into account removed sentences - corr = batch_idxs - torch.arange( - batch_idxs.numel()).type_as(batch_idxs) + + corr = batch_idxs - torch.arange(batch_idxs.numel()).type_as( + batch_idxs + ) reorder_state.view(-1, beam_size).add_( - corr.unsqueeze(-1) * beam_size) - model.reorder_incremental_state(reorder_state) - encoder_outs = model.reorder_encoder_out( - encoder_outs, reorder_state, self.beam_size) - - lprobs, avg_attn_scores = model.forward_decoder( - tokens[:, :step + 1], + corr.unsqueeze(-1) * beam_size + ) + original_batch_idxs = original_batch_idxs[batch_idxs] + + self.model.reorder_incremental_state(incremental_states, reorder_state) + + encoder_outs = self.model.reorder_encoder_out( + encoder_outs, reorder_state, beam_size + ) + + lprobs, avg_attn_scores = self.model.forward_decoder( + tokens[:, : step + 1], encoder_outs, - temperature=self.temperature, + incremental_states, + self.temperature, ) + + if self.lm_model is not None: + lm_out = self.lm_model(tokens[:, : step + 1]) + probs = self.lm_model.get_normalized_probs( + lm_out, log_probs=True, sample=None + ) + probs = probs[:, -1, :] * self.lm_weight + lprobs += probs + + + lprobs[lprobs != lprobs] = torch.tensor(-math.inf).to(lprobs) lprobs[:, self.pad] = -math.inf # never select pad lprobs[:, self.unk] -= self.unk_penalty # apply unk penalty + # handle max length constraint if step >= max_len: + lprobs[:, :self.eos] = -math.inf lprobs[:, self.eos + 1:] = -math.inf + # handle prefix tokens (possibly with different lengths) - if prefix_tokens is not None and step < prefix_tokens.size( - 1) and step < max_len: - prefix_toks = prefix_tokens[:, step].unsqueeze(-1).repeat( - 1, beam_size).view(-1) - prefix_lprobs = lprobs.gather(-1, prefix_toks.unsqueeze(-1)) - prefix_mask = prefix_toks.ne(self.pad) - lprobs[prefix_mask] = -math.inf - lprobs[prefix_mask] = lprobs[prefix_mask].scatter_( - -1, prefix_toks[prefix_mask].unsqueeze(-1), - prefix_lprobs[prefix_mask]) - # if prefix includes eos, then we should make sure tokens and - # scores are the same across all beams - eos_mask = prefix_toks.eq(self.eos) - if eos_mask.any(): - # validate that the first beam matches the prefix - first_beam = tokens[eos_mask].view( - -1, beam_size, tokens.size(-1))[:, 0, 1:step + 1] - eos_mask_batch_dim = eos_mask.view(-1, beam_size)[:, 0] - target_prefix = prefix_tokens[eos_mask_batch_dim][:, :step] - assert (first_beam == target_prefix).all() - - def replicate_first_beam(tensor, mask): - tensor = tensor.view(-1, beam_size, tensor.size(-1)) - tensor[mask] = tensor[mask][:, :1, :] - return tensor.view(-1, tensor.size(-1)) - - # copy tokens, scores and lprobs from the first beam to all beams - tokens = replicate_first_beam(tokens, eos_mask_batch_dim) - scores = replicate_first_beam(scores, eos_mask_batch_dim) - lprobs = replicate_first_beam(lprobs, eos_mask_batch_dim) + + if ( + prefix_tokens is not None + and step < prefix_tokens.size(1) + and step < max_len + ): + lprobs, tokens, scores = self._prefix_tokens( + step, lprobs, scores, tokens, prefix_tokens, beam_size + ) elif step < self.min_len: # minimum length constraint (does not apply if using prefix_tokens) lprobs[:, self.eos] = -math.inf + - # Record attention scores + # Record attention scores, only support avg_attn_scores is a Tensor if avg_attn_scores is not None: + if attn is None: attn = scores.new(bsz * beam_size, src_tokens.size(1), max_len + 2) attn_buf = attn.clone() attn[:, :, step + 1].copy_(avg_attn_scores) + + scores = scores.type_as(lprobs) - scores_buf = scores_buf.type_as(lprobs) - eos_bbsz_idx = buffer('eos_bbsz_idx') - eos_scores = buffer('eos_scores', type_of=scores) - - self.search.set_src_lengths(src_lengths) - + eos_bbsz_idx = torch.empty(0).to( + tokens + ) # indices of hypothesis ending with eos (finished sentences) + eos_scores = torch.empty(0).to( + scores + ) # scores of hypothesis ending with eos (finished sentences) + + + if self.should_set_src_lengths: + self.search.set_src_lengths(src_lengths) + if self.no_repeat_ngram_size > 0: - #Applying Cuda Op for NGram repeat Blocking if (tokens.is_cuda and lprobs.is_cuda): lprobs = self.no_repeat_ngram_op(tokens,lprobs, bsz, step, beam_size, self.no_repeat_ngram_size) + else: - lprobs = apply_no_repeat_ngram_cpu(tokens, lprobs, bsz, - step, beam_size, self.ngram_repeat_block_size) + lprobs = self._no_repeat_ngram(tokens, lprobs, bsz, beam_size, step) + + # Shape: (batch, cand_size) + cand_scores, cand_indices, cand_beams = self.search.step( step, lprobs.view(bsz, -1, self.vocab_size), scores.view(bsz, beam_size, -1)[:, :, :step], + tokens[:, : step + 1], + original_batch_idxs, ) + # cand_bbsz_idx contains beam indices for the top candidate # hypotheses, with a range of values: [0, bsz*beam_size), # and dimensions: [bsz, cand_size] cand_bbsz_idx = cand_beams.add(bbsz_offsets) - # finalize hypotheses that end in eos, except for blacklisted ones - # or candidates with a score of -inf + # finalize hypotheses that end in eos + # Shape of eos_mask: (batch size, beam size) eos_mask = cand_indices.eq(self.eos) & cand_scores.ne(-math.inf) - eos_mask[:, :beam_size][blacklist] = 0 + eos_mask[:, :beam_size][cands_to_ignore] = torch.tensor(0).to(eos_mask) # only consider eos when it's among the top beam_size indices + # Now we know what beam item(s) to finish + # Shape: 1d list of absolute-numbered eos_bbsz_idx = torch.masked_select( - cand_bbsz_idx[:, :beam_size], - mask=eos_mask[:, :beam_size], + cand_bbsz_idx[:, :beam_size], mask=eos_mask[:, :beam_size] ) - finalized_sents = set() + finalized_sents: List[int] = [] if eos_bbsz_idx.numel() > 0: eos_scores = torch.masked_select( - cand_scores[:, :beam_size], - mask=eos_mask[:, :beam_size], + cand_scores[:, :beam_size], mask=eos_mask[:, :beam_size] + ) + finalized_sents = self.finalize_hypos( + step, + eos_bbsz_idx, + eos_scores, + tokens, + scores, + finalized, + finished, + beam_size, + attn, + src_lengths, + max_len, ) - finalized_sents = finalize_hypos(step, eos_bbsz_idx, - eos_scores) + num_remaining_sent -= len(finalized_sents) assert num_remaining_sent >= 0 if num_remaining_sent == 0: break + if self.search.stop_on_max_len and step >= max_len: + break assert step < max_len + # Remove finalized sentences (ones for which {beam_size} + # finished hypotheses have been generated) from the batch. if len(finalized_sents) > 0: new_bsz = bsz - len(finalized_sents) # construct batch_idxs which holds indices of batches to keep for the next pass - batch_mask = cand_indices.new_ones(bsz) - batch_mask[cand_indices.new(finalized_sents)] = 0 - batch_idxs = torch.nonzero(batch_mask).squeeze(-1) + + batch_mask = torch.ones( + bsz, dtype=torch.bool, device=cand_indices.device + ) + batch_mask[finalized_sents] = False + # TODO replace `nonzero(as_tuple=False)` after TorchScript supports it + batch_idxs = torch.arange( + bsz, device=cand_indices.device + ).masked_select(batch_mask) + + + # Choose the subset of the hypothesized constraints that will continue + + self.search.prune_sentences(batch_idxs) + eos_mask = eos_mask[batch_idxs] cand_beams = cand_beams[batch_idxs] @@ -1337,115 +1394,106 @@ def replicate_first_beam(tensor, mask): cand_bbsz_idx = cand_beams.add(bbsz_offsets) cand_scores = cand_scores[batch_idxs] cand_indices = cand_indices[batch_idxs] + if prefix_tokens is not None: prefix_tokens = prefix_tokens[batch_idxs] src_lengths = src_lengths[batch_idxs] - blacklist = blacklist[batch_idxs] - - scores = scores.view(bsz, -1)[batch_idxs].view( - new_bsz * beam_size, -1) - scores_buf.resize_as_(scores) - tokens = tokens.view(bsz, -1)[batch_idxs].view( - new_bsz * beam_size, -1) - tokens_buf.resize_as_(tokens) + cands_to_ignore = cands_to_ignore[batch_idxs] + + scores = scores.view(bsz, -1)[batch_idxs].view(new_bsz * beam_size, -1) + tokens = tokens.view(bsz, -1)[batch_idxs].view(new_bsz * beam_size, -1) if attn is not None: attn = attn.view(bsz, -1)[batch_idxs].view( - new_bsz * beam_size, attn.size(1), -1) - attn_buf.resize_as_(attn) + new_bsz * beam_size, attn.size(1), -1 + ) bsz = new_bsz else: batch_idxs = None - # Set active_mask so that values > cand_size indicate eos or - # blacklisted hypos and values < cand_size indicate candidate - # active hypos. After this, the min values per row are the top - # candidate active hypos. - active_mask = buffer('active_mask') - eos_mask[:, :beam_size] |= blacklist + # Set active_mask so that values > cand_size indicate eos hypos + # and values < cand_size indicate candidate active hypos. + # After, the min values per row are the top candidate active hypos + + # Rewrite the operator since the element wise or is not supported in torchscript. + + eos_mask[:, :beam_size] = ~((~cands_to_ignore) & (~eos_mask[:, :beam_size])) active_mask = torch.add( eos_mask.type_as(cand_offsets) * cand_size, - cand_offsets[:eos_mask.size(1)], + cand_offsets[: eos_mask.size(1)], ) - - # get the top beam_size active hypotheses, which are just the hypos - # with the smallest values in active_mask - active_hypos, new_blacklist = buffer('active_hypos'), buffer( - 'new_blacklist') - torch.topk(active_mask, - k=beam_size, - dim=1, - largest=False, - out=(new_blacklist, active_hypos)) - - # update blacklist to ignore any finalized hypos - blacklist = new_blacklist.ge(cand_size)[:, :beam_size] - assert (~blacklist).any(dim=1).all() - - active_bbsz_idx = buffer('active_bbsz_idx') - torch.gather( - cand_bbsz_idx, - dim=1, - index=active_hypos, - out=active_bbsz_idx, - ) - active_scores = torch.gather( - cand_scores, - dim=1, - index=active_hypos, - out=scores[:, step].view(bsz, beam_size), + + + # get the top beam_size active hypotheses, which are just + # the hypos with the smallest values in active_mask. + # {active_hypos} indicates which {beam_size} hypotheses + # from the list of {2 * beam_size} candidates were + # selected. Shapes: (batch size, beam size) + new_cands_to_ignore, active_hypos = torch.topk( + active_mask, k=beam_size, dim=1, largest=False ) + + + # update cands_to_ignore to ignore any finalized hypos. + cands_to_ignore = new_cands_to_ignore.ge(cand_size)[:, :beam_size] + # Make sure there is at least one active item for each sentence in the batch. + assert (~cands_to_ignore).any(dim=1).all() + + # update cands_to_ignore to ignore any finalized hypos + + # {active_bbsz_idx} denotes which beam number is continued for each new hypothesis (a beam + # can be selected more than once). + + active_bbsz_idx = torch.gather(cand_bbsz_idx, dim=1, index=active_hypos) + active_scores = torch.gather(cand_scores, dim=1, index=active_hypos) active_bbsz_idx = active_bbsz_idx.view(-1) active_scores = active_scores.view(-1) + # copy tokens and scores for active hypotheses - torch.index_select( - tokens[:, :step + 1], - dim=0, - index=active_bbsz_idx, - out=tokens_buf[:, :step + 1], + + # Set the tokens for each beam (can select the same row more than once) + + tokens[:, : step + 1] = torch.index_select( + tokens[:, : step + 1], dim=0, index=active_bbsz_idx ) - torch.gather( - cand_indices, - dim=1, - index=active_hypos, - out=tokens_buf.view(bsz, beam_size, -1)[:, :, step + 1], + # Select the next token for each of them + tokens.view(bsz, beam_size, -1)[:, :, step + 1] = torch.gather( + cand_indices, dim=1, index=active_hypos ) + + if step > 0: - torch.index_select( - scores[:, :step], - dim=0, - index=active_bbsz_idx, - out=scores_buf[:, :step], + scores[:, :step] = torch.index_select( + scores[:, :step], dim=0, index=active_bbsz_idx ) - torch.gather( - cand_scores, - dim=1, - index=active_hypos, - out=scores_buf.view(bsz, beam_size, -1)[:, :, step], + scores.view(bsz, beam_size, -1)[:, :, step] = torch.gather( + cand_scores, dim=1, index=active_hypos ) + + + # Update constraints based on which candidates were selected for the next beam + self.search.update_constraints(active_hypos) + # copy attention for active hypotheses if attn is not None: - torch.index_select( - attn[:, :, :step + 2], - dim=0, - index=active_bbsz_idx, - out=attn_buf[:, :, :step + 2], + attn[:, :, : step + 2] = torch.index_select( + attn[:, :, : step + 2], dim=0, index=active_bbsz_idx ) - # swap buffers - tokens, tokens_buf = tokens_buf, tokens - scores, scores_buf = scores_buf, scores - if attn is not None: - attn, attn_buf = attn_buf, attn - # reorder incremental state in decoder reorder_state = active_bbsz_idx - + # sort by score descending - for sent_id, _ in enumerate(finalized): - finalized[sent_id] = sorted(finalized[sent_id], - key=lambda r: r['score'], - reverse=True) + for sent in range(len(finalized)): + scores = torch.tensor( + [float(elem["score"]) for elem in finalized[sent]] + ) + _, sorted_scores_indices = torch.sort(scores, descending=True) + finalized[sent] = [finalized[sent][ssi] for ssi in sorted_scores_indices] + finalized[sent] = torch.jit.annotate( + List[Dict[str, Tensor]], finalized[sent] + ) + return finalized diff --git a/fastseq/optimizer/fairseq/generate.py b/fastseq/optimizer/fairseq/generate.py old mode 100755 new mode 100644 index f9286359..649a4aa2 --- a/fastseq/optimizer/fairseq/generate.py +++ b/fastseq/optimizer/fairseq/generate.py @@ -1,27 +1,52 @@ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. -"""Optimize fairseq-generate (v0.9.0)""" +"""Optimize fairseq-generate (v0.10.2)""" +import ast import logging +import math +import os import sys +from itertools import chain from multiprocessing import Queue, JoinableQueue from torch.multiprocessing import Process - +import numpy as np import torch - from fairseq_cli.generate import main -from fairseq import bleu, checkpoint_utils, options, progress_bar, tasks, utils -from fairseq.data import encoders -from fairseq.meters import StopwatchMeter, TimeMeter -from fairseq.options import add_generation_args from fairseq.utils import apply_to_sample - +from fairseq import scoring, checkpoint_utils, tasks, utils +from fairseq.logging import progress_bar +from fairseq.logging.meters import StopwatchMeter, TimeMeter from fastseq.utils.api_decorator import replace +from fairseq.options import add_generation_args GENERATE_FINISHED = "done" POSTPROCESS_FINISHED = None +original_add_generation_args = add_generation_args + +@replace(add_generation_args) +def add_generation_args_v2(parser): + group = original_add_generation_args(parser) + # fmt: off + group.add_argument( + '--postprocess-workers', + default=1, + type=int, + choices=range(1, 128, 1), + metavar='N', + help='number of worker for post process') + group.add_argument( + '--decode-hypothesis', + action="store_true", + default=True) + group.add_argument( + '--use-el-attn', + action='store_true', + help='Use Efficient Lossless Attention optimization ? ') + # fmt: on + def move_to_cpu(sample): def _move_to_cpu(tensor): # PyTorch has poor support for half tensors (float16) on CPU. @@ -33,12 +58,15 @@ def _move_to_cpu(tensor): return apply_to_sample(_move_to_cpu, sample) +def convert_base_e_to_base_2(t): + return t / math.log(2) class IOProcess(Process): """ - Single process to hanlde IO and compute metrics + Single process to handle IO and compute metrics """ - def __init__(self, args, task, message_queue): + + def __init__(self, args, task, message_queue, output_file): """ Process to handle IO and compute metrics @@ -50,18 +78,14 @@ def __init__(self, args, task, message_queue): """ super(IOProcess, self).__init__() self.tgt_dict = task.target_dictionary - + # Generate and compute BLEU score - if args.sacrebleu: - self.scorer = bleu.SacrebleuScorer() - else: - self.scorer = bleu.Scorer(self.tgt_dict.pad(), self.tgt_dict.eos(), - self.tgt_dict.unk()) - + self.scorer = scoring.build_scorer(args, self.tgt_dict) self.args = args self.message_queue = message_queue self.has_target = False - + self.output_file = output_file + def run(self): while True: msg = self.message_queue.get() @@ -74,23 +98,27 @@ def run(self): self.has_target = True elif msg == GENERATE_FINISHED: if self.has_target: - print('| Generate {} with beam={}: {}'.format( - self.args.gen_subset, self.args.beam, - self.scorer.result_string())) + if self.args.bpe and not self.args.sacrebleu: + if self.args.remove_bpe: + print("BLEU score is being computed by splitting detokenized string on spaces, this is probably not what you want. Use --sacrebleu for standard 13a BLEU tokenization") + else: + print("If you are using BPE on the target side, the BLEU score is computed on BPE tokens, not on proper words. Use --sacrebleu for standard 13a BLEU tokenization") + print("Generate {} with beam={}: {}".format( + self.args.gen_subset, self.args.beam, self.scorer.result_string()), + file=self.output_file,) break else: - print(msg) + print(msg, file = self.output_file) self.message_queue.task_done() self.message_queue.close() self.message_queue.join_thread() - class PostProcess(Process): - ''' - Use multiple process to do detokenize - ''' + """ + Use multiple processes to do detokenization + """ - def __init__(self, args, task, data_queue, message_queue): + def __init__(self, args, task, data_queue, message_queue, generator): """ Handle detokenize and belu score computation @@ -115,19 +143,15 @@ def __init__(self, args, task, data_queue, message_queue): self.align_dict = utils.load_align_dict(args.replace_unk) # Generate and compute BLEU score - if args.sacrebleu: - self.scorer = bleu.SacrebleuScorer() - else: - self.scorer = bleu.Scorer(self.tgt_dict.pad(), self.tgt_dict.eos(), - self.tgt_dict.unk()) - + self.scorer = scoring.build_scorer(args, self.tgt_dict) self.args = args self.task = task self.data_queue = data_queue self.message_queue = message_queue + self.generator = generator if args.decode_hypothesis: - self.tokenizer = encoders.build_tokenizer(args) - self.bpe = encoders.build_bpe(args) + self.tokenizer = task.build_tokenizer(args) + self.bpe = task.build_bpe(args) def _decode(self, x): if self.bpe is not None: @@ -136,21 +160,34 @@ def _decode(self, x): x = self.tokenizer.decode(x) return x + def _get_symbols_to_strip_from_output(self, generator): + if hasattr(generator, "symbols_to_strip_from_output"): + return generator.symbols_to_strip_from_output + else: + return {generator.eos} + def _detokenize(self, sample, hypos): - """ detokenize and compute BELU """ + """ + Detokenize and compute BELU + """ message_list = [] for i, sample_id in enumerate(sample['id'].tolist()): has_target = sample['target'] is not None # Remove padding - src_tokens = utils.strip_pad( - sample['net_input']['src_tokens'][i, :], self.tgt_dict.pad()) + if "src_tokens" in sample["net_input"]: + src_tokens = utils.strip_pad( + sample["net_input"]["src_tokens"][i, :], self.tgt_dict.pad() + ) + else: + src_tokens = None target_tokens = None if has_target: - target_tokens = utils.strip_pad(sample['target'][i, :], - self.tgt_dict.pad()).int() + target_tokens = ( + utils.strip_pad(sample["target"][i, :], self.tgt_dict.pad()).int().cpu() + ) - # Either retrieve the original sentences or regenerate them from tokens. + # Either retrieve the original sentences or regenerate them from tokens if self.align_dict is not None: src_str = self.task.dataset( self.args.gen_subset).src.get_original_text(sample_id) @@ -164,8 +201,11 @@ def _detokenize(self, sample, hypos): src_str = "" if has_target: target_str = self.tgt_dict.string( - target_tokens, self.args.remove_bpe, escape_unk=True) - + target_tokens, + self.args.remove_bpe, + escape_unk = True, + extra_symbols_to_ignore = self._get_symbols_to_strip_from_output(self.generator), + ) if not self.args.quiet: if self.src_dict is not None: if self.args.decode_hypothesis: @@ -181,77 +221,74 @@ def _detokenize(self, sample, hypos): else: message_list.append('T-{}\t{}'.format( sample_id, target_str)) - + # Process top predictions for j, hypo in enumerate(hypos[i][:self.args.nbest]): - hypo_tokens, hypo_str, alignment = \ - utils.post_process_prediction( - hypo_tokens=hypo['tokens'].int(), - src_str=src_str, - alignment=hypo['alignment'], - align_dict=self.align_dict, - tgt_dict=self.tgt_dict, - remove_bpe=self.args.remove_bpe, + hypo_tokens, hypo_str, alignment = utils.post_process_prediction( + hypo_tokens = hypo['tokens'].int(), + src_str = src_str, + alignment = hypo['alignment'], + align_dict = self.align_dict, + tgt_dict = self.tgt_dict, + remove_bpe = self.args.remove_bpe, + extra_symbols_to_ignore = self._get_symbols_to_strip_from_output(self.generator), ) - if not self.args.quiet: + score = convert_base_e_to_base_2(hypo["score"]) + message_list.append('H-{}\t{}\t{}'.format( + sample_id, score, hypo_str)) if self.args.decode_hypothesis: detok_hypo_str = self._decode(hypo_str) message_list.append('D-{}\t{}\t{}'.format( - sample_id, hypo['score'], detok_hypo_str)) - else: - message_list.append('H-{}\t{}\t{}'.format( - sample_id, hypo['score'], hypo_str)) + sample_id, score, detok_hypo_str)) message_list.append('P-{}\t{}'.format( sample_id, ' '.join( map( lambda x: '{:.4f}'.format(x), - hypo['positional_scores'].tolist(), + convert_base_e_to_base_2(hypo['positional_scores']).tolist(), )))) - if self.args.print_alignment: message_list.append('A-{}\t{}'.format( sample_id, ' '.join([ '{}-{}'.format(src_idx, tgt_idx) for src_idx, tgt_idx in alignment ]))) - if self.args.print_step: message_list.append('I-{}\t{}'.format( sample_id, hypo['steps'])) - if getattr(self.args, 'retain_iter_history', False): - message_list.append("\n".join([ - 'E-{}_{}\t{}'.format(sample_id, step, - utils.post_process_prediction( - h['tokens'].int(), - self.src_str, None, None, - self.tgt_dict, None)[1]) - for step, h in enumerate(hypo['history']) - ])) - + for step, h in enumerate(hypo['history']): + _, h_str, _ = utils.post_process_prediction( + hypo_tokens = h['tokens'].int(), + src_str = self.src_str, + alignment = None, + align_dict = None, + tgt_dict = self.tgt_dict, + remove_bpe = None, + ) + message_list.append('E-{}_{}\t{}'.format(sample_id, step, h_str)) + # Score only the top hypothesis if has_target and j == 0: if (self.align_dict is not None or self.args.remove_bpe is not None): + # Convert back to tokens for evaluation with unk # replacement and/or without BPE target_tokens = self.tgt_dict.encode_line( - target_str, add_if_not_exist=True) - if hasattr(self.scorer, 'add_string'): - self.message_queue.put((target_str, hypo_str)) + target_str, add_if_not_exist = True) + hypo_tokens = self.tgt_dict.encode_line( + detok_hypo_str, add_if_not_exist = True) + if hasattr(self.scorer, "add_string"): + self.message_queue.put((target_str, detok_hypo_str)) else: - self.message_queue.put((target_tokens, hypo_tokens)) - + self.message_queue.put((target_tokens, hypo_tokens)) self.message_queue.put('\n'.join(message_list)) def run(self): while True: r = self.data_queue.get() - if r == GENERATE_FINISHED: - self.data_queue.put(POSTPROCESS_FINISHED) - break - elif r is POSTPROCESS_FINISHED: + if r == GENERATE_FINISHED or r is POSTPROCESS_FINISHED: self.data_queue.put(POSTPROCESS_FINISHED) break else: @@ -263,156 +300,182 @@ def run(self): self.message_queue.join_thread() self.message_queue.join() - -original_add_generation_args = add_generation_args - - -@replace(add_generation_args) -def add_generation_args_v1(parser): - group = original_add_generation_args(parser) - # fmt: off - group.add_argument( - '--postprocess-workers', - default=1, - type=int, - choices=range(1, 128, 1), - metavar='N', - help='number of worker for post process') - group.add_argument( - '--decode-hypothesis', - action="store_true") - # fmt: on - - -@replace(main) -def main_v1(args): - assert args.path is not None, '--path required for generation!' - assert not args.sampling or args.nbest == args.beam, \ - '--sampling requires --nbest to be equal to --beam' - assert args.replace_unk is None or args.raw_text, \ - '--replace-unk requires a raw text dataset (--raw-text)' - +def _main(args, output_file): + for handler in logging.root.handlers[:]: + logging.root.removeHandler(handler) + logging.basicConfig( + format="%(asctime)s | %(levelname)s | %(name)s | %(message)s", + datefmt="%Y-%m-%d %H:%M:%S", + level=logging.INFO, + stream=output_file, + ) + logger = logging.getLogger("fastseq.optimizer.fairseq.generate") utils.import_user_module(args) - - if args.max_tokens is None and args.max_sentences is None: + if args.max_tokens is None and args.batch_size is None: args.max_tokens = 12000 - print(args) + logger.info(args) + # Fix seed for stochastic decoding + if args.seed is not None and not args.no_seed_provided: + np.random.seed(args.seed) + utils.set_torch_seed(args.seed) use_cuda = torch.cuda.is_available() and not args.cpu # Load dataset splits task = tasks.setup_task(args) task.load_dataset(args.gen_subset) - - # Set dictionaries - try: - src_dict = getattr(task, 'source_dictionary', None) - except NotImplementedError: - src_dict = None - tgt_dict = task.target_dictionary + overrides = ast.literal_eval(args.model_overrides) # Load ensemble - print('| loading model(s) from {}'.format(args.path)) - models, model_args_ = checkpoint_utils.load_model_ensemble( - args.path.split(':'), - arg_overrides=eval(args.model_overrides), - task=task, + logger.info("loading model(s) from {}".format(args.path)) + models, _ = checkpoint_utils.load_model_ensemble( + utils.split_paths(args.path), + arg_overrides = overrides, + task = task, + suffix = getattr(args, "checkpoint_suffix", ""), + strict = (args.checkpoint_shard_count == 1), + num_shards = args.checkpoint_shard_count, ) + if args.lm_path is not None: + overrides["data"] = args.data + try: + lms, _ = checkpoint_utils.load_model_ensemble( + [args.lm_path], + arg_overrides=overrides, + task=None, + ) + except: + logger.warning("Failed to load language model! Please make sure that the language model dict is the same as target dict and is located in the data dir ({})".format(args.data)) + raise + assert len(lms) == 1 + else: + lms = [None] # Optimize ensemble for generation - for model in models: - model.make_generation_fast_( - beamable_mm_beam_size=None if args.no_beamable_mm else args.beam, - need_attn=args.print_alignment, - ) + for model in chain(models, lms): + if model is None: + continue if args.fp16: model.half() - if use_cuda: + if use_cuda and not args.pipeline_model_parallel: model.cuda() + model.prepare_for_inference_(args) # Load dataset (possibly sharded) itr = task.get_batch_iterator( - dataset=task.dataset(args.gen_subset), - max_tokens=args.max_tokens, - max_sentences=args.max_sentences, - max_positions=utils.resolve_max_positions( + dataset = task.dataset(args.gen_subset), + max_tokens = args.max_tokens, + max_sentences = args.batch_size, + max_positions = utils.resolve_max_positions( task.max_positions(), *[model.max_positions() for model in models]), - ignore_invalid_inputs=args.skip_invalid_size_inputs_valid_test, - required_batch_size_multiple=args.required_batch_size_multiple, - num_shards=args.num_shards, - shard_id=args.shard_id, - num_workers=args.num_workers, - ).next_epoch_itr(shuffle=False) + ignore_invalid_inputs = args.skip_invalid_size_inputs_valid_test, + required_batch_size_multiple = args.required_batch_size_multiple, + num_shards = args.num_shards, + shard_id = args.shard_id, + num_workers = args.num_workers, + data_buffer_size = args.data_buffer_size, + ).next_epoch_itr(shuffle = False) + progress = progress_bar.progress_bar( + itr, + log_format = args.log_format, + log_interval = args.log_interval, + default_log_format = ("tqdm" if not args.no_progress_bar else "none"), + ) # Initialize generator gen_timer = StopwatchMeter() - generator = task.build_generator(args) - + extra_gen_cls_kwargs = {"lm_model": lms[0], "lm_weight": args.lm_weight} + generator = task.build_generator( + models, args, extra_gen_cls_kwargs = extra_gen_cls_kwargs + ) num_sentences = 0 data_queue = Queue() message_queue = JoinableQueue() - p_list = [] - for i in range(args.postprocess_workers): - p = PostProcess(args, task, data_queue, message_queue) + for _ in range(args.postprocess_workers): + p = PostProcess(args, task, data_queue, message_queue, generator) p_list.append(p) p.start() - - io_process = IOProcess(args, task, message_queue) + io_process = IOProcess(args, task, message_queue, output_file) io_process.start() - if args.use_el_attn: task.transpose_enc_dec_kv_proj(models) - with progress_bar.build_progress_bar(args, itr) as t: - wps_meter = TimeMeter() - for sample in t: - cpu_sample = sample - if 'net_input' not in sample: - continue - sample = utils.move_to_cuda(sample) if use_cuda else sample - - prefix_tokens = None - if args.prefix_size > 0: - prefix_tokens = sample['target'][:, :args.prefix_size] - - gen_timer.start() - try: - hypos = task.inference_step( - generator, models, sample, prefix_tokens) - except: - logging.exception(sys.exc_info()[0]) - for p in p_list: - p.terminate() - io_process.terminate() - data_queue.close() - message_queue.close() - sys.exit(1) - - num_generated_tokens = sum(len(h[0]['tokens']) for h in hypos) - gen_timer.stop(num_generated_tokens) - - hypos = [h[:args.nbest] for h in hypos] - hypos = move_to_cpu(hypos) if use_cuda else hypos - data_queue.put((cpu_sample, hypos)) - - wps_meter.update(num_generated_tokens) - t.log({'wps': round(wps_meter.avg)}) - num_sentences += cpu_sample['nsentences'] - + + wps_meter = TimeMeter() + for sample in progress: + cpu_sample = sample + if 'net_input' not in sample: + continue + sample = utils.move_to_cuda(sample) if use_cuda else sample + + prefix_tokens = None + if args.prefix_size > 0: + prefix_tokens = sample['target'][:, :args.prefix_size] + + constraints = None + if "constraints" in sample: + constraints = sample["constraints"] + + gen_timer.start() + try: + hypos = task.inference_step( + generator, models, sample, prefix_tokens, constraints) + except: + logging.exception(sys.exc_info()[0]) + for p in p_list: + p.terminate() + io_process.terminate() + data_queue.close() + message_queue.close() + sys.exit(1) + num_generated_tokens = sum(len(h[0]['tokens']) for h in hypos) + gen_timer.stop(num_generated_tokens) + hypos = [h[:args.nbest] for h in hypos] + hypos = move_to_cpu(hypos) if use_cuda else hypos + data_queue.put((cpu_sample, hypos)) + wps_meter.update(num_generated_tokens) + progress.log({'wps': round(wps_meter.avg)}) + num_sentences += ( + cpu_sample['nsentences'] if "nsentences" in cpu_sample else cpu_sample["id"].numel() + ) + data_queue.put(GENERATE_FINISHED) for p in p_list: p.join() - - sent_throught = num_sentences / gen_timer.sum if num_sentences > 0 else 0 - tokens_throught = 1. / gen_timer.avg if num_sentences > 0 else 0 - - message_queue.put( - '| Translated {} sentences ({} tokens) in {:.1f}s ({:.2f} sentences/s, {:.2f} tokens/s)'. # pylint: disable=line-too-long - format(num_sentences, gen_timer.n, gen_timer.sum, sent_throught, - tokens_throught)) - message_queue.put(GENERATE_FINISHED) io_process.join() - + sent_through = num_sentences / gen_timer.sum if num_sentences > 0 else 0 + tokens_through = 1. / gen_timer.avg if num_sentences > 0 else 0 + logger.info("NOTE: hypothesis and token scores are output in base 2") + logger.info( + "Translated {} sentences ({} tokens) in {:.1f}s ({:.2f} sentences/s, {:.2f} tokens/s)".format( + num_sentences, + gen_timer.n, + gen_timer.sum, + sent_through, + tokens_through, + ) + ) return + +@replace(main) +def main_v2(args): + assert args.path is not None, '--path required for generation!' + assert ( + not args.sampling or args.nbest == args.beam + ), "--sampling requires --nbest to be equal to --beam" + assert ( + args.replace_unk is None or args.dataset_impl == "raw" + ), "--replace-unk requires a raw text dataset (--dataset-impl=raw)" + + if args.results_path is not None: + os.makedirs(args.results_path, exist_ok = True) + output_path = os.path.join( + args.results_path, "generate-{}.txt".format(args.gen_subset) + ) + with open(output_path, "w", buffering = 1, encoding = "utf-8") as h: + return _main(args, h) + else: + return _main(args, sys.stdout) + diff --git a/fastseq/utils/test_utils.py b/fastseq/utils/test_utils.py index 0a44a3ea..3f8a3157 100644 --- a/fastseq/utils/test_utils.py +++ b/fastseq/utils/test_utils.py @@ -84,6 +84,12 @@ def timeit(*args, **kwargs): BART_MODEL_URLS[ 'bart.large.xsum'] = 'https://dl.fbaipublicfiles.com/fairseq/models/bart.large.xsum.tar.gz' +CNNDM_URL = 'https://fastseq.blob.core.windows.net/data/tasks/cnn_dm.128/len-1024.bin' +CACHED_CNNDM_DATA_DIR = os.path.join(FASTSEQ_CACHE_DIR, 'cnn_dm.128/len-1024.bin') + +CNNDM_RAW_URL = 'https://fastseq.blob.core.windows.net/data/tasks/unit_tests' +CACHED_CNNDM_RAW_DATA_DIR = os.path.join(FASTSEQ_CACHE_DIR, 'raw_cnndm_data') + CACHED_BART_MODEL_DIR = os.path.join(FASTSEQ_CACHE_DIR, 'fairseq_bart_models') CACHED_BART_MODEL_PATHS = {} diff --git a/fastseq_cli/generate.py b/fastseq_cli/generate.py index 310d5b68..f5c27d1f 100644 --- a/fastseq_cli/generate.py +++ b/fastseq_cli/generate.py @@ -14,17 +14,27 @@ def parse_additional_args(): parser = options.get_generation_parser() parser.add_argument( - '--use-el-attn', + '--use_el_attn', action='store_true', help='Use Efficient Lossless Attention optimization ? ') + parser.add_argument( + '--postprocess_workers', + default=1, + type=int, + choices=range(1, 128, 1), + metavar='N', + help='number of worker for post process') + parser.add_argument( + '--decode_hypothesis', + action="store_true") args = options.parse_args_and_arch(parser) return args def cli_main(): os.environ['USE_EL_ATTN'] = '1' if '--use-el-attn' in sys.argv else '0' - from fastseq.optimizer.fairseq.generate import main_v1 # pylint: disable=import-outside-toplevel + from fastseq.optimizer.fairseq.generate import main_v2 # pylint: disable=import-outside-toplevel args = parse_additional_args() - main_v1(args) + main_v2(args) if __name__ == '__main__': cli_main() diff --git a/requirements.txt b/requirements.txt index 72383c51..b36d4dbc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,6 @@ yapf >= 0.30.0 torch >= 1.4.0 -fairseq == 0.9.0 +fairseq == 0.10.2 transformers == 3.0.2 absl-py >= 0.9.0 filelock >= 3.0.12 diff --git a/setup.py b/setup.py index 45ebef29..acd4e365 100644 --- a/setup.py +++ b/setup.py @@ -4,9 +4,9 @@ from setuptools import find_packages, setup from torch.utils.cpp_extension import BuildExtension, CUDAExtension -FASTSEQ_VERSION = '0.0.4' -MIN_FAIRSEQ_VERSION = '0.9.0' -MAX_FAIRSEQ_VERSION = '0.9.0' +FASTSEQ_VERSION = '0.2.0' +MIN_FAIRSEQ_VERSION = '0.10.0' +MAX_FAIRSEQ_VERSION = '0.10.2' MIN_TRANSFORMERS_VERSION = '3.0.2' MAX_TRANSFORMER_VERSION = '3.0.2' diff --git a/tests/cli/test_generate_fs_cli.py b/tests/cli/test_generate_fs_cli.py new file mode 100644 index 00000000..ca30a90a --- /dev/null +++ b/tests/cli/test_generate_fs_cli.py @@ -0,0 +1,134 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +""" +Test the optimizations on FairSeq to make sure the changes do not affect the +model accuracy. +""" + +import os +import subprocess + +import torch +from absl.testing import absltest, parameterized +from fairseq.models.bart.model import BARTModel + +from fastseq.logging import get_logger + +from fastseq.utils.file_utils import decompress_file, make_dirs, wget +from fastseq.utils.test_utils import (BART_MODEL_URLS, CACHED_BART_MODEL_DIR, + CACHED_BART_MODEL_PATHS, CNNDM_URL, CACHED_CNNDM_DATA_DIR, + fastseq_test_main, TestCaseBase) + +logger = get_logger(__name__) + +class FairseqGenerateCLITest(TestCaseBase): + """Test the optimizations on FairSeq + + `bart.large.cnn` model is used for benchmarking. If it does not exist, it + will be downloaded first. As the the model is big, it will take a while to + download. Once downloaded, it will be cached for future usage. + """ + + def setUp(self): + """set up the test environment""" + + super(FairseqGenerateCLITest, self).setUp() + # TODO: create a dummy model instead of loading a large-size model. + if not os.path.exists(CACHED_BART_MODEL_PATHS['bart.large.cnn']): + make_dirs(CACHED_BART_MODEL_DIR, exist_ok=True) + tar_model_path = os.path.join(CACHED_BART_MODEL_DIR, + 'bart.large.cnn.tar.gz') + with open(tar_model_path, 'xb') as tar_model_file: + wget(BART_MODEL_URLS['bart.large.cnn'], tar_model_file) + decompress_file(tar_model_path, CACHED_BART_MODEL_DIR) + + self.source_path = CACHED_CNNDM_DATA_DIR + make_dirs(self.source_path, exist_ok=True) + file_list = ["dict.source.txt", "dict.target.txt", "valid.source-target.source.bin", "valid.source-target.target.bin", "valid.source-target.source.idx", "valid.source-target.target.idx"] + for f in file_list: + f_path = os.path.join(self.source_path, f) + if not os.path.exists(f_path): + with open(f_path, 'xb') as new_file: + wget(os.path.join(CNNDM_URL, f), new_file) + new_file.close() + + self.bart_path = CACHED_BART_MODEL_PATHS['bart.large.cnn'] + '/model.pt' + + @parameterized.named_parameters({ + 'testcase_name': 'Normal', + 'beam_size': 4, + 'batch_size': 16, + 'lenpen': 2.0, + 'max_len_b': 140, + 'min_len': 55, + 'no_repeat_ngram_size': 3, + }) + def test_generate_cli(self, beam_size, batch_size, + lenpen, max_len_b, min_len, + no_repeat_ngram_size): + """Test the command line interface for fastseq. Make sure the changes do not + affect the model accuracy for beam search optimization and el attn optimization + + Args: + beam_size (int): beam size. + batch_size (int): batch size. + need_attn (bool): indicate if attention is needed. + lenpen (float): length penalty, where <1.0 favors shorter, >1.0 + favors longer sentences. + max_len_b (int): max length of generated text. + min_len (int): min length of generated text. + no_repeat_ngram_size (int): size of no repeat gram. + """ + options = ["--path", self.bart_path, + "--task", "translation", + "--batch-size", str(batch_size), + "--gen-subset", "valid", + "--truncate-source", + "--bpe", "gpt2", + "--beam", str(beam_size), + "--num-workers", "4", + "--min-len", str(min_len), + "--max-len-b", str(max_len_b), + "--no-repeat-ngram-size", str(no_repeat_ngram_size), + "--lenpen", str(lenpen), + "--skip-invalid-size-inputs-valid-test", + self.source_path] + fairseq_outs = subprocess.check_output(['fairseq-generate'] + options).decode("utf-8").split("\n") + try: + import fastseq + except ImportError: + logger.error("Failed to import fastseq") + + # test beam search opt + options.append("--decode-hypothesis") + + fastseq_outs = subprocess.check_output(['fastseq-generate-for-fairseq'] + options).decode("utf-8").split("\n") + # only compare decoded hypotheses + fairseq_outs = [l.split() for l in fairseq_outs] + fairseq_outs = [l for l in fairseq_outs if len(l) > 2 and l[0][0] is 'D'] + fastseq_outs = [l.split() for l in fastseq_outs] + fastseq_outs = [l for l in fastseq_outs if len(l) > 2 and l[0][0] is 'D'] + assert len(fairseq_outs) == len(fastseq_outs) + assert len(fairseq_outs) == 128 + for i, expected_out in enumerate(fairseq_outs): + self.assertEqual(expected_out[2:], fastseq_outs[i][2:]) + + fastseq_outs = None + + # test el attn opt + options.append("--use-el-attn") + try: + fastseq_outs = subprocess.check_output(['fastseq-generate-for-fairseq'] + options).decode("utf-8").split("\n") + except subprocess.CalledProcessError as error: + print('Error code:', error.returncode, '. Output:', error.output.decode("utf-8")) + # only compare decoded hypotheses + fastseq_outs = [l.split() for l in fastseq_outs] + fastseq_outs = [l for l in fastseq_outs if len(l) > 2 and l[0][0] is 'D'] + assert len(fairseq_outs) == len(fastseq_outs) + assert len(fairseq_outs) == 128 + for i, expected_out in enumerate(fairseq_outs): + self.assertEqual(expected_out[2:], fastseq_outs[i][2:]) + +if __name__ == "__main__": + fastseq_test_main() diff --git a/tests/optimizer/fairseq/data/cnndm_128.txt b/tests/optimizer/fairseq/data/cnndm_128.txt deleted file mode 100644 index b1ce7914..00000000 --- a/tests/optimizer/fairseq/data/cnndm_128.txt +++ /dev/null @@ -1,128 +0,0 @@ -Marseille , France -LRB- CNN -RRB- The French prosecutor leading an investigation into the crash of Germanwings Flight 9525 insisted Wednesday that he was not aware of any video footage from on board the plane . Marseille prosecutor Brice Robin told CNN that `` so far no videos were used in the crash investigation . '' He added , `` A person who has such a video needs to immediately give it to the investigators . '' Robin 's comments follow claims by two magazines , German daily Bild and French Paris Match , of a cell phone video showing the harrowing final seconds from on board Germanwings Flight 9525 as it crashed into the French Alps . All 150 on board were killed . Paris Match and Bild reported that the video was recovered from a phone at the wreckage site . The two publications described the supposed video , but did not post it on their websites . The publications said that they watched the video , which was found by a source close to the investigation . `` One can hear cries of ` My God ' in several languages , '' Paris Match reported . `` Metallic banging can also be heard more than three times , perhaps of the pilot trying to open the cockpit door with a heavy object . Towards the end , after a heavy shake , stronger than the others , the screaming intensifies . Then nothing . '' `` It is a very disturbing scene , '' said Julian Reichelt , editor-in-chief of Bild online . An official with France 's accident investigation agency , the BEA , said the agency is not aware of any such video . Lt. Col. Jean-Marc Menichini , a French Gendarmerie spokesman in charge of communications on rescue efforts around the Germanwings crash site , told CNN that the reports were `` completely wrong '' and `` unwarranted . '' Cell phones have been collected at the site , he said , but that they `` had n't been exploited yet . '' Menichini said he believed the cell phones would need to be sent to the Criminal Research Institute in Rosny sous-Bois , near Paris , in order to be analyzed by specialized technicians working hand-in-hand with investigators . But none of the cell phones found so far have been sent to the institute , Menichini said . Asked whether staff involved in the search could have leaked a memory card to the media , Menichini answered with a categorical `` no . '' Reichelt told `` Erin Burnett : Outfront '' that he had watched the video and stood by the report , saying Bild and Paris Match are `` very confident '' that the clip is real . He noted that investigators only revealed they 'd recovered cell phones from the crash site after Bild and Paris Match published their reports . `` That is something we did not know before . ... Overall we can say many things of the investigation were n't revealed by the investigation at the beginning , '' he said . What was mental state of Germanwings co-pilot ? German airline Lufthansa confirmed Tuesday that co-pilot Andreas Lubitz had battled depression years before he took the controls of Germanwings Flight 9525 , which he 's accused of deliberately crashing last week in the French Alps . Lubitz told his Lufthansa flight training school in 2009 that he had a `` previous episode of severe depression , '' the airline said Tuesday . Email correspondence between Lubitz and the school discovered in an internal investigation , Lufthansa said , included medical documents he submitted in connection with resuming his flight training . The announcement indicates that Lufthansa , the parent company of Germanwings , knew of Lubitz 's battle with depression , allowed him to continue training and ultimately put him in the cockpit . Lufthansa , whose CEO Carsten Spohr previously said Lubitz was 100 % fit to fly , described its statement Tuesday as a `` swift and seamless clarification '' and said it was sharing the information and documents -- including training and medical records -- with public prosecutors . Spohr traveled to the crash site Wednesday , where recovery teams have been working for the past week to recover human remains and plane debris scattered across a steep mountainside . He saw the crisis center set up in Seyne-les-Alpes , laid a wreath in the village of Le Vernet , closer to the crash site , where grieving families have left flowers at a simple stone memorial . Menichini told CNN late Tuesday that no visible human remains were left at the site but recovery teams would keep searching . French President Francois Hollande , speaking Tuesday , said that it should be possible to identify all the victims using DNA analysis by the end of the week , sooner than authorities had previously suggested . In the meantime , the recovery of the victims ' personal belongings will start Wednesday , Menichini said . Among those personal belongings could be more cell phones belonging to the 144 passengers and six crew on board . Check out the latest from our correspondents . The details about Lubitz 's correspondence with the flight school during his training were among several developments as investigators continued to delve into what caused the crash and Lubitz 's possible motive for downing the jet . A Lufthansa spokesperson told CNN on Tuesday that Lubitz had a valid medical certificate , had passed all his examinations and `` held all the licenses required . '' Earlier , a spokesman for the prosecutor 's office in Dusseldorf , Christoph Kumpa , said medical records reveal Lubitz suffered from suicidal tendencies at some point before his aviation career and underwent psychotherapy before he got his pilot 's license . Kumpa emphasized there 's no evidence suggesting Lubitz was suicidal or acting aggressively before the crash . Investigators are looking into whether Lubitz feared his medical condition would cause him to lose his pilot 's license , a European government official briefed on the investigation told CNN on Tuesday . While flying was `` a big part of his life , '' the source said , it 's only one theory being considered . Another source , a law enforcement official briefed on the investigation , also told CNN that authorities believe the primary motive for Lubitz to bring down the plane was that he feared he would not be allowed to fly because of his medical problems . Lubitz 's girlfriend told investigators he had seen an eye doctor and a neuropsychologist , both of whom deemed him unfit to work recently and concluded he had psychological issues , the European government official said . But no matter what details emerge about his previous mental health struggles , there 's more to the story , said Brian Russell , a forensic psychologist . `` Psychology can explain why somebody would turn rage inward on themselves about the fact that maybe they were n't going to keep doing their job and they 're upset about that and so they 're suicidal , '' he said . `` But there is no mental illness that explains why somebody then feels entitled to also take that rage and turn it outward on 149 other people who had nothing to do with the person 's problems . '' Germanwings crash compensation : What we know . Who was the captain of Germanwings Flight 9525 ? CNN 's Margot Haddad reported from Marseille and Pamela Brown from Dusseldorf , while Laura Smith-Spark wrote from London . CNN 's Frederik Pleitgen , Pamela Boykoff , Antonia Mortensen , Sandrine Amiel and Anna-Maja Rappard contributed to this report . --LRB- CNN -RRB- The Palestinian Authority officially became the 123rd member of the International Criminal Court on Wednesday , a step that gives the court jurisdiction over alleged crimes in Palestinian territories . The formal accession was marked with a ceremony at The Hague , in the Netherlands , where the court is based . The Palestinians signed the ICC 's founding Rome Statute in January , when they also accepted its jurisdiction over alleged crimes committed `` in the occupied Palestinian territory , including East Jerusalem , since June 13 , 2014 . '' Later that month , the ICC opened a preliminary examination into the situation in Palestinian territories , paving the way for possible war crimes investigations against Israelis . As members of the court , Palestinians may be subject to counter-charges as well . Israel and the United States , neither of which is an ICC member , opposed the Palestinians ' efforts to join the body . But Palestinian Foreign Minister Riad al-Malki , speaking at Wednesday 's ceremony , said it was a move toward greater justice . `` As Palestine formally becomes a State Party to the Rome Statute today , the world is also a step closer to ending a long era of impunity and injustice , '' he said , according to an ICC news release . `` Indeed , today brings us closer to our shared goals of justice and peace . '' Judge Kuniko Ozaki , a vice president of the ICC , said acceding to the treaty was just the first step for the Palestinians . `` As the Rome Statute today enters into force for the State of Palestine , Palestine acquires all the rights as well as responsibilities that come with being a State Party to the Statute . These are substantive commitments , which can not be taken lightly , '' she said . Rights group Human Rights Watch welcomed the development . `` Governments seeking to penalize Palestine for joining the ICC should immediately end their pressure , and countries that support universal acceptance of the court 's treaty should speak out to welcome its membership , '' said Balkees Jarrah , international justice counsel for the group . `` What 's objectionable is the attempts to undermine international justice , not Palestine 's decision to join a treaty to which over 100 countries around the world are members . '' In January , when the preliminary ICC examination was opened , Israeli Prime Minister Benjamin Netanyahu described it as an outrage , saying the court was overstepping its boundaries . The United States also said it `` strongly '' disagreed with the court 's decision . `` As we have said repeatedly , we do not believe that Palestine is a state and therefore we do not believe that it is eligible to join the ICC , '' the State Department said in a statement . It urged the warring sides to resolve their differences through direct negotiations . `` We will continue to oppose actions against Israel at the ICC as counterproductive to the cause of peace , '' it said . But the ICC begs to differ with the definition of a state for its purposes and refers to the territories as `` Palestine . '' While a preliminary examination is not a formal investigation , it allows the court to review evidence and determine whether to investigate suspects on both sides . Prosecutor Fatou Bensouda said her office would `` conduct its analysis in full independence and impartiality . '' The war between Israel and Hamas militants in Gaza last summer left more than 2,000 people dead . The inquiry will include alleged war crimes committed since June . The International Criminal Court was set up in 2002 to prosecute genocide , crimes against humanity and war crimes . CNN 's Vasco Cotovio , Kareem Khadder and Faith Karimi contributed to this report . --LRB- CNN -RRB- Governments around the world are using the threat of terrorism -- real or perceived -- to advance executions , Amnesty International alleges in its annual report on the death penalty . `` The dark trend of governments using the death penalty in a futile attempt to tackle real or imaginary threats to state security and public safety was stark last year , '' said Salil Shetty , Amnesty 's Secretary General in a release . `` It is shameful that so many states around the world are essentially playing with people 's lives -- putting people to death for ` terrorism ' or to quell internal instability on the ill-conceived premise of deterrence . '' The report , `` Death Sentences and Executions 2014 , '' cites the example of Pakistan lifting a six-year moratorium on the execution of civilians following the horrific attack on a school in Peshawar in December . China is also mentioned , as having used the death penalty as a tool in its `` Strike Hard '' campaign against terrorism in the restive far-western province of Xinjiang . The annual report catalogs the use of state-sanctioned killing as a punitive measure across the globe , and this year 's edition contains some mixed findings . On one hand , the number of executions worldwide has gone down by almost 22 % on the previous year . At least 607 people were executed around the world in 2014 , compared to 778 in 2013 . Amnesty 's figures do not include statistics on executions carried out in China , where information on the practice is regarded as a state secret . Belarus and Vietnam , too , do not release data on death penalty cases . `` The long-term trend is definitely positive -- we are seeing a decrease in the number of executions -LRB- worldwide -RRB- , '' Audrey Gaughran , Amnesty 's Director of Global Issues , told CNN . `` A number of countries are closer to abolition , and there are some signs that some countries will be abolitionist by 2015 . -LRB- There are -RRB- signals of a world that is nearing abolition . '' While the report notes some encouraging signs , it also highlights a marked increase in the number of people sentenced to death in 2014 . At least 2,466 people globally are confirmed to have been handed the sentence last year , an increase of 28 % compared with 2013 . The report notes that the spike in sentencing is attributable to mass-sentencing in countries including Egypt and Nigeria , `` against scores of people in some cases . '' The organization found `` positive developments '' worldwide , with most regions seeming to show reductions in the number of executions . Opinion : Sharp spike in death sentences . Sub-Saharan Africa , for example , saw a 28 % fall in reported cases , and executions recorded in the Middle East and North Africa were down 23 % compared to 2013 . `` Even though we 've highlighted some of the negative developments ... I think we would always highlight that there are positive developments , '' Gaughran said . `` Across the board , with the exception of Europe and Central Asia there were fewer reports of executions in every region . '' The resumption of the use of capital punishment in Belarus -- the only country in Europe and Central Asia to execute people -- after a two year hiatus spoiled an near-universal decrease in countries using the death penalty by region . The United States has the dubious distinction of being the only country in the Americas to conduct executions , but the number of convicts put to death here fell slightly , from 39 in 2013 to 35 in 2014 . The state of Washington also imposed a moratorium on executions last year . The U.S. remains one of the worst offenders for imposing capital punishment , with only Iran -LRB- 289 + -RRB- , Iraq -LRB- 61 + -RRB- , and Saudi Arabia -LRB- 90 + -RRB- executing more people in 2014 . While figures are not available , Amnesty estimates that China also executes `` thousands '' of prisoners each year , `` more than the rest of the world put together . '' The report also highlights the imperfections in the judiciary processes that lead to many sentenced to death . `` In the majority of countries where people were sentenced to death or executed , the death penalty was imposed after proceedings that did not meet international fair trial standards , '' the report stated . `` In 2014 Amnesty International raised particular concerns in relation to court proceedings in Afghanistan , Bangladesh , China , Egypt , Iran , Iraq , North Korea , Pakistan , Saudi Arabia and Sri Lanka . '' The United Nations Secretary-General , Ban Ki-moon , last year stressed the need to move toward abolition of capital punishment . `` The taking of life is too irreversible for one human being to inflict it on another , '' he said , in marking World Day against Death Penalty in October . `` We must continue to argue strongly that the death penalty is unjust and incompatible with fundamental human rights . '' Amnesty estimates that at least 19,094 people were believed to be on death row at the end of 2014 . --LRB- CNN -RRB- On May 28 , 2014 , some 7,000 people gathered in a stadium in China 's northwestern Xinjiang region . But they had not come to watch the local football team or any other grand sporting event . Instead , the authorities paraded scores of prisoners dressed in orange jumpsuits . Armed soldiers guarded the exits . In the patently unfair , open air trial that followed , 55 people were found guilty of a range of offenses linked to violent attacks in the region and jailed . Three were sentenced to death . The public mass sentencing was part a China 's `` Strike Hard '' campaign against unrest in Xinjiang , a campaign the government claims was launched to combat `` terrorism '' and `` separatism . '' But it was also indicative of a trend that was starkly evident last year around the world -- governments using the death penalty in a misguided , and often cynical , attempt to tackle crime and terrorism . Today , Amnesty International releases its annual review of the death penalty worldwide . Much of it makes for grim reading . In Pakistan , the government lifted a six-year moratorium on the execution of civilians in the wake of the horrific Taliban attack on a school in Peshawar in December . More than 60 people have been put to death since , and the government has threatened to send thousands more death row prisoners to the gallows . Iran and Iraq executed people for `` terrorism , '' and other countries expanded the scope of capital crimes in their penal codes . In a year when abhorrent summary executions by armed groups were branded on the global consciousness as never before , governments are themselves resorting to more executions in a knee-jerk reaction to terrorism . Other countries made use of executions in similarly flawed attempts to address -- or appear to address -- crime rates . Jordan ended an eight-year moratorium in December , putting 11 murder convicts to death , with the government saying it was a move to end a surge in violent crime . In Indonesia , authorities announced plans to execute mainly drug traffickers to tackle a public safety `` national emergency . '' Six people have already been executed this year . A sharp spike in death sentences recorded in 2014 -- up more than 500 on the previous year -- can also be attributed to governments using the death penalty as a political tool . The rise was largely because of developments in Egypt and Nigeria , where courts imposed hundreds of death sentences in the context of internal political instability or crime and armed conflict . The simple fact is that governments using the death penalty to tackle crime and security threats are deceiving themselves or the public or both . There is no evidence that the threat of execution is more of a deterrent to crime than a prison sentence , as United Nations and other studies have repeatedly confirmed . It is high time that world leaders stop using the death penalty as an easy way out when times get tough . At Amnesty International , we have campaigned for an end to the death penalty for decades . Thankfully , most of the world now appears to agree with us . The numbers speak for themselves . In 1945 when the United Nations was founded , only eight countries had abolished the death penalty . Today , 140 states are abolitionist in law or practice . Last year , we recorded executions in 22 countries , down by almost a half from 20 years ago . Despite the troubling developments we recorded last year , there was still much good news to be found . The number of executions recorded around the world dropped significantly in 2014 compared with the previous year , from 778 to 607 . This number does not include China , where more people are put to death than the rest of the world put together , but with death penalty statistics treated as a state secret , the true figure is impossible to determine . Executions were recorded in only three countries in sub-Saharan Africa -- Equatorial Guinea , Somalia and Sudan -- and the number of people put to death went down by more than a quarter . The Americas continued to be execution-free , apart from the United States . Those governments that still execute need to realize that they are on the wrong side of history . They must join the vast majority of countries which have dropped the ultimate cruel punishment . Fighting for an end to the death penalty remains an uphill task , but all of us must try to make the world free of this punishment . With determination , I know that we can achieve this goal . --LRB- CNN -RRB- Seventy years ago , Anne Frank died of typhus in a Nazi concentration camp at the age of 15 . Just two weeks after her supposed death on March 31 , 1945 , the Bergen-Belsen concentration camp where she had been imprisoned was liberated -- timing that showed how close the Jewish diarist had been to surviving the Holocaust . But new research released by the Anne Frank House shows that Anne and her older sister , Margot Frank , died at least a month earlier than previously thought . Researchers re-examined archives of the Red Cross , the International Training Service and the Bergen-Belsen Memorial , along with testimonies of survivors . They concluded that Anne and Margot probably did not survive to March 1945 -- contradicting the date of death which had previously been determined by Dutch authorities . In 1944 , Anne and seven others hiding in the Amsterdam secret annex were arrested and sent to the Auschwitz-Birkenau concentration camp . Anne Frank 's final entry . That same year , Anne and Margot were separated from their mother and sent away to work as slave labor at the Bergen-Belsen camp in Germany . Days at the camp were filled with terror and dread , witnesses said . The sisters stayed in a section of the overcrowded camp with no lighting , little water and no latrine . They slept on lice-ridden straw and violent storms shredded the tents , according to the researchers . Like the other prisoners , the sisters endured long hours at roll call . Her classmate , Nannette Blitz , recalled seeing Anne there in December 1944 : `` She was no more than a skeleton by then . She was wrapped in a blanket ; she could n't bear to wear her clothes anymore because they were crawling with lice . '' Listen to Anne Frank 's friends describe her concentration camp experience . As the Russians advanced further , the Bergen-Belsen concentration camp became even more crowded , bringing more disease . A deadly typhus outbreak caused thousands to die each day . Typhus is an infectious disease caused by lice that breaks out in places with poor hygiene . The disease causes high fever , chills and skin eruptions . `` Because of the lice infesting the bedstraw and her clothes , Anne was exposed to the main carrier of epidemic typhus for an extended period , '' museum researchers wrote . They concluded that it 's unlikely the sisters survived until March , because witnesses at the camp said the sisters both had symptoms before February 7 . `` Most deaths caused by typhus occur around twelve days after the first symptoms appear , '' wrote authors Erika Prins and Gertjan Broek . The exact dates of death for Anne and Margot remain unclear . Margot died before Anne . `` Anne never gave up hope , '' said Blitz , her friend . `` She was absolutely convinced she would survive . '' Her diary endures as one of the world 's most popular books . Read more about Anne Frank 's cousin , a keeper of her legacy . --LRB- CNN -RRB- A Duke student has admitted to hanging a noose made of rope from a tree near a student union , university officials said Thursday . The prestigious private school did n't identify the student , citing federal privacy laws . In a news release , it said the student was no longer on campus and will face student conduct review . The student was identified during an investigation by campus police and the office of student affairs and admitted to placing the noose on the tree early Wednesday , the university said . Officials are still trying to determine if other people were involved . Criminal investigations into the incident are ongoing as well . Students and faculty members marched Wednesday afternoon chanting `` We are not afraid . We stand together , '' after pictures of the noose were passed around on social media . At a forum held on the steps of Duke Chapel , close to where the noose was discovered at 2 a.m. , hundreds of people gathered . `` You came here for the reason that you want to say with me , ` This is no Duke we will accept . This is no Duke we want . This is not the Duke we 're here to experience . And this is not the Duke we 're here to create , ' '' Duke President Richard Brodhead told the crowd . The incident is one of several recent racist events to affect college students . Last month a fraternity at the University of Oklahoma had its charter removed after a video surfaced showing members using the N-word and referring to lynching in a chant . Two students were expelled . In February , a noose was hung around the neck of a statue of a famous civil rights figure at the University of Mississippi . A statement issued by Duke said there was a previous report of hate speech directed at students on campus . In the news release , the vice president for student affairs called the noose incident a `` cowardly act . '' `` To whomever committed this hateful and stupid act , I just want to say that if your intent was to create fear , it will have the opposite effect , '' Larry Moneta said Wednesday . Duke University is a private college with about 15,000 students in Durham , North Carolina . CNN 's Dave Alsup contributed to this report . --LRB- CNN -RRB- The Rev. Robert H. Schuller , California televangelist and founder of the television ministry `` Hour of Power , '' died Thursday , according to his family . He was 88 years old . Schuller , also the founder of Crystal Cathedral megachurch , had been diagnosed with esophageal cancer in August 2013 , a release from `` Hour of Power '' said . `` My father-in-law passed away peacefully early this morning . He was a great Dad and a great man of God , '' said Schuller 's daughter-in-law , Donna Schuller , in a Twitter message . Schuller 's life followed an almost Shakespearean arc . He was born in a Iowa farmhouse without running water and longed to preach from his earliest days . In his autobiography , `` Prayer : My Soul 's Adventure with God , '' he described standing alone by a river and picturing himself delivering sermons to a rapt congregation . After attending a Hope College and Western Theological Seminary in Michigan , he met his wife of more than 60 years , Arvella , while preaching at her church -LRB- she was the organist -RRB- . With their young family in tow , the Schullers caravanned west to California , where he rented a drive-in theater and preached from the roof of the snack bar . It was beneath the dignity of Christian ministry , some local pastors huffed . The `` passion pits '' where teenagers necked was no place for the gospel . Schuller was undeterred , and he quickly outgrew the drive-in . He called the explosive growth of his tiny congregation a `` miracle , '' though his many mainstream critics had other names for it . His confident , breezy version of Christianity -- too breezy , by some estimations -- drew hordes of seekers and lapsed Christians who were put off by the hellfire fulminations of many post-War American preachers . Schuller sold a softer , gentler message , which borrowed heavily , he acknowledged , from the father of the feel-good gospel , Norman Vincent Peale . He preached not to convert or condemn people , but to encourage them , a sentiment he called `` possibility thinking . '' People loved it . `` Evangelicalism at its best wants to be innovative and reach people , '' said Timothy Larsen , a professor of Christian thought at Wheaton College in Illinois . `` And Schuller was a master at that . '' `` What he got right is that the gospel is good news , '' Larsen continued . `` And he preached an uplifting message about personal transformation and uplift and hope . '' Some of Schuller 's favored phrases , though , struck others as cornpone Christianity . `` Turn your hurt into a halo ? '' said Randall Balmer , a professor of American religious history at Dartmouth College , citing one such phrase . `` That 's pretty weak tea . '' Still , Balmer gives Schuller some credit . `` It may be bad theology , but it 's brilliant marketing . '' In 1970 , Schuller began broadcasting `` Hour of Power , '' believed to be one of the first , if not the very first , Sunday service to be shown regularly on television . With his genial smile , priestly robes and gray hair , he looked and talked like a guy who wanted nothing more than to see his flock succeed . The show , which ran for decades , reached millions , making Schuller a televangelist before the term became tarnished by the sins of his many successors . Schuller 's crowning achievement , at least architecturally , still stands in Orange County , California , though it is now owned by the Roman Catholic Church . The Crystal Cathedral , a great gleaming edifice with 10,000 glass panels , gave worshipers a look at the clouds that house the heavens , while Schuller preached in the pulpit below . The message was clear to many : The road to the former ran through the latter . During the 1980s and 1990s , Schuller 's star continued to rise , with presidents stopping by the Crystal Cathedral -- often during campaigns , it should be said -- and future megachurch pastors like Rick Warren and Bill Hybels seeking his advice . As Schuller aged , though , his family was beset by a succession scandal straight from the pages of `` King Lear . '' He tried to install his only son , Bobby Jr. , as pastor of Crystal Cathedral . But the preaching styles of father and son were too different for the congregation -- measured at times at 10,000 strong -- to countenance . Bobby Schuller Jr. left `` Hour of Power '' and the pulpit at Crystal Cathedral after a short time . As the family searched for a new successor and tussled over finances , viewers and donations to the church and its television show dropped precipitously . Crystal Cathedral Ministries filed for bankruptcy in 2010 , citing debts of more than $ 43 million , according to The Associated Press . Schuller 's empire , which once soared as high as his glassy cathedral , had fallen to dust . Eventually , Schuller 's grandson , also named Bobby , took over `` Hour of Power , '' though at a different church . In a statement on Thursday , the younger Schuller recalled standing atop Crystal Cathedral 's 12-story Tower of Hope with his grandfather as they surveyed the surrounding landscape . `` You could see the whole world from there , '' he said . People we 've lost in 2015 . CNN 's Stella Chan reported from Los Angeles . --LRB- CNN -RRB- Never mind cats having nine lives . A stray pooch in Washington State has used up at least three of her own after being hit by a car , apparently whacked on the head with a hammer in a misguided mercy killing and then buried in a field -- only to survive . That 's according to Washington State University , where the dog -- a friendly white-and-black bully breed mix now named Theia -- has been receiving care at the Veterinary Teaching Hospital . Four days after her apparent death , the dog managed to stagger to a nearby farm , dirt-covered and emaciated , where she was found by a worker who took her to a vet for help . She was taken in by Moses Lake , Washington , resident Sara Mellado . `` Considering everything that she 's been through , she 's incredibly gentle and loving , '' Mellado said , according to WSU News . `` She 's a true miracle dog and she deserves a good life . '' Theia is only one year old but the dog 's brush with death did not leave her unscathed . She suffered a dislocated jaw , leg injuries and a caved-in sinus cavity -- and still requires surgery to help her breathe . The veterinary hospital 's Good Samaritan Fund committee awarded some money to help pay for the dog 's treatment , but Mellado has set up a fundraising page to help meet the remaining cost of the dog 's care . She 's also created a Facebook page to keep supporters updated . Donors have already surpassed the $ 10,000 target , inspired by Theia 's tale of survival against the odds . On the fundraising page , Mellado writes , `` She is in desperate need of extensive medical procedures to fix her nasal damage and reset her jaw . I agreed to foster her until she finally found a loving home . '' She is dedicated to making sure Theia gets the medical attention she needs , Mellado adds , and wants to `` make sure she gets placed in a family where this will never happen to her again ! '' Any additional funds raised will be `` paid forward '' to help other animals . Theia is not the only animal to apparently rise from the grave in recent weeks . A cat in Tampa , Florida , found seemingly dead after he was hit by a car in January , showed up alive in a neighbor 's yard five days after he was buried by his owner . The cat was in bad shape , with maggots covering open wounds on his body and a ruined left eye , but remarkably survived with the help of treatment from the Humane Society . --LRB- CNN -RRB- If you 've been following the news lately , there are certain things you doubtless know about Mohammad Javad Zarif . He is , of course , the Iranian foreign minister . He has been U.S. Secretary of State John Kerry 's opposite number in securing a breakthrough in nuclear discussions that could lead to an end to sanctions against Iran -- if the details can be worked out in the coming weeks . And he received a hero 's welcome as he arrived in Iran on a sunny Friday morning . `` Long live Zarif , '' crowds chanted as his car rolled slowly down the packed street . You may well have read that he is `` polished '' and , unusually for one burdened with such weighty issues , `` jovial . '' An Internet search for `` Mohammad Javad Zarif '' and `` jovial '' yields thousands of results . He certainly has gone a long way to bring Iran in from the cold and allow it to rejoin the international community . But there are some facts about Zarif that are less well-known . Here are six : . In September 2013 , Zarif tweeted `` Happy Rosh Hashanah , '' referring to the Jewish New Year . That prompted Christine Pelosi , the daughter of House Minority Leader Nancy Pelosi , to respond with a tweet of her own : `` Thanks . The New Year would be even sweeter if you would end Iran 's Holocaust denial , sir . '' And , perhaps to her surprise , Pelosi got a response . `` Iran never denied it , '' Zarif tweeted back . `` The man who was perceived to be denying it is now gone . Happy New Year . '' The reference was likely to former Iranian President Mahmoud Ahmadinejad , who had left office the previous month . Zarif was nominated to be foreign minister by Ahmadinejad 's successor , Hassan Rouhami . His foreign ministry notes , perhaps defensively , that `` due to the political and security conditions of the time , he decided to continue his education in the United States . '' That is another way of saying that he was outside the country during the demonstrations against the Shah of Iran , which began in 1977 , and during the Iranian Revolution , which drove the shah from power in 1979 . Zarif left the country in 1977 , received his undergraduate degree from San Francisco State University in 1981 , his master 's in international relations from the University of Denver in 1984 and his doctorate from the University of Denver in 1988 . Both of his children were born in the United States . The website of the Iranian Foreign Ministry , which Zarif runs , can not even agree with itself on when he was born . The first sentence of his official biography , perhaps in a nod to the powers that be in Tehran , says Zarif was `` born to a religious traditional family in Tehran in 1959 . '' Later on the same page , however , his date of birth is listed as January 8 , 1960 . And the Iranian Diplomacy website says he was born in in 1961 . So he is 54 , 55 or maybe even 56 . Whichever , he is still considerably younger than his opposite number , Kerry , who is 71 . The feds investigated him over his alleged role in controlling the Alavi Foundation , a charitable organization . The U.S. Justice Department said the organization was secretly run on behalf of the Iranian government to launder money and get around U.S. sanctions . But last year , a settlement in the case , under which the foundation agreed to give a 36-story building in Manhattan along with other properties to the U.S. government , did not mention Zarif 's name . Early in the Iranian Revolution , Zarif was among the students who took over the Iranian Consulate in San Francisco . The aim , says the website Iranian.com -- which cites Zarif 's memoirs , titled `` Mr. Ambassador '' -- was to expel from the consulate people who were not sufficiently Islamic . Later , the website says , Zarif went to make a similar protest at the Iranian mission to the United Nations . In response , the Iranian ambassador to the United Nations offered him a job . In fact , he has now spent more time with Kerry than any other foreign minister in the world . And that amount of quality time will only increase as the two men , with help from other foreign ministers as well , try to meet a June 30 deadline for nailing down the details of the agreement they managed to outline this week in Switzerland . --LRB- CNN -RRB- For the first time in eight years , a TV legend returned to doing what he does best . Contestants told to `` come on down ! '' on the April 1 edition of `` The Price Is Right '' encountered not host Drew Carey but another familiar face in charge of the proceedings . Instead , there was Bob Barker , who hosted the TV game show for 35 years before stepping down in 2007 . Looking spry at 91 , Barker handled the first price-guessing game of the show , the classic `` Lucky Seven , '' before turning hosting duties over to Carey , who finished up . Despite being away from the show for most of the past eight years , Barker did n't seem to miss a beat . --LRB- CNN -RRB- He 's a blue chip college basketball recruit . She 's a high school freshman with Down syndrome . At first glance Trey Moses and Ellie Meredith could n't be more different . But all that changed Thursday when Trey asked Ellie to be his prom date . Trey -- a star on Eastern High School 's basketball team in Louisville , Kentucky , who 's headed to play college ball next year at Ball State -- was originally going to take his girlfriend to Eastern 's prom . So why is he taking Ellie instead ? `` She 's great ... she listens and she 's easy to talk to '' he said . Trey made the prom-posal -LRB- yes , that 's what they are calling invites to prom these days -RRB- in the gym during Ellie 's P.E. class . Trina Helson , a teacher at Eastern , alerted the school 's newspaper staff to the prom-posal and posted photos of Trey and Ellie on Twitter that have gone viral . She was n't surpristed by Trey 's actions . `` That 's the kind of person Trey is , '' she said . To help make sure she said yes , Trey entered the gym armed with flowers and a poster that read `` Let 's Party Like it 's 1989 , '' a reference to the latest album by Taylor Swift , Ellie 's favorite singer . Trey also got the OK from Ellie 's parents the night before via text . They were thrilled . `` You just feel numb to those moments raising a special needs child , '' said Darla Meredith , Ellie 's mom . `` You first feel the need to protect and then to overprotect . '' Darla Meredith said Ellie has struggled with friendships since elementary school , but a special program at Eastern called Best Buddies had made things easier for her . She said Best Buddies cultivates friendships between students with and without developmental disabilities and prevents students like Ellie from feeling isolated and left out of social functions . `` I guess around middle school is when kids started to care about what others thought , '' she said , but `` this school , this year has been a relief . '' Trey 's future coach at Ball State , James Whitford , said he felt great about the prom-posal , noting that Trey , whom he 's known for a long time , often works with other kids . Trey 's mother , Shelly Moses , was also proud of her son . `` It 's exciting to bring awareness to a good cause , '' she said . `` Trey has worked pretty hard , and he 's a good son . '' Both Trey and Ellie have a lot of planning to do . Trey is looking to take up special education as a college major , in addition to playing basketball in the fall . As for Ellie , she ca n't stop thinking about prom . `` Ellie ca n't wait to go dress shopping '' her mother said . `` Because I 've only told about a million people ! '' Ellie interjected . --LRB- CNN -RRB- Michele Bachmann is comparing President Obama to the co-pilot of the doomed Germanwings flight . `` With his Iran deal , Barack Obama is for the 300 million souls of the United States what Andreas Lubitz was for the 150 souls on the German Wings flight - a deranged pilot flying his entire nation into the rocks , '' the Minnesota Republican and former representative wrote in a Facebook comment posted March 31 . `` After the fact , among the smoldering remains of American cities , the shocked survivors will ask , why did he do it ? '' Andreas Lubitz , the co-pilot of Germanwings Flight 9525 , is accused by authorities of deliberately crashing the plane in the French Alps . He died in the crash along with 149 other crew and passengers . The motive of the March 24 crash is under investigation , though investigators are looking in to whether Lubitz feared a medical condition would cause him to lose his pilot 's license . Many comments posted on her Facebook page blasted the former representative . Melissa Coca wrote , `` Comparing this tragedy to anything is moronic and despicable . '' Michael J Pristash wrote , `` Your allusion is so inappropriate and divisive , not to mention disrespectful on so many levels . Shame on you . '' Some also accused her of taking desperate measures to stay in the public eye . Lynda Anderson wrote , `` Posting outrageous things in a pathetic attempt to stay relevant ? '' Negotiations are coming down to the wire between Iran , the United States and other nations on restricting Tehran 's nuclear program to prevent the ability to develop an atomic bomb . One deadline passed Tuesday , but there is a June 30 deadline for a comprehensive deal -- with all technical and diplomatic impasses fully worked out . Bachmann is no stranger to voicing her opinion on the President 's dealing with Iran , personally telling him to `` bomb Iran '' during the 2014 White House Christmas Party . `` I turned to the president and I said , something to the effect of , ` Mr. President , you need to bomb the Iranian nuclear facilities , because if you do n't , Iran will have a nuclear weapon on your watch and the course of world history will change , ' '' she told the Washington Free Beacon . The congresswoman , who sought the GOP presidential nomination in 2012 , said Obama had a `` condescending smile on his face and laughed at me . '' She said he told her : `` Well Michele , it 's just not that easy . '' -Los Angeles -LRB- CNN -RRB- It 's more than just one state 's internal problem . The historic California drought hurts the rest of the union , too . That 's because California is a breadbasket to the nation , growing more than a third of its vegetables and nearly two-thirds of its fruits and nuts . Here 's why we should heed the ongoing drought in the most populous state , a slowly expanding natural disaster now in its fourth year that this week prompted Gov. Jerry Brown to announce a mandatory 25 % cutback in water consumption in all cities . In 2014 , one expert predicted consumers would pay more for some groceries because of the California drought . He was often right , according to statistics gathered by Timothy Richards , agribusiness professor at Arizona State University . Prices rose last year for these items on your kitchen table : . • Berries rose in price by about 80 cents per clamshell to $ 3.88 . • Broccoli by 11 cents per pound to $ 1.89 . • Grapes by 64 cents a pound to $ 3.06 . • Melons by 24 cents a pound to $ 1.23 . • Packaged salad by 23 cents a bag to $ 2.91 . • Peppers by 26 cents a pound to $ 2.39 . Though fruits and vegetable prices fell in February , overall prices are expected to rise this year , because of inflation , U.S. Department of Agriculture economist Annemarie Kuhns said . Fresh fruit prices are projected to rise between 2.5 % and 3.5 % , and vegetables between 2 % and 3 % , close to historical average increases , Kuhns said . Whether the California drought will affect food prices again this year is unknown , thanks to a strong dollar . The greenback 's strength allows producers to import crops that may be withering under the absence of West Coast rain or other misfortunes elsewhere in the nation , Kuhns said . Moreover , the drop in oil prices also eases the cost of transporting food from California to the other 49 states , she said . What economists do n't know yet is whether farmers will plant fewer crops because of the drought . Those decisions are now being made in the field and could boost supermarket prices , she said . `` The drought in California does have the potential to impact the price we pay for fresh fruit and fresh vegetables and dairy and fresh eggs we pay at the counter , '' Kuhns said . `` We are not sure what the exact impact will be . '' The reality is there 's a major drought throughout the West and Southwest . While not as bad as California , Texas and Oklahoma are also seeing extreme and exceptional drought -- the two worst categories -- in several parts of their states , the U.S. Drought Monitor said this week . Overall , the Western drought affects more than 52 million people , the monitor says . As a result , consumers paid a whopping extra 12.1 % for beef and veal in 2014 , the USDA reports . Straining under a drought that began in 2012 , ranchers in Texas and Oklahoma last year saw smaller grazing pastures , paid more for feed , and experienced difficulties accessing water to cool their cattle . So the cattlemen began culling their herds , Kuhns said . This year 's beef and veal prices should rise only by 6 % at most , still higher than the 4.1 % historical average , the feds project . But beef prices offer an object lesson about the drought . `` There 's other areas being affected , '' Kuhns said . It 's called the Golden State for the gold rush of yore , but let 's face it : the rest of the nation flocks to California for vacation because of another golden reason . Its year-round sunshine . So the next time you take a holiday in California , you 'll find a few changes around here , thanks to the drought . Like asking for a glass of water at a restaurant . You wo n't find water waiting for you on the table . Eateries now `` can only serve water to customers on request , '' the State Water Resources Control Board declared in March under expanded emergency regulations . Tourists can also expect to hear a lot of requests at hotels about whether they want their linens and towels laundered daily . These requests are mandatory under the new regulations . And they 'll see fewer homes running decorative fountains . Because much of the snowpack in the Sierra Nevada has alarmingly disappeared , many ski resorts shut down early this year , including at Lake Tahoe , and some are now building zip lines , mountain bike trails and wedding venues to keep tourists coming , the Sacramento Bee reported . `` If the drought continues through next winter and we do not conserve more , the consequences could be even more catastrophic than they already are , '' State Water Board Chair Felicia Marcus said in March . But what about those yummy California wines , you ask ? Guess what . They 're only getting better -- because of the drought . Yes , you read that right . The 2014 wine grape harvest was `` third in a string of great vintages this decade , '' the Wine Institute says . `` California vintners and growers across the state are grateful for another excellent vintage , despite an ongoing drought and earthquake that rocked south Napa in late August just as crush was getting underway , '' the institute said in a statement last year . `` A mild winter and spring caused early bud break , although the overall length of the growing season was similar to past years . '' Wine grapes use relatively low water , said institute spokeswoman Gladys Horiuchi . `` Yes , drought years tend to produce terrific quality , '' she added . `` With the record high California wine grape harvests in 2012 , 2013 and 2014 , there is a good supply of California wine . '' That may be the only thing to toast about this drought . --LRB- CNN -RRB- As goes Walmart , so goes the nation ? Everyone from Apple CEO Tim Cook to the head of the NCAA slammed religious freedom laws being considered in several states this week , warning that they would open the door to discrimination against gay and lesbian customers . But it was the opposition from Walmart , the ubiquitous retailer that dots the American landscape , that perhaps resonated most deeply , providing the latest evidence of growing support for gay rights in the heartland . Walmart 's staunch criticism of a religious freedom law in its home state of Arkansas came after the company said in February it would boost pay for about 500,000 workers well above the federal minimum wage . Taken together , the company is emerging as a bellwether for shifting public opinion on hot-button political issues that divide conservatives and liberals . And some prominent Republicans are urging the party to take notice . Former Minnesota Gov. Tim Pawlenty , who famously called on the GOP to `` be the party of Sam 's Club , not just the country club , '' told CNN that Walmart 's actions `` foreshadow where the Republican Party will need to move . '' `` The Republican Party will have to better stand for '' ideas on helping the middle class , said Pawlenty , the head of the Financial Services Roundtable , a Washington lobbying group for the finance industry . The party 's leaders must be `` willing to put forward ideas that will help modest income workers , such as a reasonable increase in the minimum wage , and prohibit discrimination in things such as jobs , housing , public accommodation against gays and lesbians . '' Walmart , which employs more than 50,000 people in Arkansas , emerged victorious on Wednesday . Hours after the company 's CEO , Doug McMillon , called on Republican Gov. Asa Hutchinson to veto the bill , the governor held a news conference and announced he would not sign the legislation unless its language was fixed . Walmart 's opposition to the religious freedom law once again puts the company at odds with many in the Republican Party , which the company 's political action committee has tended to support . In 2004 , the Walmart PAC gave around $ 2 million to Republicans versus less than $ 500,000 to Democrats , according to data from the Center for Responsive Politics . That gap has grown less pronounced in recent years . In 2014 , the PAC spent about $ 1.3 million to support Republicans and around $ 970,000 for Democrats . It has been a gradual transformation for Walmart . In 2011 , the company bulked up its nondiscrimination policies by adding protections for gender identity . Two years later , the company announced that it would start offering health insurance benefits to same-sex partners of employees starting in 2014 . Retail experts say Walmart 's evolution on these issues over the years is partly a reflection of its diverse consumer base , as well as a recognition of the country 's increasingly progressive views of gay equality -LRB- support for same-sex marriage is at a new high of 59 % , according to a recent Wall Street Journal/NBC News poll -RRB- . `` It 's easy for someone like a Chick-fil-A to take a really polarizing position , '' said Dwight Hill , a partner at the retail consulting firm McMillanDoolittle . `` But in the world of the largest retailer in the world , that 's very different . '' Hill added : Same-sex marriage , `` while divisive , it 's becoming more common place here within the U.S. , and the businesses by definition have to follow the trend of their customer . '' The backlash over the religious freedom measures in Indiana and Arkansas this week is shining a bright light on the broader business community 's overwhelming support for workplace policies that promote gay equality . After Indiana Gov. Mike Pence , a Republican , signed his state 's religious freedom bill into law , CEOs of companies big and small across the country threatened to pull out of the Hoosier state . The resistance came from business leaders of all political persuasions , including Bill Oesterle , CEO of the business-rating website Angie 's List and a one-time campaign manager for former Indiana Gov. Mitch Daniels . Oesterle announced that his company would put plans on hold to expand its footprint in Indianapolis in light of the state 's passage of the religious freedom act . NASCAR , scheduled to hold a race in Indianapolis this summer , also spoke out against the Indiana law . `` What we 're seeing over the past week is a tremendous amount of support from the business community who are standing up and are sending that equality is good for business and discrimination is bad for business , '' said Jason Rahlan , spokesman for the Human Rights Campaign . The debate has reached presidential politics . National Republicans are being forced to walk the fine line of protecting religious liberties and supporting nondiscrimination . Likely GOP presidential candidate Jeb Bush initially backed Indiana 's religious freedom law and Pence , but moderated his tone a few days later . The former Florida governor said Wednesday that Indiana could have taken a `` better '' and `` more consensus-oriented approach . '' `` By the end of the week , Indiana will be in the right place , '' Bush said , a reference to Pence 's promise this week to fix his state 's law in light of the widespread backlash . Others in the GOP field are digging in . Sen. Ted Cruz of Texas , the only officially declared Republican presidential candidate , said Wednesday that he had no interest in second-guessing Pence and lashed out at the business community for opposing the law . `` I think it is unfortunate that large companies today are listening to the extreme left wing agenda that is driven by an aggressive gay marriage agenda , '' Cruz said . Meanwhile , former Secretary of State Hillary Clinton , who previously served on Walmart 's board of directors , called on Hutchinson to veto the Arkansas bill , saying it would `` permit unfair discrimination '' against the LGBT community . Jay Chesshir , CEO of the Little Rock Regional Chamber of Commerce in Arkansas , welcomed Hutchinson 's pledge on Wednesday to seek changes to his state 's bill . He said businesses are not afraid to wade into a politically controversial debate to ensure inclusive workplace policies . `` When it comes to culture and quality of life , businesses are extremely interested in engaging in debate simply because it impacts its more precious resource -- and that 's its people , '' Chesshir said . `` Therefore , when issues arise that have negative or positive impact on those things , then the business community will again speak and speak loudly . '' --LRB- CNN -RRB- Five Americans who were monitored for three weeks at an Omaha , Nebraska , hospital after being exposed to Ebola in West Africa have been released , a Nebraska Medicine spokesman said in an email Wednesday . One of the five had a heart-related issue on Saturday and has been discharged but has n't left the area , Taylor Wilson wrote . The others have already gone home . They were exposed to Ebola in Sierra Leone in March , but none developed the deadly virus . They are clinicians for Partners in Health , a Boston-based aid group . They all had contact with a colleague who was diagnosed with the disease and is being treated at the National Institutes of Health in Bethesda , Maryland . As of Monday , that health care worker is in fair condition . The Centers for Disease Control and Prevention in Atlanta has said the last of 17 patients who were being monitored are expected to be released by Thursday . More than 10,000 people have died in a West African epidemic of Ebola that dates to December 2013 , according to the World Health Organization . Almost all the deaths have been in Guinea , Liberia and Sierra Leone . Ebola is spread by direct contact with the bodily fluids of an infected person . --LRB- CNN -RRB- Andrew Getty , one of the heirs to billions of oil money , appears to have died of natural causes , a Los Angeles Police Department spokesman said . The coroner 's preliminary assessment is there was no foul play involved in the death of Getty , grandson of oil tycoon J. Paul Getty , said Detective Meghan Aguilar . Andrew Getty , 47 , had `` several health issues , '' Aguilar said , adding that an autopsy will be conducted . There is no criminal investigation underway , he said . Some medication had also been recovered from Getty 's home , though investigators do n't know whether Getty was taking it or what his medical history was , Ed Winter , assistant chief in the Los Angeles County coroner 's office , told CNN affiliate KTLA Tuesday night . KTLA reported that Getty was found on his side near a bathroom in his home . Getty 's parents , Ann and Gordon Getty , released a statement confirming their son 's death and asking for privacy . Where the Getty family fortune came from . Gordon Getty is one of three living sons of J. Paul Getty , the oil baron who was thought to be the richest man in the world at the time of his death in 1976 . Gordon Getty , 81 , has a net worth of $ 2.1 billion , according to Forbes . One other son died in 1958 and another died in 1973 . Gordon Getty spearheaded the controversial sale of Getty to Texaco for $ 10 billion in 1984 . In its list of richest American families , Forbes estimated the Gettys ' net worth to be about $ 5 billion . Court records show Andrew Getty had recently filed to get a restraining order against an ex-girlfriend . A hearing in the case had been scheduled for next week . In his request , Getty said he had been diagnosed with a serious medical condition in 2013 . `` A rise in my blood pressure places me in grave risk of substantial and irreparable injury or death , '' he wrote in the petition . `` My doctors have advised that heated arguments can cause my blood pressure to rise dangerously . '' Andrew Getty had three brothers and three half-sisters . People we 've lost in 2015 . CNN 's Doug Criss , Janet DiGiacomo , Mark Mooney , Mike Love , Julie In and Cheri Mossburg contributed to this report . --LRB- CNN -RRB- A year ago Bloomberg published a story with the following headline : Mike Pence , a Koch Favorite , Mulls 2016 Run for President . The story ticked off items on Pence 's conservative things-to-do list while also noting his close ties to the deep-pocketed Koch brothers , as well as other right-wing lobbying groups . Last August the Indiana governor was in Dallas for an Americans for Prosperity event ; the group is backed by the conservative Koch brothers , and supported Gov. Pence 's tax-slashing budget . Now , Pence is drawing huge heat for his controversial decision to sign a religious freedom law last week that opens the door to discrimination against gays and lesbians . Why would Pence ignore the pleas of Indiana 's Chamber of Commerce as well as the Republican mayor of his state capital and sign such a bill ? Because there 's a very powerful wing of his party that wants a conservative as its 2016 candidate and this bill was Pence 's way of shoring up his street cred . It is also the reason why Republican Jeb Bush , Pence 's fellow White House hopeful , who is viewed as a little light in that category , was first to rush in to defend Pence and the law . One lesson here : Just because more than 70 % of the country now lives in states where same-sex marriage is legal does not mean 70 % of the country is happy about it . Backlash aside , the fact is Pence has scored a lot of points this week among ultraconservatives . And while that may not be enough to get him over this political hump , the very public debate that now embroils him -- and Arkansas Gov. Asa Hutchinson , and likely 14 other states considering similar proposals this year -- is more than enough to drag the entire Republican field farther to the right than the party had hoped . Pence : ` Was I expecting this kind of backlash ? Heavens no . ' For there is no way a Republican can get through the pending primary without denouncing LGBT rights , which unfortunately will turn numerous Americans into single-issue voters . I foolishly hoped the issue of LGBT rights would be a bit player in the 2016 general election , overshadowed by foreign policy and the economy . Instead it looks like it 's going to be dragged down to a replay of Pat Buchanan 's `` cultural war '' speech , during which he told the 1992 Republican National Convention : `` We stand with -LRB- George H.W. Bush -RRB- against the amoral idea that gay and lesbian couples should have the same standing in law as married men and women '' and later followed with `` There is a religious war going on in this country . It is a cultural war , as critical to the kind of nation we shall be as the Cold War itself . For this war is for the soul of America . '' Progressives may enjoy watching Pence 's temporary fall from grace , but his policy rhetoric has echoed that of 2016 hopeful Sen. Ted Cruz of Texas , who has indicated a federal ban on same-sex marriage is not off the GOP table . And even if you think neither Pence nor Bush nor Cruz will win the nomination , someone has to . In light of that , listen to conservative former Arkansas Gov. Mike Huckabee , a potential 2016 candidate describing conservatives ' discomfort with same-sex marriage : `` It 's like asking someone who 's Jewish to start serving bacon-wrapped shrimp in their deli . '' Or Louisiana Gov. Bobby Jindal : `` I certainly will support Ted Cruz and others that are talking about making ... a constitutional amendment to allow states to continue to define marriage . '' Or Wisconsin Gov. Scott Walker , who has a long history of fighting against same-sex marriage and civil unions . And Ben Carson said jail turns people gay , so there 's that . Remember : Pence did n't act alone . He only signed a bill that first passed muster with other elected officials . In fact , according to the American Civil Liberties Union , `` the Indiana RFRA -LSB- Religious Freedom Restoration Act -RSB- is one of 24 introduced in 15 states this year that could allow someone to use their religious beliefs to discriminate . Numerous other bills specifically single out the LGBT community for unequal treatment . '' Who supports , denounces Indiana law ? Gallup Polls may suggest voters nationwide are more gay-friendly , but the trend on the state level tells a different story . Perhaps we 're witnessing the final gasp of long-ago biases . Or maybe those biases are having a rebirth we had underestimated . Former Rep. Barney Frank of Massachusetts , the first member of Congress to marry someone of the same sex while in office , said he believes Republicans want the Supreme Court to rule in favor of same-sex marriage to provide political cover in the GOP primary . `` We 're winning , '' he told a crowd in Chicago recently while promoting his latest book . I guess if you look at where the country was on LGBT issues 10 years ago , we definitely are . That 's assuming you are part of the `` we '' who believe LGBT people should have the same rights as their heterosexual/cisgender counterparts . But as the situation in Indiana has shown , `` winning '' should not be mistaken for having `` won . '' For it is doubtful that a candidate will be able to avoid taking a position on the wave of so-called `` religious freedom '' bills snaking through red-state legislatures . Or to sidestep the topic of a constitutional amendment when it 's raised in a debate or at a campaign stop , especially with Republicans controlling both the House and the Senate . Pence , and to a lesser extent , Jeb Bush , may be toxic now but America has a short attention span . More importantly , they are not alone . Frank said when progressives get angry they march in the streets , and when conservatives get mad they march to the polls . If that holds true in 2016 , `` winning '' is going to feel very strange . --LRB- CNN -RRB- Filipinos are being warned to be on guard for flash floods and landslides as tropical storm Maysak approached the Asian island nation Saturday . Just a few days ago , Maysak gained super typhoon status thanks to its sustained 150 mph winds . It has since lost a lot of steam as it has spun west in the Pacific Ocean . It 's now classified as a tropical storm , according to the Philippine national weather service , which calls it a different name , Chedeng . It boasts steady winds of more than 70 mph -LRB- 115 kph -RRB- and gusts up to 90 mph as of 5 p.m. -LRB- 5 a.m. ET -RRB- Saturday . Still , that does n't mean Maysak wo n't pack a wallop . Authorities took preemptive steps to keep people safe such as barring outdoor activities like swimming , surfing , diving and boating in some locales , as well as a number of precautionary evacuations . Gabriel Llave , a disaster official , told PNA that tourists who arrive Saturday in and around the coastal town of Aurora `` will not be accepted by the owners of hotels , resorts , inns and the like ... and will be advised to return to their respective places . '' Aldczar Aurelio , a meteorologist with the Philippine Atmospheric , Geophysical and Astronomical Services Administration -LRB- PAGASA -RRB- , said the storm was centered 200 miles southwest of Aurora province as of 5 p.m. -LRB- 5 a.m. ET -RRB- and heading west at a 12.5 mph clip . It 's expected to make landfall Sunday morning on the southeastern coast of Isabela province and be out of the Philippines by Monday . Ahead of the storm . Isabela Gov. Faustino Dry III warned Saturday that residents should act as if this will be `` no ordinary typhoon . '' Dry told PNA , `` We do not know what the impact will be once it will make landfall . '' -Norfolk , Virginia -LRB- CNN -RRB- The second mate of the Houston Express probably could n't believe what he was seeing . Hundreds of miles from land there was a small boat nearby . At first it looked abandoned . It was in bad shape , listing to one side . The crew of the 1,000-foot long container ship thought it was a yacht that had wrecked . Incredibly , as they got closer , they saw there was a man on it , signaling for help . `` He was moving , walking around , waving to us and in surprisingly good condition , '' Capt. Thomas Grenz told CNN by phone Friday . That man , Louis Jordan , 37 , had an amazing story . He 'd been drifting on the 35-foot Pearson sailboat for more than two months since leaving Conway , South Carolina , to fish in the ocean . Just a few days into his trip , a storm capsized his boat and broke his mast . One of his shoulders was broken , too , so he could n't fix the boat right away . Eventually he was able to rig a makeshift mast and sail , but he could make little headway against the currents . `` It took so long , '' Jordan said . `` It moved so slowly . '' The boat capsized two more times before he was rescued , according to Jordan . His father , Frank Jordan , told CNN 's Jim Sciutto that he was expecting his son to look different . `` He looked good . Had n't lost too much weight . He was n't badly sunburned like I thought he probably would be , '' he said . Lost at sea for 66 days . After his food and water ran out , it became an issue of survival . Collecting fresh water was a nightmare for Jordan . The weather would n't cooperate . Records show there were more than a dozen storms off the coast of the Carolinas during the time he was missing . The precipitation came at night during harsh conditions . `` I had tried to collect -LRB- rain -RRB- water ... but every time the waves would splash into the boat , '' Jordan said . `` The waves would put saltwater into my freshwater and it tasted bad . `` Finally the conditions were right . I filled up my water tank , which is 25 gallons . I filled up a bucket . '' Then there was the issue of food . The fish were n't cooperating , but after a while Jordan learned they were attracted to his laundry , which he would put out to sea for a rinse . The fish would swim in and out of his clothes and he could easily scoop them up with a hand net , he said . Jordan came ashore Thursday evening . CNN affiliate WAVY in Norfolk , Virginia , reported that he was able to walk from the helicopter into Sentara Norfolk General Hospital about 7:30 p.m. Coast Guard officials have said they have found no reason to doubt Jordan 's incredible story . They noted that his father contacted them January 29 to report his son and his boat missing . Frank Jordan addressed the skepticism about his son 's appearance , saying the boat stayed afloat and upright most of the time . His son spent most of his days in the cabin , out of the sun . Frank Jordan said it was obvious when the Jordans met at the hospital Friday morning that his normally low-key and private son had been through an ordeal . `` I know he went through what he went through , '' Frank Jordan said . Jordan is an unemployed truck driver who lived on his boat at a marina in Conway . He had free rent and free food in the river , he said . But when it became difficult to catch dinner , he took off for the ocean in hopes he would land some bigger fish . Frank Jordan told CNN 's Wolf Blitzer on Thursday that he had worried about his son , who is an inexperienced sailor , but he held hope because his son had a good boat . And he had the strength to make it . `` He 's got a very strong constitution and -LRB- is strong -RRB- not only physically , but spiritually , '' Frank Jordan said . `` And he told me on the phone that he was praying the whole time , so I believe that sustained him a great deal . '' Rescue swimmer Kyle McCollum was the first to care for Jordan on the flight back to land . `` You would expect sunburns , severe sunburn , blisters maybe ... a bunch of medical issues that could possibly be wrong with him , '' he said . `` But for him to be in his current state was pretty amazing . '' Grenz was also surprised by Jordan 's condition , physically and mentally . The rescued sailor knew almost exactly what day it was , remarkable for someone who had been on the water for more than 60 days . Jordan was dehydrated and said he was hungry . `` We took him to a rescue boat , '' the container ship captain said . `` He was given water and pea soup to gain some power again . '' Derriel Morris , a neighbor at the Bucksport Plantation Marina & RV Resort called Jordan a nice guy who loved his 47-year-old boat , named `` Angel . '' Morris said : `` It was immaculate , it was gorgeous , beautifully painted . I mean it looked like a brand new sailboat . '' Morris told CNN affiliate WPDE that one day in January he was going to the store and Jordan asked him to bring back some coffee creamer . But when he returned to the marina , Jordan had slipped away . `` There was no shore line , no hose ; it was like he was never there , '' Morris told the station . After he disappeared others who also live there held a candlelight ceremony . The marina 's manager , Jeff Weeks , told WPDE that Jordan is expected to be back at Buscksport next week . Tales of people who cheated death after days , weeks adrift . --LRB- CNN -RRB- Paul Walker is hardly the first actor to die during a production . But Walker 's death in November 2013 at the age of 40 after a car crash was especially eerie given his rise to fame in the `` Fast and Furious '' film franchise . The release of `` Furious 7 '' on Friday offers the opportunity for fans to remember -- and possibly grieve again -- the man that so many have praised as one of the nicest guys in Hollywood . `` He was a person of humility , integrity , and compassion , '' military veteran Kyle Upham said in an email to CNN . Walker secretly paid for the engagement ring Upham shopped for with his bride . `` We did n't know him personally but this was apparent in the short time we spent with him . I know that we will never forget him and he will always be someone very special to us , '' said Upham . The actor was on break from filming `` Furious 7 '' at the time of the fiery accident , which also claimed the life of the car 's driver , Roger Rodas . Producers said early on that they would not kill off Walker 's character , Brian O'Connor , a former cop turned road racer . Instead , the script was rewritten and special effects were used to finish scenes , with Walker 's brothers , Cody and Caleb , serving as body doubles . There are scenes that will resonate with the audience -- including the ending , in which the filmmakers figured out a touching way to pay tribute to Walker while `` retiring '' his character . At the premiere Wednesday night in Hollywood , Walker 's co-star and close friend Vin Diesel gave a tearful speech before the screening , saying `` This movie is more than a movie . '' `` You 'll feel it when you see it , '' Diesel said . `` There 's something emotional that happens to you , where you walk out of this movie and you appreciate everyone you love because you just never know when the last day is you 're gon na see them . '' There have been multiple tributes to Walker leading up to the release . Diesel revealed in an interview with the `` Today '' show that he had named his newborn daughter after Walker . Social media has also been paying homage to the late actor . A week after Walker 's death , about 5,000 people attended an outdoor memorial to him in Los Angeles . Most had never met him . Marcus Coleman told CNN he spent almost $ 1,000 to truck in a banner from Bakersfield for people to sign at the memorial . `` It 's like losing a friend or a really close family member ... even though he is an actor and we never really met face to face , '' Coleman said . `` Sitting there , bringing his movies into your house or watching on TV , it 's like getting to know somebody . It really , really hurts . '' Walker 's younger brother Cody told People magazine that he was initially nervous about how `` Furious 7 '' would turn out , but he is happy with the film . `` It 's bittersweet , but I think Paul would be proud , '' he said . CNN 's Paul Vercammen contributed to this report . --LRB- CNN -RRB- The United States and its negotiating partners reached a very strong framework agreement with Iran in Lausanne , Switzerland , on Thursday that limits Iran 's nuclear program in such a way as to effectively block it from building a nuclear weapon . Expect pushback anyway , if the recent past is any harbinger . Just last month , in an attempt to head off such an agreement , House Speaker John Boehner invited Israeli Prime Minister Benjamin Netanyahu to preemptively blast it before Congress , and 47 senators sent a letter to the Iranian leadership warning them away from a deal . The debate that has already begun since the announcement of the new framework will likely result in more heat than light . It will not be helped by the gathering swirl of dubious assumptions and doubtful assertions . Let us address some of these : . The most misleading assertion , despite universal rejection by experts , is that the negotiations ' objective at the outset was the total elimination of any nuclear program in Iran . That is the position of Netanyahu and his acolytes in the U.S. Congress . But that is not and never was the objective . If it had been , there would have been no Iranian team at the negotiating table . Rather , the objective has always been to structure an agreement or series of agreements so that Iran could not covertly develop a nuclear arsenal before the United States and its allies could respond . The new framework has exceeded expectations in achieving that goal . It would reduce Iran 's low-enriched uranium stockpile , cut by two-thirds its number of installed centrifuges and implement a rigorous inspection regime . Another dubious assumption of opponents is that the Iranian nuclear program is a covert weapons program . Despite sharp accusations by some in the United States and its allies , Iran denies having such a program , and U.S. intelligence contends that Iran has not yet made the decision to build a nuclear weapon . Iran 's continued cooperation with International Atomic Energy Agency inspections is further evidence on this point , and we 'll know even more about Iran 's program in the coming months and years because of the deal . In fact , the inspections provisions that are part of this agreement are designed to protect against any covert action by the Iranians . What 's more , the rhetoric of some members of Congress has implied that the negotiations have been between only the United States and Iran -LRB- i.e. , the 47 senators ' letter warning that a deal might be killed by Congress or a future president -RRB- . This of course is not the case . The talks were between Iran and the five permanent members of the U.N. Security Council -LRB- United States , United Kingdom , France , China and Russia -RRB- plus Germany , dubbed the P5 +1 . While the United States has played a leading role in the effort , it negotiated the terms alongside its partners . If the agreement reached by the P5 +1 is rejected by Congress , it could result in an unraveling of the sanctions on Iran and threaten NATO cohesion in other areas . Another questionable assertion is that this agreement contains a sunset clause , after which Iran will be free to do as it pleases . Again , this is not the case . Some of the restrictions on Iran 's nuclear activities , such as uranium enrichment , will be eased or eliminated over time , as long as 15 years . But most importantly , the framework agreement includes Iran 's ratification of the Additional Protocol , which allows IAEA inspectors expanded access to nuclear sites both declared and nondeclared . This provision will be permanent . It does not sunset . Thus , going forward , if Iran decides to enrich uranium to weapons-grade levels , monitors will be able to detect such a move in a matter of days and alert the U.N. Security Council . Many in Congress have said that the agreement should be a formal treaty requiring the Senate to `` advise and consent . '' But the issue is not suited for a treaty . Treaties impose equivalent obligations on all signatories . For example , the New START treaty limits Russia and the United States to 1,550 deployed strategic warheads . But any agreement with Iran will not be so balanced . The restrictions and obligations in the final framework agreement will be imposed almost exclusively on Iran . The P5 +1 are obligated only to ease and eventually remove most but not all economic sanctions , which were imposed as leverage to gain this final deal . Finally some insist that any agreement must address Iranian missile programs , human rights violations or support for Hamas or Hezbollah . As important as these issues are , and they must indeed be addressed , they are unrelated to the most important aim of a nuclear deal : preventing a nuclear Iran . To include them in the negotiations would be a poison pill . This agreement should be judged on its merits and on how it affects the security of our negotiating partners and allies , including Israel . Those judgments should be fact-based , not based on questionable assertions or dubious assumptions . --LRB- CNN -RRB- If you 're famous and performing the American national anthem , be prepared to become a national hero or a national disgrace . Facts are facts . Just ask Vince , Whitney , Roseanne , Jimi and Michael . Mötley Crüe 's Vince Neil reminded us again this week of the dangers of tackling `` The Star-Spangled Banner . '' Sure , he can shred it on `` Girls , Girls , Girls '' and `` Dr. Feelgood , '' but this is a different story -- a completely different story . To say Neil butchered the song before the Las Vegas Outlaws Arena Football League game would be unkind to those in the profession . There 's less carnage when butchers are done with their work . The late Whitney Houston set the modern standard for the national anthem at Super Bowl XXV . In the early stages of the Gulf War in 1991 , a patriotic America saluted her performance . Just six months earlier , comedian Roseanne Barr may have established the low-water mark . The crowd at the San Diego Padres game booed her rendition and President George H. W. Bush called it `` disgraceful . '' There 's nothing quite like getting the presidential thumbs down . One of the most controversial and beloved versions of `` The Star-Spangled Banner '' comes from 1969 . Guitar slinger Jimi Hendrix inflamed mainstream America with his psychedelic take on the national anthem to the delight of the Woodstock generation . And then there 's Michael Bolton 's version . Overly wrought songs are his specialty and he does n't disappoint in that department when he sings at the American League Championship Series in 2003 . Bolton belts it out , but there 's one little problem -- the words . Can anyone say crib notes ? -London -LRB- CNN -RRB- A 19-year-old man was charged Wednesday with terror offenses after he was arrested as he returned to Britain from Turkey , London 's Metropolitan Police said . Yahya Rashid , a UK national from northwest London , was detained at Luton airport on Tuesday after he arrived on a flight from Istanbul , police said . He 's been charged with engaging in conduct in preparation of acts of terrorism , and with engaging in conduct with the intention of assisting others to commit acts of terrorism . Both charges relate to the period between November 1 and March 31 . Rashid is due to appear in Westminster Magistrates ' Court on Wednesday , police said . CNN 's Lindsay Isaac contributed to this report . --LRB- CNN -RRB- Sky watchers in western North America are in for a treat : a nearly five-minute total lunar eclipse this morning . Here 's how it 's unfolding : . It started at 3:16 a.m. Pacific Daylight Time , when the moon began moving into Earth 's shadow . For the next hour and 45 minutes , that shadow will move across the moon and engulf it at 4:58 a.m. Pacific Time . The total eclipse will only last four minutes and 43 seconds , and NASA says that makes it the shortest one of the century . Watch it live on NASA TV . While people west of the Mississippi River will have the best view , at least a partial eclipse will be visible across the nation . But sunrise will interrupt the show on the East Coast . Parts of South America , India , China and Russia also will be able to see the eclipse , but it wo n't be visible in Greenland , Iceland , Europe , Africa or the Middle East . A lunar eclipse happens when the sun , Earth and moon form a straight line in space , with the Earth smack in the middle . The sun shines on the Earth and creates a shadow . As the moon moves deeper into that shadow , it appears to turn dark and may even appear to be a reddish color . Why red ? Because Earth 's atmosphere is filtering out most of the blue light . Some people have nicknamed the effect the `` blood moon . '' NASA says lunar eclipses typically happen at least twice a year , but this eclipse is the third in a series of four in a row , known as a `` tetrad . '' The first was on April 15 , 2014 . The second was in September 2014 , the next is Saturday and there will be one more , on September 28 . If you want to learn more about the eclipse , NASA astronomer Mitzi Adams will take questions on Twitter @NASA_Marshall . Did you see the total lunar eclipse ? Share your photos with CNN iReport . --LRB- CNN -RRB- Standing up for what you believe . What does it cost you ? What do you gain ? Memories Pizza in the Indiana town of Walkerton is finding out . The family-run restaurant finds itself at the center of the debate over the state 's Religious Freedom Restoration Act after its owners said they 'd refuse to cater a same-sex couple 's wedding . `` If a gay couple was to come and they wanted us to bring pizzas to their wedding , we 'd have to say no , '' Crystal O'Connor told CNN affiliate WBND-TV in South Bend . The statement struck at the heart of fears by critics , who said the new law would allow businesses to discriminate against gays and lesbians . They called for boycotts . But supporters also rallied . And by the end of the week , they had donated more than $ 842,000 for the business . Social media unloaded on the pizzeria in the community of 2,100 people that few folks outside northern Indiana knew existed before this week . RiskyLiberal tweeted : `` Dear #MemoriesPizza . No . My boycotting your business because I do n't like your religious bigotry is not a violation of your freedom to practice your religion . '' `` Do n't threaten #MemoriesPizza '' tweeted Aღanda . `` Just mock them for their ignorance . '' Bad reviews flooded the restaurant 's Facebook page , most having little to do with the quality of the food . Many too vulgar to share . `` Do you really want to financially support a company that treats some of your fellow citizens like second class citizens ? BOYCOTT MEMORIES PIZZA !! '' said Rob Katz of Indianapolis . `` Let 's hope they either rethink their policy or the free market puts them out of business . '' Anti-bigotry critics harass wrong pizzeria . But one outburst in particular shut down the restaurant Wednesday and was expected to do the same Thursday . `` Who 's going to Walkerton with me to burn down Memories Pizza ? '' Jessica Dooley of Goshen tweeted , according to the Walkerton Police Department . The account has been deleted since the tweet was posted . Detectives who investigated have recommended charges of harassment , intimidation and threats , according to Charles Kulp , assistant police chief . The mood was a bit more subdued on the streets of Walkerton . A man stood outside Memories simply holding a sign that reads `` bigots . '' Jason Narducy bought $ 100 of pizza from another shop down the street and started handing it out , WBND reported . `` Do you want some non-discriminatory pizza ? '' Narducy asked . But for every tweet and Facebook post taking Memories Pizza to task were words of support and a groundswell of financial support . `` Because nothing says tolerance like threatening to kill Christians & burn down their businesses , '' said a tweet from Victor Nikki . `` What 's happening to #MemoriesPizza is n't the free market , it 's a lynch mob , '' tweeted Savannah . `` Cyber bulling is n't the same as taking your business elsewhere . '' Supporters rallied to a GoFundMe page in support of Memories Pizza . By the time the fundraiser ended late Friday , $ 842,387 had been raised . The purpose of the campaign is `` to relieve the financial loss endured by the proprietors ' stand for faith , '' according to Lawrence Billy Jones II , the man who started it . For the O'Connors their stand was no pie in the sky dream . It was n't calculated but was spurred by their beliefs , they told WBND . `` That 's a lifestyle that you choose . I choose to be heterosexual . They choose to be homosexual , '' Kevin O'Connor told the TV station . `` You ca n't beat me over the head with something they choose to be . '' Faced with threats against business , they 're still weighing the cost . CNN 's Rob Frehse and Melanie Whitley contributed to this report . --LRB- CNN -RRB- It 's the kind of thing you see in movies , like Robert Redford 's role in `` All Is Lost '' or Ang Lee 's `` Life of Pi . '' But , in real life , it 's hard to swallow the idea of a single person being stranded at sea for days , weeks , if not months and somehow living to talk about it . Miracles do happen , though , and not just in Hollywood . We 're not talking about people who float aimlessly or run aground after running out of gas or being let down by faltering winds only to be picked up a few hours later by the U.S. Coast Guard . Much rarer are cases in which individuals become lost at sea long enough that they run out of whatever food and drinking water they 'd brought aboard , if any . In order to survive , they ca n't bank on technology or the proximity of a nearby city , town or boat -- but instead must rely on ingenuity , resourcefulness and luck . It 's hard to say how many of these types of stories end sadly , with a sailor dying at sea , except that it is a much higher number than those that end in rescues . Such happy endings do occur -- given what rescue agencies have reported and assuming you believe what any sole survivor says , a big qualifier since typically no one else can prove or refute their accounts . Below are a few recent examples : . Louis Jordan says that he set off on his 35-foot sailboat from South Carolina in late January . He headed into the Gulf Stream looking for a good spot to catch fish . And then everything -- his boat , his life -- turned upside down . Rescued man says he is ` utterly thankful ' Not only did his boat capsize , but its mast broke , Jordan said . And so , too , did his shoulder . He bought time by rationing water , then collecting fresh water in a bucket . As to food , Jordan says he used laundry to trap and scoop up fish . And he rigged a makeshift mast and sail . But , Jordan said , `` It took so long . It moved so slowly . '' His sailboat would capsize two more times before crew members on a German-flagged container ship , the Houston Express , spotted Jordan about 200 miles off the North Carolina coast on Thursday . After their reunion , his father greeted him with a hug and an admission every parent dreads . `` I thought I lost you . '' Jose Salvador Alvarenga says his journey began in Paredon Viejo , a port on Mexico 's Pacific coast , in late 2012 . The exact date is up for debate -- he says he set off in December , locals say it was November . But what 's not in doubt is that , after he left , he disappeared . Until January 2013 . That 's when Alvarenga interacted with humans once again , thousands of miles away on a remote atoll in the Marshall Islands . Castaway recounts how he survived over a year adrift in Pacific . What was supposed to be a one-day trip , he says , turned into an arduous odyssey across the Pacific Ocean , one that saw him lose his fishing companion and tested his will and ability to survive . His nightmare began when winds blew the pair off course . Then a storm hit causing their boat , which was about three people long and one wide , to lose its engine and use of its radio communication and GPS systems . Four weeks in , Alvarenga said his partner -- 23-year-old Ezequiel Cordova , according to the boat 's owner -- died because he refused to eat raw birds . The days , weeks and months ran together after that . Alvarenga says he drank rainwater and , when there was n't any available , his own urine . He ate sea turtles . Then , after 13 or 14 months adrift , he and his small , heavily damaged boat arrived on the Ebon Atoll , about a 22-hour boat ride from the Marshall Islands capital of Majuro . The atoll has one phone line , no Internet service and a few residents , two of whom Alvarenga spotted and shouted to after spending a night in the woods . The El Salvador native told CNN that his faith in God helped him survive . `` I thought , ' I am going to get out , '' he said . `` Get out , get out , get out . '' Some in their late 60s might relax in their retirement , reining it in a few notches as life slows down . And if you live in Hawaii , there 's even more reason to take it easy . The thing is : Ron Ingraham is n't one of those people . He 's a fisherman . The sea is both his life and livelihood , his son , Zakary , told CNN . And he 's tough , with his son jokingly comparing him to Rambo . Still , even the hardiest fishermen would have been tested by what Ron Ingraham went through after setting off around last Thanksgiving solo from the Hawaiian island of Molokai . Son vindicated as father rescued after 12 days at sea . After bad weather hit , Ron Ingraham told CNN affiliate KHNL/KGMB that his 25-foot sailboat went `` backwards all night long . '' At one point , a huge wave struck -- pushing his mast into the water and him as well . The 67-year-old used a rope to pull himself back in . But his boat could n't be rescued so easily , leaving him at the mercy of the current . A distress call went out , prompting a search that would cover 12,000 square miles . When a Coast Guard official told him the search was being called off December 1 , Zakary Ingraham responded , `` I do n't feel like he 's dead . I do n't feel it . '' He was right . Twelve days after that first distress call , Ron Ingraham was picked up about 64 miles -LRB- 103 kilometers -RRB- south of Honolulu `` weak , hungry and dehydrated '' and -- most importantly -- alive . The veteran fisherman headed back to shore only after getting assurances his damaged boat would come with him . In February 2012 , two friends asked 18-year-old Adrian Vasquez whether he wanted to tag along on an overnight fishing expedition . He said yes , and the three set off from the Panama town of San Carlos on a small boat , Vasquez 's mother , Nilsa de la Cruz , recalled . Things started out well , by all accounts . The three caught plenty of fish . Then , their boat 's engine died without warning . And , with no tools and scant navigational experience , the trio did n't know what to do , according to Vasquez 's mother . Mother calls Panama teen 's return ' a miracle ' Vazquez ate raw fish and drank rainwater as currents swept his boat , the Fifty Cents , further and further from the coast and into the Pacific Ocean . Somewhere along the way , his two companions died . It 's not clear exactly how , with Ecuadorian Rear . Adm. Freddy Garcia Calle saying Vasquez threw their bodies into the sea `` because they had become badly decomposed . '' Some 26 days after and nearly 600 miles away from where the journey began , fishermen spotted the tiny vessel north of the Galapagos Islands . The Ecuadorian navy came in and picked up the teenage survivor , who 'd lost 20 pounds and showed `` severe signs of dehydration and lack of nutrition , '' according to Calle . He returned home to loved ones eager to embrace him , but mindful of giving him time to process the ordeal . `` For us , this is an opportunity to get closer as a family , '' his mother said by phone , `` to be more understanding and loving . '' Sometimes one does n't have to be in the ocean for weeks to have his or her life imperiled . Sometimes people do n't have to set off by boat to have the sea challenge them to the end . For proof , look no further than Hiromitsu Shinkawa . 60-year-old man waves red flag to alert rescuers . He was at home on March 11 , 2011 , when a massive 9.0 magnitude earthquake struck 231 miles northeast of Tokyo . A devastating tsunami followed , its 30-foot waves ravaging cities and towns and damaging several nuclear reactors . By the time it had run the course , nearly 16,000 people were dead . It 's a miracle Shinkawa was n't one of them . Shortly after the quake , he and his wife had gone to collect some belongings when the tsunami slammed their hometown of Minamisoma . His home was one of the tens of thousands destroyed by the the huge , powerful tsunami wave . `` I was saved by holding onto the roof , '' the 60-year-old said , according to Kyodo News Agency . `` But my wife was swept away . ' More than two days later , video showed Shinkawa barely visible amid heaps of splintered wood , shattered homes and other debris floating more than nine miles -LRB- 15 kilometers -RRB- out to sea . He was waving a self-made red flag . After being spotted by crew aboard a Japanese Maritime Self-Defense Force destroyer and picked up in a smaller rescue boat , he took a drink offered to him and burst into tears , Kyodo reported . Shinkawa told his rescuers , `` I thought today was the last day of my life . '' --LRB- CNN -RRB- Since Iran 's Islamic Revolution in 1979 , women have been barred from attending most sports events involving men . But the situation appears set to improve in the coming months after a top Iranian sports official said that the ban will be lifted for some events . A plan to allow `` women and families '' to enter sports stadiums will come into effect in the next year , Deputy Sports Minister Abdolhamid Ahmadi said Saturday , according to state-run media . But it is n't clear exactly which games women will be able to attend . According to the state-run Press TV , Ahmadi said the restrictions would be lifted for indoor sports events . The rules wo n't change for all matches because some sports are mainly related to men and `` families are not interested in attending '' them , Press TV cited him as saying . Iranian authorities imposed the ban on women attending men 's sports events after the revolution , deeming that mixed crowds watching games together was un-Islamic . During the ensuing decades , the crowds at soccer games , Iran 's most popular sport , have been all male . Iranian women were briefly permitted to attend volleyball matches under the moderate President Mohammad Khatami , but the ban was reinstated in 2005 after the more hard-line Mahmoud Ahmadinejad came to power . The Iranian government has come under pressure from international sports officials over the restrictions . FIFA President Sepp Blatter called on Iran last month to end its `` intolerable '' ban on women attending soccer matches , saying the situation `` can not continue . '' Iran had been in the running to host the 2019 edition of soccer 's Asian Cup , but the tournament was awarded to the United Arab Emirates . The ban on women attending matches was widely seen as a major impediment to Iran 's chances of securing the event . The ban came under the spotlight at the Asian Cup in Australia earlier this year , when thousands of female Iranian fans watched their soccer team without restriction . During the match against Iraq , activists called for the ban to end and unfurled a banner showing the face of Ghoncheh Ghavami , a British-Iranian woman detained in Iran last year while trying to watch a volleyball match . Iranian officials have denied that Ghavami was arrested for attending the volleyball game , saying she was taken into custody for `` anti-Iran activities . '' The news agency Reuters reported that she was recently pardoned by the Court of Appeal . CNN 's Annie Ramos contributed to this report . -Washington -LRB- CNN -RRB- Israeli Prime Minister Benjamin Netanyahu criticized the deal six world powers struck to thwart Iran 's nuclear ambitions , saying he sees better options than `` this bad deal or war . '' `` I think there 's a third alternative , and that is standing firm , ratcheting up the pressure until you get a better deal , '' Netanyahu told CNN 's Jim Acosta Sunday on `` State of the Union . '' His comments come as Democrats and Republicans spar over the framework announced last week to lift Western sanctions on Iran in exchange for the country dropping from 19,000 to 5,060 active centrifuges , limiting its highly enriched uranium , and increasing inspections . President Barack Obama endorsed the deal , saying it was better than the alternatives . But GOP contenders for the party 's 2016 presidential nomination lambasted it , saying it gave Iran too much flexibility . On Sunday , the sparring continued . One Senate Democrat said Netanyahu needs to `` contain himself . '' And a top Republican said almost any of Obama 's successors as president `` could do better . '' Netanyahu 's most recent argument against the Iran nuclear deal was similar to the one he 'd made in a March trip to Washington , when he addressed a joint session of Congress -- fueling a Republican push to have the deal sent to Congress before it 's implemented . `` It does not roll back Iran 's nuclear program . It keeps a vast nuclear infrastructure in place . Not a single centrifuge is destroyed . Not a single nuclear facility is shut down , including the underground facilities that they built illicitly . Thousands of centrifuges will keep spinning , enriching uranium , '' Netanyahu said Sunday . `` That 's a very bad deal . '' Netanyahu said Iran is a country of `` congenital cheating '' and that it ca n't be trusted to abide by the terms of the deal , which lasts 10 years with some provisions extending well beyond that . He said his opposition has little to do with his frosty relationship with Obama . `` I think that we can have a legitimate difference of opinion on this , because I think Iran has shown to be completely distrustful , '' Netanyahu said . Democratic Sen. Dianne Feinstein of California , meanwhile , said she wishes Netanyahu `` would contain himself . '' The top-ranking Democrat on the Senate Intelligence Committee said negotiators working on the deal -- from Iran and the United States , as well as Russia , China , Britain , France and Germany -- are `` on the cusp of something that can be workable . '' `` It 's a framework . It has to be wrapped into a final agreement . There still can be some changes , '' Feinstein said . `` But I do n't think it 's helpful for Israel to come out and oppose this one opportunity to change a major dynamic -- which is downhill , a downhill dynamic in this part of the world . '' Energy Secretary Ernest Moniz defended the deal in an appearance on CBS ' `` Face the Nation '' on Sunday , saying it would extend from two months to one year the `` breakout '' time period -- the length of time it would take Iran to build a nuclear bomb . He said it also allows for the `` almost instantaneous recognition of any attempt to evade the deal . '' `` We have blocked all of these pathways to a bomb , '' he said . Sen. Lindsey Graham , R-South Carolina , said on `` Face the Nation '' that the best option for the United States is to keep current sanctions in place for two more years and then have a `` new crack at it with a new president that does n't have the baggage of Obama . '' And he said the alternatives to Obama on both sides -- with the exception of Sen. Rand Paul of Kentucky , who 's called for a less active U.S. role overseas -- would likely strike a better deal . `` Hillary Clinton would do better . I think everybody on our side , except , maybe , Rand Paul , could do better , '' Graham said . --LRB- CNN -RRB- A trip to a former heavyweight champ 's gaudy , abandoned mansion . The tallest and fastest `` giga-coaster '' in the world . A dramatic interview with a famed spiritual leader -- and the tearful reaction by one of his former students . These are some of the best videos of the week : . In the 1980s and '90s -- before he moved to Vegas and started keeping tigers as pets -- former heavyweight boxer Mike Tyson lived in a Southington , Ohio , mansion . The home featured an indoor swimming pool , a marble-and-gold Jacuzzi -LRB- with mirrored ceiling , naturally -RRB- and an entertainment room large enough for small concerts . Tyson sold the house in 1999 ; it 's due to become , of all things , a church . The video can be seen at the top of this story . Not a fan of roller coasters ? You may want to skip the next video -- but for the rest of us , the thrill of watching is the next best thing to being there . The Fury 325 can be found at Carowinds amusement part in Charlotte , North Carolina . Watch the video : . In a CNN exclusive , Alisyn Camerota looked into allegations that Bikram yoga creator Bikram Choudhury sexually assaulted six former students . `` He 's a person who 's based a lot of truths on a lot of lies , '' said Sarah Baughn , who alleges that Choudhury sexually assaulted her . Watch the video : . CNN 's Karl Penhaul spoke to a shepherd who witnessed the final seconds of Germanwings Flight 9525 , which crashed in the French Alps last week . `` I saw the plane heading down along the valley and I said , ` My God , it 's going to hit the mountain , ' '' Jean Varrieras told Penhaul . `` I ducked my head . ... Then after that , I saw the smoke . '' Watch the video : . Magician and comedian Penn Jillette was part of a panel speaking to CNN 's Don Lemon about the controversial Indiana religious freedom law . Jillette , an avowed atheist and libertarian , noted `` we are not talking about forcing people to engage in gay sex , or even endorse gay sex . '' His provocative opening led to an energetic back-and-forth with the Alliance Defending Freedom 's Kristen Waggoner and the ACLU 's Rita Sklar . Watch the video : . A professor of physics at a British university asked 100 people to create a composite with facial features they thought were beautiful -- and then asked another 100 to rate their attractiveness . You 'll never guess what celebrities best fit the model . Watch the video : . --LRB- CNN -RRB- Easter is a cornerstone event in the Christian faith , but it 's surrounded by interesting quirks . It celebrates the completion of Christ 's mission of salvation in the Crucifixion and Resurrection . By dying on Good Friday , Christ atoned for the sins of others ; by rising from the grave on Sunday , Christ conquered death . Simple enough and reason for Christians to celebrate . But , like Christmas with its tree , ornaments and Santa Claus , Easter has picked up its peripheral trappings -- the bunny and colorful eggs . Unlike Christmas , it does n't fall on the same day every year but shifts around in spring depending upon cosmic events . And that blood moon we just had -- is it pure coincidence that it fell around Easter ? -LRB- No . -RRB- . Here 's a journey from the Vatican to the Holy Land , around the moon and the Earth 's tilting axis , to Germany and the United States to try to explain the complex holiday called Easter . And you 'll learn to how to color Easter eggs with Kool-Aid . Let 's start at the Vatican . At the Vatican , Holy Week began with Palm Sunday last week and culminated in Easter Sunday Mass with multiple celebrations in between to mark the final week of Christ 's mortal life . Jesus rode on the back of a donkey into Jerusalem on Palm Sunday where crowds celebrated him as the Messiah and laid down palm branches in his path . But the crowd and the Romans turned on him in the course of the week , according to the Bible , leading to his crucifixion and resurrection . Rain sprinkled down on worshipers standing under a sea of umbrellas as they gathered in a gray St. Peter 's Square on Sunday to partake in the outdoor services held by Pope Francis . Afterward , the Pontiff took a moment to tell the world to do right those in need in his Urbi et Orbi address . Francis lamented the suffering of people in many of the conflicts around the globe . From Nigeria to South Sudan , Iraq to Ukraine , he expressed hope that violence would end . Francis also does n't put on airs . This week he washed the feet of believers , repeating the Biblical account of a woman , a sinner , washing Jesus ' feet and anointing them with oil . Let 's move on to old Jerusalem , the birthplace of Easter . The Church of the Holy Sepulcher in old Jerusalem unifies the spot where Christ was crucified -- Calvary -- with his tomb , or sepulcher . On Sunday , Catholics and Armenian Christians celebrated the Resurrection there . In the morning , the Latin Patriarch , the Archbishop of Jerusalem , entered the basilica . Then mass was held followed by a procession . But a large group of indigenous Christians did n't join them . It 's not quite Easter yet in the Holy Land for Eastern Orthodox Christians . They 'll be celebrating a week from now , because they determine Easter 's date by a different calendar than Western Christians -- the Julian calendar . Which brings us to the question of how astronomy is used to determine the date of Easter Sunday . A blood moon appeared in the sky early Saturday , right between Good Friday and Easter Sunday and during Passover . Just a coincidence ? Not completely , because the dates for both Passover -- the Jewish holiday celebrating the deliverance from slavery in Egypt -- and Easter are determined by moon phases , according to timeanddate.com . Easter 's timing is related to Passover , because Jesus was crucified around then , according to the Bible . Many Jewish holidays , including Passover , fall on full moon , which is also a prerequisite for a lunar eclipse , the event that turns the moon a blood red color . Since the timing of moon phases does n't jibe with Earth 's orbit -- which is how we determine the length of a year now -- Passover 's exact date moves around -- and so does Easter 's . When Christian bishops first convened at the Council of Nicaea in the year 325 , they made a rule to determine the date of Easter , so as to fairly reliably pin it to Passover : . It would fall on the first Sunday after the first full moon following the vernal equinox . That 's the day in March when Earth 's axis reaches a midpoint between winter and summer and the day and night are of equal length . But ... if the full moon fell on Sunday , Easter would be pushed down a week . Confusing ? It got worse . When the West moved from the Julian calendar to the Gregorian calendar , Orthodox Christians stayed put , resulting in -- usually -- two separate dates for Easter . In 1997 , the World Council of Churches pushed for a unified method of determining a date based on astronomical occurrences . It did n't catch on . But some odd Easter trappings that popped up after the Middle Ages very much have -- the eggs and the bunny . The bunny is an egg-laying pagan that worships the moon . That 's one notion of its origins , but probably not the actual one . German immigrants appear to have brought it to North America in the 1700s . German historians are not clear on its beginnings , but the first known mention of the bunny and the eggs in writing was in 1682 . Professor of medicine Georg Franck von Frankenau described in his paper `` De ovis paschalibus , '' or `` On Easter eggs , '' a custom in the Alsace region involving a bunny and eggs , according to German public television . Some also credit the region with inadvertently inventing the Christmas tree . But von Frankenau left out any explanation of how the tradition arose , leading to a number of theories in Germany . One common idea : During Lent , people had to abstain from eating eggs , but hens kept on laying them , so farmers boiled and preserved them . By the time Easter rolled around , they were practically swimming in them . They had to figure out something to do with them when the holiday hit . Play hide and seek with them ; color them ; give them as gifts . Parents may have invented the bunny as a playful explanation for children on where the Easter eggs came from . If you 're coloring eggs this year , here 's an interesting tip . Instead of stinking up your place with the smell of vinegar , use Kool-Aid , YouTube science geek Grant Thompson suggests . And it appears to work . Just use a whole packet in a small glass of hot water and gently lay the eggs in . They turn out as bright as they would in any other food dye . But be careful , it stains everything else , like clothes and upholstery , Thompson warns . That 's why your tongue changes colors when you drink it . Happy Easter ! Happy Passover ! --LRB- CNN -RRB- Police in the Indian city of Malegaon , in the western state of Maharashtra , are requiring identity cards for an unusual group of residents : Cattle . Following a recent state-wide ban on the sale and consumption of beef , authorities in the city have asked residents to take a ` mugshot ' of their cattle and submit it to the police . Along with the photograph , the residents have to give information about their animal 's ` unique features , ' such as the coloring and age of the cow , along with the length of its tail and other distinctive characteristics . Police officials believe this is the only way to solve cow slaughter cases and enforce the law . Cows are considered holy and revered by that state 's majority Hindu population . `` We are creating a database . If we get an information of a cow slaughter , we can quickly go to the resident 's place and check whether it is there or not '' , Mahesh Sawai , Deputy Superintendent of Malegaon Police told CNN . `` I believe this will be very effective '' So far over 100 owners have complied with the police order and more are lining up outside police stations across the city to get their livestock photographed . The ruling came in the wake of a recent case of cow slaughter in Malegaon , where two men have been charged for killing the animal and and selling its meat . The Maharashtra Animal Preservation Bill now includes bans on the killing of bulls and bullocks in its list of non-bailable offenses . Even the consumption or sale of beef could now land you in prison for five years . The slaughter of buffaloes , however , is still permissible . However , beef traders in the country strongly reacted to the decision and called a month-long strike , which ended Wednesday . The traders refused to even slaughter buffaloes and deprive the state of all bovine meat . They have now vowed to file a case in the state 's high court . Red meat lovers were n't too delighted either , arguing the government does n't have a right to interfere in an individual 's personal preference . Maharashtra is not the only Indian state to tighten its laws on cow slaughter . Haryana state has implemented a maximum punishment of 10 years in prison , the toughest penalty in the country . Rajnath Singh , India 's Home Minister has promised that he would do all to devise a country-wide law against cow slaughter . --LRB- CNN -RRB- The FBI charged a Philadelphia woman on Thursday with trying to travel overseas to fight for ISIS . She 's one of three women arrested this week on terror charges . Two New York women were also taken into custody . An FBI complaint cites numerous social media messages dating back to August 2013 that were sent by Keonna Thomas , 30 , also known as `` Young Lioness '' and `` Fatayat Al Khilafah . '' One Twitter message said , `` If we truly knew the realities ... we all would be rushing to join our brothers in the front lines pray ALLAH accept us as shuhada -LSB- martyrs -RSB- . '' Another said , `` When you 're a mujahid -LSB- violent jihadi fighter -RSB- your death becomes a wedding . '' The FBI said Thomas purchased an electronic visa to Turkey on March 23 . Turkey is known as the easiest place from which to enter Syria and join ISIS . An ISIS manual advises recruits to buy round-trip tickets to vacation spots such as Spain and then purchase tickets for their real destination once they arrive overseas , the FBI said . On March 26 , Thomas purchased a ticket to Barcelona , with a March 29 departure and an April 15 return to the United States , the complaint said . It 's not clear when or where she was arrested . She was charged with knowingly attempting to provide material support and resources to a designated foreign terrorist organization . She could be sentenced to 15 years in prison . On Thursday , Noelle Velentzas , 28 , and her former roommate , Asia Siddiqui , 31 , were arrested in New York and accused of planning to build an explosive device for attacks in the United States , federal prosecutors said . In the past 18 months , the Justice Department 's National Security Division has prosecuted or is prosecuting more than 30 cases of people attempting to travel abroad to join or provide support to terrorist groups . Of those cases , 18 allegedly involve support to ISIS . `` The terrorist threat is more decentralized , more diffuse , more complicated , '' Homeland Security Secretary Jeh Johnson told reporters Thursday . `` It involves the potential lone wolf actor , it involves the effective use of social media , the Internet . '' --LRB- CNN -RRB- Just as mimeograph machines and photocopiers were in their day , online activity -- blogs , YouTube channels , even social media platforms like Facebook and Twitter -- have fully emerged as the alternative to traditional mainstream media . It is not just the low cost of posting online that attracts dissidence , though that in itself is liberating . It is the lack of access to traditional print and broadcast media in authoritarian countries that is really the driving force leading disaffected voices to post online . It is not unique to Asia , but it might seem more pronounced if you live there . Going online has become the path of least resistance if you want to make yourself heard . But it still brings resistance , some of it legal , some of it deadly . Let 's look at the legal angle first . Amos Yee , the teenage video blogger who was arrested and held pending bail Sunday in Singapore , drew international attention for his anti-Lee Kuan Yew harangue . But jailing critics is not usually the government 's first choice in Singapore . It is part of Lee Kuan Yew 's legacy that the government 's use of the courts to bring libel and defamation cases , usually carrying heavy financial penalties , is the preferred method of silencing discomfiting online voices . His father has reportedly apologized for his son 's behavior , but the younger Yee could face up to three years in jail . Yee is not unique . Another dissident blogger in Singapore , Roy Ngerng , continues to suffer financial and legal pressure , including the loss of his job , because of a blog post that allegedly accused the city-state 's Prime Minister , Lee Hsien Loong , of corruption . Ngerng 's concern is with the lack of transparency in the management of the Central Provident Fund , the government 's compulsory pension program . Yee and Ngerng are two of many . The Committee To Protect Journalists ' file on Singapore going back to 2000 has a long string of similar cases , some against politicians , others against citizens simply frustrated with their government . But it is not just Singapore where Internet activity comes under fire : On Monday in Malaysia , with much less of the international attention heaped on Amos Yee , five editors and executives from The Malaysian Insider were arrested over the site 's March 25 report claiming that a senior council of royal rulers and state governors , known as the Conference of Rulers , had rejected a proposal to amend federal law to allow for the introduction of hudud , or punishments meted out under Islamic law . In deeply Muslim Malaysia , questions of Islamic faith are a third-rail issue , as is revealing government decisions before they are announced . By far the biggest jailer of journalists in the world is China , where a majority of the 44 people behind bars at the end of 2014 were bloggers , most of them Uighur or Tibetan activists who straddle the line between journalism and activism . But in second place in Asia is Vietnam , where CPJ 's most recent prison census showed Vietnam holding 16 reporters behind bars as of December 1 . Add one more in late December , Nguyen Dinh Ngoc , a prominent blogger who was arrested for `` law-violating '' after police searched his home in southern Ho Chi Minh City on December 27 , and two more in January , Nguyen Quang Lap and Hong Le Tho , arrested on anti-state charges of `` abusing democratic freedoms '' and you can see the pattern . Because the print and broadcast media are so totally government controlled , mainstream journalists seldom go to jail any more in Vietnam . Only two investigative print reporters remain behind bars in Vietnam , their cases dating back to 2012 and 2013 . Both were accused of accepting bribes for dialing back critical news coverage . The list could go on , but the reality is that , as CPJ wrote in 2013 , across Asia `` governments have curtailed Internet freedoms through increasingly restrictive practices , including prohibitive laws , heightened surveillance and censorship , and threats of imprisonment on various national security-related offenses . '' That is still the policy path being followed by most countries in Asia , and it does not look like it will be changing any time soon . Jailing journalists is one thing , but watching them being killed and doing little or nothing about it is another . Since 1992 , 11 % of journalists killed have died for their work online . Because our 1992 start date really precedes the full advent of the Internet , that proportion can be expected to grow . While most bloggers have not been the targets of murderers , Bangladesh has recently become the exception . On Monday , Washiqur Rahman Babu was the second blogger to be hacked to death in public in Bangladesh in the past five weeks . Blogger Avijit Roy and his wife , Rafida Ahmed Bonna , were attacked by assailants wielding sharp weapons while the couple was visiting Dhaka . Roy , a U.S. citizen of Bangladeshi origin , was killed and his wife was critically injured . Both Rahman and Roy had written critically on Islamic matters . The blogger death toll gets higher in Bangladesh if you go back a year or two , and religious beliefs are always involved , and the killings almost always carried out with near perfect impunity . In January 2013 , blogger Asif Mohiuddin , who wrote critical commentary on religion , Islamist groups , free speech , and human rights , barely survived after he was stabbed by Islamists . In February 2013 , blogger Ahmed Rajib Haider , who had written about Islamic fundamentalism and Islamist groups , was hacked to death by members of an Islamist militant group , according to police investigations . Later in 2013 , Islamist groups called for the execution of bloggers they said had committed blasphemy . While arrests were made after those murders , there have been no convictions . The bottom line : Online journalists , operating outside the restraints of mainstream media , have become the most vulnerable targets for governments and independent actors . Where there is the restrictive rule of law , journalists are vulnerable to the anger of officialdom . Where the rule of law is weak , they are vulnerable to the attacks of killers who seldom , if ever , answer to the rule of law . -Atlanta -LRB- CNN -RRB- Robert Lewis Burns Jr. , the original drummer in Southern rock band Lynyrd Skynyrd , died Friday night in a car crash , a Georgia State Patrol spokesman said . Burns , 64 , died after his car hit a mailbox and a tree in Cartersville , spokesman James Tallent said . No other cars were involved in the crash , which occurred shortly before midnight . `` He was not restrained at the time of the crash , '' Tallent told CNN . The musician lived in northern Georgia . Burns was part of the genre-defining band 's original lineup , which formed in Jacksonville , Florida , in 1965 . Lead singer Ronnie Van Zant started Noble Five with Burns , guitarists Gary Rossington and Allen Collins and bassist Larry Junstrom in their hometown . It then made a name change in a reference to a high school gym teacher . Lynyrd Skynyrd changed members over the years as it produced rock anthems including `` Sweet Home Alabama '' and `` Freebird . '' Burns left the band before its third studio album , `` Nuthin Fancy , '' in 1975 , `` exhausted by touring , '' according to the band 's Rock and Roll Hall of Fame biography . He was not involved in the 1977 plane crash that killed three members , including Van Zant . The band was inducted into the Rock and Roll Hall of Fame in 2006 . Lynyrd Skynyrd still tours with Rossington , the only original member still in the band . `` Today I 'm at a loss for words but I just remember Bob being a funny guy , '' Rossington said on the band 's official Facebook page . `` My heart goes out to his family and God bless him and them in this sad time . He was a great great drummer . '' People we 've lost in 2015 . --LRB- CNN -RRB- When singer Avril Lavigne went missing from the music scene , there was tons of speculation . Was she pregnant ? In rehab ? Going through a split from her husband , Nickelback front man Chad Kroeger ? Focus on the mystery intensified in December after a fan Twitter account posted a direct message from Lavigne when she solicited prayers , saying she was `` having some health issues . '' Now the Canadian singer has revealed to People magazine that she was bedridden for five months after contracting Lyme disease . `` I felt like I could n't breathe , I could n't talk , and I could n't move , '' she told the magazine . `` I thought I was dying . '' Lyme disease : What you should know . Lavigne believes that she was bitten by a tick last spring . What followed was months of lightheadedness and lethargy that doctors were initially unable to diagnose . The 30-year-old performer said she recuperated in her Ontario home , where her husband would use tour breaks to care for her and her mother moved in to assist . `` There were definitely times I could n't shower for a full week because I could barely stand , '' she told People . `` It felt like having all your life sucked out of you . '' Opinion : Why you should be afraid of Lyme disease . After her direct message about her health went viral , Lavigne was inundated with concern from fans . `` The get-well messages and videos they sent touched me so deeply , '' she said . Now declaring herself `` 80 percent better , '' Lavigne is releasing a new single this month to support the 2015 Special Olympics and says that being ill was a `` wake-up call '' that has given her a new perspective . `` I really just want to enjoy life from here on out , '' she said . -Atlanta -LRB- CNN -RRB- It was a scene worthy of any top cop show on TV -- bullets flying , banged-up cars and the FBI chasing an armed robbery suspect . In the end , two agents were injured in a crash and the suspect was shot before being captured . FBI agents and task force officers were following 36-year-old Kevone Charleston of Austell , Georgia , as he pulled into a CVS pharmacy in Forsyth County , Georgia , early Saturday . Charleston is suspected of involvement in 32 commercial robberies dating to November 2013 , according to FBI officials . `` The incident all happened around 7 o'clock Saturday morning , '' said FBI Special Agent Stephen Emmett . `` There were multiple agents and officers that were following him based on his prior MO , and when they saw he was about to rob another CVS , they moved in . '' Authorities say Charleston parked his vehicle nearby and then popped the hood as if there were something wrong . Then he walked to the CVS , preparing to enter . When agents confronted him , Charleston ran , got in his car and traveled about 75 yards as agents opened fire . `` There were several FBI vehicles that were rammed or were hit by the suspect 's vehicle when he was trying to flee . One government vehicle sustained heavy damage to its front and side , and another government SUV ended up on its side . That 's how the two agents sustained their injuries , '' Emmett said . Twelve FBI agents and six government vehicles followed Charleston . Emmett said Charleston `` was trying to get away , our agents were trying to stop him . He collided with the first government vehicle , the Taurus , then the second , and the SUV ended on its side . `` The perp was stopped 8 feet away in the median , and that 's where he received his gunshot wounds . '' The two agents were treated at an area hospital and released , according to Emmett , who says `` they are fine . '' Charleston was shot and wounded by FBI agents and task force officers , but his injuries are not life threatening , according to Forsyth County Sheriff 's Deputy Robin Regan . Although he declined to give details of the 32 previous robberies , Emmett said it was an intensive investigation that was already underway as a priority for the FBI 's violent crimes and major offender squad . He added , `` His MO involved armed confrontations , so our officers went into this fully prepared for an armed confrontation based on his past history . '' Emmett says he 's relieved that the FBI 's officers and agents are OK and that the suspect is in custody . He said it was the `` conclusion of an intensive and lengthy investigation . '' CNN 's Vivian Kuo and Ryan Scallan contributed to this report . --LRB- CNN -RRB- After years of making the case that the education of athletes is paramount , the NCAA now says it has no legal responsibility to make sure education is actually delivered . On its website , the NCAA prominently states , `` It 's our commitment -- and our responsibility -- to give young people opportunities to learn , play and succeed . '' And later , it says that `` in the collegiate model of sports , the young men and women competing on the field or court are students first , athletes second . '' But the NCAA is taking a very different position in response to a lawsuit filed by former University of North Carolina athletes . The lawsuit claimed the students did n't get an education because they were caught up in the largest known academic fraud scandal in NCAA history . In its response , the NCAA says it has no legal responsibility `` to ensure the academic integrity of the courses offered to student-athletes at its member institutions . '' Even with pages of online information about academic standards , and even though the NCAA has established a system of academic eligibility and accountability that it boasts of regularly , NCAA attorneys wrote in this court filing that `` the NCAA did not assume a duty to ensure the quality of the education of student-athletes , '' and `` the NCAA does not have ` direct , day-to-day , operational control ' '' over member institutions like UNC . `` It 's nonsense . It 's double talk , '' said Gerald Gurney , a former athletic-academic director who is now president of The Drake Group for academic integrity in collegiate sport . `` If you look at their basic core principles , it 's all about academics , the experience , the integration of academics , and the education of the student is paramount , '' Gurney said . `` They seem to talk out of both sides of their mouths . '' The NCAA referred calls for comment to an online statement , which read in part : . The NCAA believes that the lawsuit misunderstands the NCAA 's role with respect to its member schools and ignores the myriad steps the NCAA has taken to assist student-athletes in being equipped to excel both in the classroom and on the playing field . `` This case is troubling for a number of reasons , not the least of which is that the law does not and has never required the NCAA to ensure that every student-athlete is actually taking full advantage of the academic and athletic opportunities provided to them , '' said Donald Remy , NCAA chief legal officer . In its response to the lawsuit , it also likened its role to that of the American Bar Association or American Medical Association , and said that those entities are not sued every time a lawyer or doctor acts inappropriately . The scandal at UNC involved thousands of athletes who , over 18 years , were funneled into classes that never met , where advisers fudged grades and accepted plagiarism so that athletes who were falling behind in class could remain eligible to play sports . Mary Willingham , the UNC whistleblower turned NCAA critic , has for years said that athletes across the country are accepted to colleges even though they 're academically underprepared and then pushed into classes where little work is required . The system of eligibility that the NCAA brags about , she says , is a sham . `` Why do we go through the trouble of compliance if we ca n't legitimize that the courses are real and the education is real anyway ? It makes no sense , '' said Willingham , who recently wrote a book about the UNC scandal called `` Cheated . '' `` If they ca n't legitimize that the academics are real and take no responsibility for that , then why certify students semester after semester to play ? It 's lost its meaning for me . '' The NCAA 's claim that it 's hands-off when it comes to athletics seems to be a direct contradiction of what the organization has been repeating for years , not just in the rhetoric on its website , but in speeches by its president , Mark Emmert , and in court defending itself from numerous lawsuits over paying athletes . For example , before it lost a case filed by former UCLA player Ed O'Bannon , suing for the right of athletes to make money off their images and likenesses , the NCAA stood on the pillar of amateurism , insisting that college athletes are paid with an education . That 's the defense the NCAA is now using in another class action filed by big-time sports attorney Jeffrey Kessler , seeking to make college sports a free market where athletes are paid salaries based on their value . In response , the NCAA said that what sets college sports apart from pros is education : Consistent with `` its commitment to amateurism , member institutions conduct their athletics programs for students who choose to participate in intercollegiate athletics as a part of their educational experience and in accordance with NCAA bylaws . '' Attorney Michael Hausfeld , who represented both O'Bannon and now the UNC athletes , said this : . `` This startling inconsistency is unfortunately all too symptomatic of the NCAA 's shifting rhetoric and faltering commitment to its college athletes . NCAA President Mark Emmert has repeatedly proposed that ` What we live for is the education of our athletes , ' but the NCAA 's record tells a far different story . '' But Rick Burton , professor of sport management at Syracuse University , said it 's not realistic to think that the NCAA would regulate every professor and every course an athlete might take at each university across the country . `` I understand , I think , where the NCAA is coming from . We would not let the NCAA come in and tell us how to run our chemistry department at Syracuse University , '' he said . `` It sounds like someone is trying to say the NCAA should have been supervising that department at the University of North Carolina , and there 's no logic to that , '' he said . `` The people who are saying the NCAA should be held accountable for academics at every school are just looking for an opportunity to throw rocks at the NCAA . '' UNC , which was also sued , has admitted to the fraud , but also asked for a judge to throw out the case , saying the athletes waited too long -- seven years -- to sue and the `` educational malpractice '' theory does n't apply . UNC claims it is protected by state law . This is reminiscent of another NCAA reversal . The NCAA , which was founded a century ago to protect athletes from `` dangerous and exploitive athletic practices , '' now says it does not enforce health and safety rules . In fact , in response to a lawsuit filed by the family of a player who died in 2011 , the NCAA wrote : `` The NCAA denies that it has a legal duty to protect student-athletes . '' A CNN investigation found that the NCAA has failed to open investigations in several cases where safety rules allegedly were broken . It has also fallen behind in imposing rules for concussions -- far behind even the NFL . Ramogi Huma , president of the National College Players Association , and a leading thorn in the NCAA 's side for decades , said this latest backpedaling from the NCAA leaves him wondering why the organization exists at all . `` There 's nothing left the NCAA can claim it does that is beneficial to college athletes or society . One has to wonder what does the NCAA do if it does n't protect players ? If it does n't play a role in the education of college athletics ? It begs the question of why does the NCAA exist -- and why does it have a tax exemption . '' --LRB- CNN -RRB- The world 's biggest and most powerful physics experiment is taking place as you read this . The Large Hadron Collider -LRB- LHC -RRB- , a particle accelerator and the largest machine in the world , is ready for action following a two-year shutdown . After problems that delayed the restart in March , scientists at the European Organization for Nuclear Research -LRB- CERN -RRB- completed final tests , enabling the first beams to start circulating Sunday inside the LHC 's 17 mile -LRB- 27 km -RRB- ring . `` Operating accelerators for the benefit of the physics community is what CERN 's here for , '' CERN Director-General Rolf Heuer said on the organization 's website . `` Today , CERN 's heart beats once more to the rhythm of the LHC . '' The LHC generates up to 600 million particles per second , with a beam circulating for 10 hours , traveling more than 6 billion miles -LRB- more than 10 billion kilometers -RRB- -- the distance from Earth to Neptune and back again . At near light-speed , a proton in the LHC makes 11,245 circuits per second . It took thousands of scientists , engineers and technicians decades to devise and build the particle accelerator , housed in a tunnel between Lake Geneva and the Jura mountain range . The purpose of the lengthy project is to recreate the conditions that existed moments after the `` Big Bang '' -- the scientific theory said to explain the creation of the universe . By replicating the energy density and temperature , scientists hope to uncover how the universe evolved . Our current , limited , knowledge is based on what 's called The Standard Model of particle physics . `` But we know that this model is not complete , '' Dr. Mike Lamont , operations group leader at the LHC , told CNN in March . The burning questions that remain include the origin of mass and why some particles are very heavy , while others have no mass at all ; a unified description of all the fundamental forces such as gravity ; and uncovering dark matter and dark energy , since visible matter accounts for only 4 percent of the universe . The LHC could also question the idea that the universe is only made of matter , despite the theory that antimatter must have been produced in the same amounts at the time of the Big Bang . CERN says the energies achievable by the LHC have only ever been found in nature . The machine alone costs approximately three billion euros -LRB- about $ 3.3 billion -RRB- , paid for by member countries of CERN and contributions by non-member nations . The organization also asserts that its guidelines for the protection of the environment and personnel comply with standards set by Swiss and French laws and a European Council Directive . Scientists and physics enthusiasts will be waiting with bated breath as the LHC ventures into the great unknown . `` After two years of effort , the LHC is in great shape , '' said CERN Director for Accelerators and Technology , Frédérick Bordry . `` But the most important step is still to come when we increase the energy of the beams to new record levels . '' Peter Shadbolt contributed to this report . --LRB- CNN -RRB- Residents of central Sanaa , the Yemeni capital , have learned the hard way that key strategic bombing targets are located in their neighborhoods : Detonating ordnance has been shattering their windows and doors . And fighting has killed hundreds of people in less than two weeks . The Saudi-led coalition smashed parts of Yemen 's Defense Ministry Central Command in the capital over the weekend , senior Yemeni officials said . Under the rain of coalition bombs , the Houthis , who are Shiites in a majority Sunni country , still control Sanaa . But the airstrikes have hurt them and destroyed a lot of infrastructure . The electricity has gone out on 16 million Yemenis living in Houthi-held areas , the Yemeni officials said . Many fear they will lose access to clean water as well . Yemen 's deposed President Abdu Rabu Mansour Hadi heaped scorn on top of the airstrikes . He fired his former Army chief of staff , Hussein Khairan , on Sunday . The firing had no practical effect , since Khairan had switched sides weeks ago and is the Houthi rebels ' acting defense minister . Hadi is holed up in Saudi Arabia , which is working to defeat his enemies and reinstall him . Fighting has ended dozens of lives each day . On Monday , more than 50 people died in the port city of Aden alone , where Houthis and their allies are battling troops loyal to Hadi on the ground , Agence France-Press reported . Since the bombing campaign and intense fighting began just over a week ago , some 600 people are estimated to have been killed . Many more have been wounded , and tens of thousands have fled the country . The International Committee of the Red Cross has cried out for a humanitarian ceasefire to let aid in . `` Otherwise , put starkly , many more people will die . For the wounded , their chances of survival depend on action within hours , not days , '' said Robert Mardini , the ICRC 's head of operations in the Near and Middle East . `` Medical supplies need to be here yesterday , '' said ICRC spokeswoman Marie-Claire Feghali from Sanaa . `` We need to save the lives that can be saved . '' Saudi Arabia signed off on letting the ICRC into Yemen via two aircraft -- one with medical supplies , the other with workers . But flying in will be hard , since most airlines have canceled their flights , and airstrikes have taken out many airfields . On Monday , the flight loaded with 48 tons of medical supplies was grounded in Djibouti , Feghali said . The ICRC is hoping to fly out in a day or two . Following the ICRC 's call , on Saturday the U.N. Security Council discussed the humanitarian situation at Russia 's behest . Moscow submitted a draft resolution calling for a halt to the airstrikes by the nine-country regional coalition . The meeting adjourned with no decision announced . One diplomat said the draft was missing key elements . It did n't call for the Houthis to stop fighting or for political talks between the belligerents , the diplomat told CNN on condition of anonymity . Yemen has been descending into chaos in the weeks since Houthi rebels -- who have long complained of being marginalized in the majority Sunni country -- forced Hadi from power . The Houthis put Hadi under house arrest when they overtook Sanaa in January . But Hadi escaped in February , fled to Aden and declared himself to still be president . Houthis and their allies , including those loyal to Hadi 's predecessor , then fought Hadi 's forces in the Aden area . Hadi fled Aden in late March , ultimately for Saudi Arabia , when the rebels and their military allies advanced on the city . The conflict prompted Saudi Arabia , a predominately Sunni nation and Yemen 's northern neighbor , and other Arab nations to intervene with force . The Houthis are allied with Iran , Saudi Arabia 's bitter rival across the Persian Gulf , and Riyadh does not want an proxy of Iran in power on its border . Complicating matters in Yemen is the fact that al Qaeda in the Arabian Peninsula -- not the Houthis or the forces loyal to Hadi -- holds sway in the country 's east . AQAP is considered one of the most ruthless branches of the terrorist organization . It has taken advantage of the chaos to overrun one city and break prisoners out of jail . Hadi 's government had cooperated with the United States to fight AQAP , but with the Houthi takeover , that arrangement has evaporated , and the terror group operates generally unchecked . --LRB- CNN -RRB- The United States has seemingly erupted this week about what it means to live your religion , especially in Indiana , where its new Religious Freedom Restoration Act faces a firestorm from critics who say it uses faith as a pretext to discriminate against gay people . Such state laws have been growing ever since the U.S. Religious Freedom Restoration Act became law in 1993 , designed to prohibit the federal government from `` substantially burdening '' a person 's exercise of religion . So far , 20 states have some version of the religious liberty law , and the legal controversies have grown , too . Nonetheless , claims under those state RFRAs are `` exceedingly rare , '' and victories involved mostly religious minorities , not Christian denominations , experts say . `` There is reason to doubt whether these state-level religious liberty provisions truly provide meaningful protections for religious believers , '' wrote Wayne State University law professor Christopher Lund in a 2010 analysis , when there were only 16 states with such laws . Here are some of the more interesting cases arising from the federal and state laws , touching upon an array of religious matters from a knife carried by an IRS accountant to a tea from the Amazon : . He was a Native American with eagle feathers at a religious gathering of tribes . But not in the eyes of the feds . In 2006 , Robert Soto and Michael Russell attended an American Indian powwow while in possession of eagle feathers , in violation of the federal Eagle Protection Act , which outlaws the killing of bald and golden eagles and even picking their feathers off the ground . Soto , a Lipan Apache , asserted he was participating in an Indian religious ceremony . The feathers are sacred to Native Americans . But a federal Fish and Wildlife Service agent found his tribe was n't federally recognized , and Soto surrendered his feathers . Russell , who is married to Soto 's sister , is n't American Indian and agreed to pay a fine , according to court papers and the America Bar Association Journal . Soto , however , petitioned the federal Interior Department to return his feathers . The feds said no , because he was n't from a recognized tribe . Soto and Russell sued the federal government , but a federal district court ruled in favor of the government , rejecting the two men 's First Amendment assertions and their claims under the federal Religious Freedom Restoration Act , the same 1993 statute that Indiana legislators used in developing their new state law . But last August , the 5th U.S. Circuit Court of Appeals reversed the trial court 's decision and sent the case back to that court after finding the government 's action would violate the federal RFRA . On March 10 , the federal government returned the eagle feathers to Soto . But the legal war is n't over . The federal government still maintains it can criminally prosecute Soto and his congregants , so Soto is seeking a preliminary injunction , claiming the feds are violating the federal RFRA , said Luke Goodrich , Soto 's attorney who 's with the Becket Fund for Religious Liberty . A tea used by a Brazilian faith is to them like wine used by Catholics at communion , but U.S. agents considered the brew an illegal drug . The religious organization O Centro Espirita Beneficiente Uniao do Vegetal uses a sacramental tea called hoasca , made from two plants native to the Amazon that contains dimethyltryptamine , a hallucinogen , in violation of the Controlled Substances Act . The religion is a Christian spiritist faith that originated in Brazil and includes Amazonian and indigenous spiritual traditions . About 140 members of the church live in the United States and use the tea in a sacred communion . In May 1999 , U.S. Customs agents entered the church headquarters in Santa Fe , New Mexico , and seized all of its hoasca . The church became alarmed and cited how the federal government allows an exception for American Indians to use another illegal drug , peyote , in their religious ceremonies . In fact , the federal RFRA was designed partly to protect the Native Americans ' use of peyote , said CNN legal analyst Jeffrey Toobin . `` They were a legitimate religion , and this was a legitimate ritual of the religion , and Congress wanted to make sure it was protected , '' Toobin said of peyote and the 1993 law . The Uniao do Vegetal , which means `` the union of the plants , '' cited that federal law in suing the federal government . `` The government has never explained why it has accommodated The Native American Church 's use of peyote -LRB- which contains mescaline , also a controlled substance -RRB- but can not accommodate the UDV 's use of hoasca , '' the church said in a statement . The U.S. Supreme Court ruled in the church 's favor , saying the federal government failed to show a compelling interest to ban the substance for religious use . `` The peyote exception also fatally undermines the government 's broader contention that the Controlled Substances Act establishes a closed regulatory system that admits of no exceptions under RFRA , '' the court ruling said . Bruce Rich , an Orthodox Jewish prisoner in Florida , wanted kosher meals , but the warden said no . So Rich sued the state prison system in 2010 , saying its denial of a kosher menu violated the Religious Land Use and Institutionalized Persons Act of 2000 , a landmark civil law rights law for inmates whose predecessor was the federal religious freedom law . Rich , 66 , is serving a life sentence for murdering his parents , in their 70s , in 1995 allegedly to inherit their home . The prison system argued the meals were costly and would lead to security concerns , namely `` retaliation against the kosher inmates '' if other inmates believed the higher costs of kosher meals impacted the quality of their food , court papers said . At least 35 other states and the federal government , however , provided kosher diets to inmates . After losing before a magistrate , Rich won an appeal before the 11th Circuit Court , which cited `` the defendant 's meager efforts to explain why Florida 's prisons are so different from the penal institutions that now provide kosher meals such that the plans adopted by those other institutions would not work in Florida . '' Recently baptized in the Sikh faith , Kawal Tagore went to her job with the IRS in Houston in 2005 carrying a new religious item : a 9-inch kirpan , a small ceremonial sword that resembles a knife but has an edge that is blunted or curved . Tagore needed to carry the kirpan at all times as a mandatory article of faith . But the federal government banned her from the building , citing the kirpan as a `` dangerous weapon '' with a more than 3-inch blade , and she was later fired from her accounting job because she refused to keep the kirpan out of the workplace . Tagore sued the government under the federal law . Tagore cited how the government allowed the public to enter the federal building with more threatening objects : real 2.5-inch blade knives and metal canes , said her attorneys with the Newar Law Firm and the Becket Fund . Also , federal employees inside the building were allowed to use box cutters and cake knives . In November , the federal government agreed to settle the case shortly after the start of Tagore 's trial . The settlement included no admission of wrongdoing , the Christian Science Monitor reported . Tagore 's attorneys described the settlement as `` a groundbreaking policy allowing Sikhs and other religious minorities to wear religious symbols and attire in federal buildings , '' they said in a statement . Invoking a religious freedom law and related statutes does n't always equate to victory . In Chicago , an association of 40 churches called the Civil Liberties for Urban Believers found it too onerous to erect houses of worship in business and commercial zones . The ministers needed a special use permit , but such permits were often thwarted by aldermen or it was too bureaucratic and costly to obtain one , the church leaders claimed . In fact , it was easier to get a club , lodge or community center approved . So the pastors sued the city of Chicago in 2000 , alleging that its zoning laws violated the Illinois religious freedom statute , the federal Religious Land Use and Institutionalized Persons Act and the U.S. Constitution . But in 2003 , the 7th Circuit Court of Appeals upheld a lower court decision and rejected the church group 's claims , finding no substantial burden on the churches , which also failed to establish their RLUIPA claim . Defeated , church leaders were angry . `` The forty -LRB- 40 -RRB- churches in C.L.U.B. and certainly people of all faiths throughout Chicago are outraged by the majority opinion which neuters the Religious Land Use and Institutionalized Persons Act passed unanimously by Congress in 2000 , '' Apostle Theodore Wilkinson , the group 's chairman , said in a statement . `` Also alarming is the court 's conclusion that Chicago 's religious assemblies have no free speech protection from zoning laws . The majority opinion would apparently extend free speech protection to religious assemblies only if they allowed live nude dancing , '' he said . At the same time , the city of Chicago revised its zoning ordinance to avoid `` the threat of heightened scrutiny under RLUIPA , '' according to a League of California Cities report in 2002 . CNN 's Alexandra Meeks contributed to this report . --LRB- CNN -RRB- The terrorist group Al-Shabaab has claimed an attack on Garissa University College in eastern Kenya , in which many people have been killed and still more taken hostage . The attack is another step in the ongoing escalation of the terrorist group 's activities , and a clear indicator that the security situation in East Africa is deteriorating fast . Somalia-based Al-Shabaab has been behind a string of recent attacks in Kenya , the most well-known of them being the massacre at the Westgate Shopping Centre in Nairobi in 2013 . Cross-border raids into Kenya by the group , however , date back to 2011 . Al-Shabaab incursions triggered a military response by the government in Nairobi , which sent troops to Somalia as part of an African Union mission in support of Somalia 's internationally recognized government that had been under pressure from Al-Shabaab and other militants for several years . Al-Shabaab is predominantly driven by the same radical interpretation of the Koran as al-Qaeda and ISIS -LRB- also known as Islamic State -RRB- , but also employs more opportunistic approaches to shoring up local support . Its origins lie in Al-Ittihad al-Islami -LRB- Unity of Islam -RRB- , one of several militant factions that emerged in the wake of the fall of Siad Barre in 1991 . These disparate groups fought each other and a U.N. peacekeeping mission in the Somali civil war that led to the complete collapse of the country , from which it has yet to recover almost quarter of a century later . Al-Shabaab -LRB- literally `` the Youth '' -RRB- split from Unity of Islam in 2003 and merged with another radical Islamist group , the so-called Islamic Courts Union . As their alliance obtained control of Somalia 's capital Mogadishu in 2006 , Ethiopia , the only majority Christian country in the region , took military action against the group . The offensive weakened Al-Shabaab and pushed it back into the rural areas of central and southern Somalia , but it failed to defeat it . To the contrary , Ethiopia 's invasion and occupation of parts of Somalia -- although invited by the Somali government and backed by the African Union -- enabled Al-Shabaab to partially re-invent itself as both an Islamist and nationalist force opposing a foreign `` Christian '' invasion . Initially , the group primarily attacked Ethiopian forces , but soon began to `` expand '' its activities against the Somali government as well . The first attack outside Somalia was an attack in the Ugandan capital of Kampala in 2010 . Soon after this , cross-border raids in Kenya began , predominantly targeting Christians there . Increasing its links with al-Qaeda , Al-Shabaab declared its full allegiance in 2012 -- and it is not clear whether it will switch allegiances to ISIS . Much will depend on how the relationships between al-Qaeda in the Arabian Peninsula -LRB- AQAP -RRB- , a long-time ally of Al-Shabaab based in Yemen , and ISIS develop . The key point is that Al-Shabaab 's attack in Garissa is part of a broader regional context of instability fueled by a huge number of factors . It must not be interpreted simply as another act of garden-variety fundamentalist terrorism . Clearly , the presence and activities of terrorist groups in the region is a major concern , and it is undoubtedly driven by radical and exclusivist interpretations of Islam . But the entire region also suffers from a range of other problems : from economic development challenges to environmental degradation ; from organized crime to inter-tribal and inter-communal violence ; from corruption to serious deficits in human rights and good governance . These entrenched inequalities help Al-Shabaab appeal to a wide variety of potential recruits , who may sympathize with and actively support the group for any number of reasons . Attacking a university in northern Kenya and separating Christian from Muslim students epitomizes the way Al-Shabaab advances itself by exploiting religious , tribal and nationalist identities . Ultimately , though , this all comes down to a struggle for control -- over people , over territory , and over resources . As long as the majority of people in the region remain excluded from any meaningful political , economic , and social participation in their societies -- which are dominated by primarily self-interested elites that put their own advance before that of their communities -- human lives matter little in the pursuit of selfish interests . It is important to counter Al-Shabaab directly , including by military means . But there wo n't be any lasting solution to the wider region 's security problems without a more comprehensive and concerted effort to address the deeper problems of exclusion suffered by the citizens of the countries challenged by Al-Shabaab . As Garissa shows , these problems are still providing oxygen for nihilistic ideologies and their deadly fruit . Copyright 2015 The Conversation . Some rights reserved . --LRB- CNN -RRB- A Connecticut teen who has been forced to have chemotherapy to treat Hodgkin lymphoma will remain in temporary custody of the state for the time being , according to her attorney , Josh Michtom . A Connecticut juvenile court judge issued a written decision Wednesday denying a motion to let the teen , identified in court documents as `` Cassandra C. , '' go home . The judge also denied a motion for visitation . The 17-year-old is in remission after nearly six months of forced chemo treatments . On March 16 , Michtom tried to convince the court that she should be able to return to her mother 's home because she was no longer at imminent risk of harm from her illness . Michtom and attorney Michael Taylor , who represents Cassandra 's mother , Jackie Fortin , released a written statement after receiving the judge 's decision Wednesday : `` We are disappointed in this ruling , not least of all because it draws a factual conclusion that is directly contradicted by the weight of the evidence . We 're conferring with our clients now about next steps , including whether to take another appeal . '' Cassandra was diagnosed with Hodgkin lymphoma in September and medical experts gave her an 85 % chance of survival if treated with chemotherapy . Without it , doctors said at the time , she was likely to die within two years . She started chemotherapy in November but ran away after two days , according to court documents , when she decided she did not want to put the poison of the treatment into her body . In December , a judge ordered the young woman to be under the custody of the Connecticut Department of Children and Families . At that time , she was admitted to Connecticut Children 's Medical Center in Hartford and has remained there since then . Doctors surgically implanted a port in Cassandra 's chest to administer chemotherapy medications , which began in spite of legal maneuvers to halt them . Cassandra is feeling well and is in good shape as far as her health is concerned , according to Michtom . `` She 's seen in her case the side effects were n't bad , and she 's been well-treated by the nurses and doctors and does want to complete the treatment , '' he said . Her treatment is scheduled to wrap up this month . Michtom and Taylor failed in their effort before the Connecticut Supreme Court to make the case that Cassandra was mature enough to make her own medical decisions . Joette Katz , the commissioner of the Department of Children and Families , told CNN in March the agency is `` very pleased with Cassandra 's progress toward a complete recovery . We understand how difficult this has been for Cassandra and her family , but we have had full confidence throughout that the medical professionals involved in her treatment would be successful in saving her life . '' The agency has denied CNN 's request to speak with Cassandra or her physicians . According to Michtom , the Department of Children and Families could have withdrawn its position for an order of custody but has n't . He said the department sees Cassandra as a flight risk because she has run away before . Representatives for the department have said in court and in conversations with Michtom and Taylor that they will withdraw their pending neglect petition once Cassandra completes her last round of chemo -- expected around the end of April -- and that she 'll be allowed to return home . So for now , Cassandra is said to spend her days reading , watching TV and drawing . `` The hospital is effectively jail , '' Michtom said . --LRB- CNN -RRB- Mark Ronson 's `` Uptown Funk ! , '' featuring Bruno Mars , is the longest-leading Billboard Hot 100 of the 2010s , ruling the chart for a 13th week . It 's also just the 10th single in the Hot 100 's entire history to spend at least 13 weeks at No. 1 . Plus , newcomer Natalie La Rose reaches the top 10 with her debut hit `` Somebody , '' featuring Jeremih . As we do each Wednesday , let 's run down all the songs in the top 10 , and a bit beyond , on the sales/airplay/streaming-based Hot 100 -LRB- dated April 11 -RRB- . `` Funk , '' released on RCA Records , passes Robin Thicke 's `` Blurred Lines , '' featuring T.I. and Pharrell to take sole possession of the Hot 100 's longest command this decade . Here 's an updated look at the hits to lead for the most weeks since the beginning of 2010 : . Weeks at No. 1 , Title , Artist , Date Reached No. 1 . 13 -LRB- to date -RRB- , `` Uptown Funk ! , '' Ronson feat . Mars , Jan. 17 , 2015 . 12 , `` Blurred Lines , '' Robin Thicke feat . T.I. + Pharrell , June 22 , 2013 . 10 , `` Happy , '' Pharrell Williams , March 8 , 2014 . 10 , `` We Found Love , '' Rihanna feat . Calvin Harris , Nov. 12 , 2011 . `` Funk '' also becomes one of an elite 10 singles ever to top the Hot 100 for at least 13 weeks , dating to the chart 's Aug. 4 , 1958 launch : . Weeks at No. 1 , Title , Artist , Date Reached No. 1 . 16 , `` One Sweet Day , '' Mariah Carey & Boyz II Men , Dec. 2 , 1995 . 14 , `` I Got ta Feeling , '' The Black Eyed Peas , July 11 , 2009 . 14 , `` We Belong Together , '' Mariah Carey , June 4 , 2005 . 14 , `` Candle in the Wind 1997 '' / `` Something About the Way You Look Tonight , '' Elton John , Oct. 11 , 1997 . 14 , `` Macarena -LRB- Bayside Boys Mix -RRB- , '' Los Del Rio , Aug. 3 , 1996 . 14 , `` I 'll Make Love to You , '' Boyz II Men , Aug. 27 , 1994 . 14 , `` I Will Always Love You , '' Whitney Houston , Nov. 28 , 1992 . 13 -LRB- to date -RRB- , `` Uptown Funk ! , '' Ronson feat . Mars , Jan. 17 , 2015 . 13 , `` The Boy Is Mine , '' Brandy & Monica , June 6 , 1998 . 13 , `` End of the Road , '' Boyz II Men , Aug. 15 , 1992 . Ask Billboard : Will ` Uptown Funk ! ' be the Hot 100 's No. 1 Song of 2015 ? With `` Funk '' now just three weeks from potentially tying `` One Sweet Day '' for the record , and four weeks from possibly claiming it all to itself , can it rewrite Hot 100 history ? It 's too early to forecast charts a month away , but `` Funk '' still sports strong leads in all main Hot 100 metrics . `` Funk '' logs a 13th week atop the Digital Songs chart with 165,000 downloads sold -LRB- down 12 percent -RRB- in the week ending March 29 , according to Nielsen Music . That 's a record-tying feat : `` Funk ! '' matches Flo Rida 's 2007-08 hit `` Low , '' featuring T-Pain , for the most weeks a title has spent at No. 1 on Digital Songs . `` Funk '' also leads Streaming Songs -LRB- 16.2 million U.S. streams , down 15 percent -RRB- for an 11th week . On Radio Songs , `` Funk '' reigns for a 10th week with 166 million in all-format audience -LRB- down 4 percent -RRB- . It 's the first song to reach double-digit weeks at No. 1 on Radio Songs since `` Blurred Lines '' led for 11 . Ask Billboard : Will ` Uptown Funk ! ' Be the Hot 100 's No. 1 Song of 2015 ? `` Funk , '' thus , leads the Hot 100 and its three main component charts -LRB- Digital Songs , Radio Songs and Streaming Songs -RRB- simultaneously for a record-extending ninth week -LRB- nonconsecutively -RRB- . Perhaps helping the chances that `` Funk '' can remain at No. 1 on the Hot 100 , at least for another week : while it 's down by 11 percent in overall activity , the No. 2 song -LRB- for a third week -RRB- , Maroon 5 's `` Sugar , '' decreases by 3 percent , while Ed Sheeran 's `` Thinking Out Loud , '' at No. 3 -LRB- for a third week , after peaking at No. 2 for eight weeks -RRB- , is off by 2 percent . And , the lead of `` Funk '' over those songs is still significant : they each boast approximately two-thirds of the Hot 100 points of `` Funk '' this week . Could either `` Sugar '' or `` Loud '' rebound to challenge `` Funk '' further on the Hot 100 ? Could another song in the top 10 topple it ? Or , is it a song just building , or not even yet released , that will take over ? Again , it 's too soon to tell . We know only that a song will eventually dethrone the uncommonly overarching smash that `` Funk '' has become . -LRB- At least we think one will ... -RRB- . Chart Highlights : Taylor Swift 's ` Style ' hits No. 1 on adult pop songs . Meanwhile , `` Sugar '' takes over at No. 1 on the subscription services-based On-Demand Songs chart , despite a 10 percent drop to 4.1 million streams . -LRB- `` Funk '' falls to No. 3 on the list after 11 weeks at No. 1 . -RRB- `` Sugar '' holds at No. 2 on Digital Songs -LRB- 143,000 , down 8 percent -RRB- ; rises 4-2 on Radio Songs -LRB- 133 million , up 3 percent -RRB- ; and keeps at No. 4 on Streaming Songs -LRB- 9.5 million , down 4 percent -RRB- . Below Sheeran , Ellie Goulding 's `` Love Me Like You Do '' holds at No. 4 on the Hot 100 after reaching No. 3 . The Fifty Shades of Grey soundtrack single dips 3-4 on Digital Songs -LRB- 114,000 , down 14 percent -RRB- and stays at No. 5 on Radio Songs -LRB- 118 million , up 8 percent -RRB- and Streaming Songs -LRB- 9 million , up 9 percent -RRB- . From the same hit movie , The Weeknd 's `` Earned It -LRB- Fifty Shades of Grey -RRB- '' reaches the Hot 100 's top five -LRB- 6-5 -RRB- , adding top Airplay Gainer honors for a second week . On Radio Songs , it pushes 9-6 with a 23 percent gain to 86 million . `` Earned '' -LRB- a possible contender for No. 1 on the Hot 100 ... -RRB- holds at No. 6 on both Streaming Songs -LRB- 8.9 million , up 24 percent -RRB- and Digital Songs -LRB- 107,000 , up 4 percent -RRB- . The sultry track also takes over at No. 1 on Billboard 's Hot R&B / Hip-Hop Songs chart . Chart Highlights : Taylor Swift 's ` Style ' Hits No. 1 on Adult Pop Songs . Fetty Wap 's `` Trap Queen '' rises 8-6 on the Hot 100 , while spending a second week at No. 1 on Hot Rap Songs ; Taylor Swift 's `` Style '' ranks at No. 7 on the Hot 100 for a third week after reaching No. 6 -LRB- and , as previously reported , reaches No. 1 on the Adult Pop Songs airplay chart -RRB- ; Rihanna , Kanye West and Paul McCartney 's `` FourFiveSeconds '' drops 5-8 on the Hot 100 after climbing to No. 4 -LRB- and departs the Hot R&B / Hip-Hop Songs summit after seven weeks -RRB- ; and Flo Rida climbs 10-9 with `` G.D.F.R. , '' featuring Sage the Gemini and Lookas . The rapper 's new EP , My House , arrives Tuesday -LRB- April 7 -RRB- . One song is new to the Hot 100 's top 10 : La Rose 's `` Somebody , '' featuring Jeremih -LRB- 13-10 -RRB- . The Dutch singer 's debut hit lifts 10-8 on Radio Songs -LRB- 73 million , up 9 percent -RRB- ; backtracks 13-14 on Digital Songs , but with a 7 percent gain to 68,000 ; and zooms 31-19 on Streaming Songs -LRB- 4.3 million , up 5 percent -RRB- . The track tops the Rhythmic Songs airplay chart for a second week . -LRB- Jeremih scores his fourth Hot 100 top 10 , and first in a featured role . -RRB- . La Rose is adjacent to her friend , and mentor , Flo Rida , on the Hot 100 . After she had introduced herself to him at a party , they soon began working together , and she started touring with him . They created `` Somebody , '' based on Whitney Houston 's 1987 Hot 100 No. 1 `` I Wan na Dance With Somebody -LRB- Who Loves Me -RRB- , '' as La Rose is a `` huge fan of '80s music , '' as she told Billboard . She 's currently recording her debut EP . Just beyond the Hot 100 's top 10 , Walk the Moon 's `` Shut Up and Dance '' pushes 15-12 , and is the new No. 1 on the Hot Rock Songs chart , while Jason Derulo 's `` Want to Want Me '' bounds 27-17 . And , Rihanna roars in at No. 23 with `` B **** Better Have My Money , '' the chart 's highest debut , powered largely by its No. 5 debut on Digital Songs -LRB- 108,000 sold since its digital retail arrival on March 26 -RRB- . More details on action below the top 10 in the weekly `` Hot 100 Chart Moves '' column to post on Friday -LRB- April 3 -RRB- . See the original story at Billboard.com . © 2015 Billboard . All Rights Reserved . --LRB- CNN -RRB- `` Jake the dog and Finn the human . The fun will never end . Adventure Time . '' So begins the dreamy theme song intro to the strangely addictive Cartoon Network TV show that 's centered around psychedelic characters like the Ice King , Marceline the Vampire Queen and , of course , Jake and Finn . Now , mega-fans of the hit show can experience `` Adventure Time '' in the skies . Thai Smile , a subsidiary of Thailand flag carrier Thai Airways , on Thursday unveiled colorful new livery featuring Jake , Finn and the beloved Princess Bubblegum sprawled across an Airbus A320 at Bangkok 's Suvarnabhumi International Airport . The interior of the plane also has an Adventure Time theme , with overhead bins , head rests and even air sickness bags covered in the faces of characters from the show . Airlines show off their new flying colors . The Adventure Time plane is the result of a partnership between Thai Airways subsidiary Thai Smile and Cartoon Network Amazone , a new water park near the Thai resort city of Pattaya featuring attractions based on shows that appear on the Turner Broadcasting System channel . Turner Broadcasting is a parent company of CNN . Check out these cool airline liveries . The inaugural Thai Smile Adventure Time flight takes place on April 4 , heading from Bangkok to Phuket . --LRB- CNN -RRB- A high temperature of 63.5 degrees Fahrenheit might sound like a pleasant day in early spring -- unless you 're in Antarctica . The chilly continent recorded the temperature -LRB- 15.5 degrees Celsius -RRB- on March 24 , possibly the highest ever recorded on Antarctica , according to the Weather Underground . The temperature was recorded at Argentina 's Esperanza Base on the northern tip of the Antarctica Peninsula , according to CNN affiliate WTNH . -LRB- Note to map lovers : The Argentine base is not geographically part of the South American continent . -RRB- . The World Meteorological Organization , a specialized United Nations agency , is in the process of setting up an international ad-hoc committee of about 10 blue-ribbon climatologists and meteorologists to begin collecting relevant evidence , said Randy Cerveny , the agency 's lead rapporteur of weather and climate extremes and Arizona State University professor of geographical sciences . The committee will examine the equipment used to measure the temperature , whether it was in good working order , whether the correct monitoring procedures were followed , whether the equipment was placed in the correct location and whether the measurement is matched by corresponding records from surrounding stations , Cerveny said . The committee will discuss the issues and make a recommendation to Cerveny , who will make an official finding , probably by late summer or early fall . Researchers who study climate change carefully watch weather changes in the Antarctic region and elsewhere for evidence that the Earth is getting warmer . -Seoul , South Korea -LRB- CNN -RRB- The man accused of stabbing U.S. Ambassador Mark Lippert in Seoul last month is now charged with attempted murder , a South Korean court official said Wednesday . Kim Ki-Jong has also been charged with assaulting a foreign envoy and business obstruction , the Seoul Central District Court official said . According to South Korean law , Kim 's trial must begin within 14 days of receiving today 's indictment . Lippert was stabbed March 5 during an event organized by the Korean Council for Reconciliation and Cooperation , which advocates peaceful reunification between North and South Korea . Shortly before Lippert was supposed to give a speech , the attacker slashed him in the face and jaw . The ambassador suffered a gash from his right cheekbone to his lower jaw that required 80 stitches . That wound measured 10 centimeters -LRB- 4 inches -RRB- long and 2.5 centimeters -LRB- 1 inch -RRB- deep , but there was no serious facial nerve damage , said Dr. Jung Nam-shik of the Yonsei Severance Hospital . Lippert also suffered five cuts in his left arm and hand , but was not expected to have permanent damage to his arm function . Police said Kim stabbed Lippert with a 10-inch knife because he opposed the joint South Korean-U.S. military drills , which happen every year and frequently draw the ire of North Korea . Police official Yoon Myeong-seong told reporters that Kim had visited North Korea seven times between 1999 and 2007 , and that authorities were investigating a possible connection between his visits to the reclusive state and the attack against Lippert . Kim , 55 , has a history of unpredictable behavior . In 2010 , he received a suspended two-year prison sentence for throwing a piece of concrete at a Japanese ambassador to South Korea , according to the Yonhap news agency . South Korean President Park Geun-hye condemned the attack . `` This incident is not only a physical attack on the U.S. ambassador , '' she said , `` but an attack on the South Korea-U.S. alliance and it can never be tolerated . '' CNN 's Madison Park and Greg Botelho contributed to this report . --LRB- CNN -RRB- President Barack Obama tied himself to the mast of a nuclear deal with Iran even before he became the Democratic candidate for president . Reaching a good , solid agreement with Iran is a worthy , desirable goal . But the process has unfolded under the destructive influence of political considerations , weakening America 's hand and strengthening Iran . Obama 's political standing and his historic legacy in foreign policy are so deeply intertwined with reaching an accord with Iran that if the deal ultimately collapses , he may fear that historians will conclude that his legacy in global affairs collapsed with it . There is a reason one gets the feeling that it is the United States and not Iran that is the more eager , even desperate , side in these talks , even though Iran is the country whose economy was sent into a deep chill by international sanctions ; the country whose only significant export , oil , lost more than half of its value in recent months . The reason is that Obama has a huge political stake in these negotiations . The President may insist that the United States will choose no deal over a bad deal , but few people truly believe he has a credible Plan B. Few believe it , particularly in the Middle East and notably among America 's Arab friends , who hold the view that Iran is running circles around the United States and outplayed Obama . As the writer David Rothkopf aptly put it , `` Iran is having a great Obama administration . '' That 's a belief that has already started shaking up the region . Saudi Arabia has said that it will pursue nuclear weapons if it believes Iran has not been stopped , and there is little doubt that other countries among Iran 's Muslim rivals will do the same . In fact , the notion that Obama is not handling the Iranian threat effectively is contributing to a new war in Yemen , where Saudi Arabia and other Arabs are trying to push back against gains by Iran 's allies . We can trace it all back to the Democratic primaries in 2007 , when then-Sen . Obama said he would meet Iran 's leaders `` without preconditions , '' leading his rival , Hillary Clinton , to call the idea `` Irresponsible and frankly naive . '' As the years of his presidency unfolded , and the Middle East started coming apart , finding a deal with Iran started to look like the one major foreign policy achievement Obama might leave behind . The political imperative started to intrude in strategic considerations on an issue that is of transcendent importance to world peace . The framework agreement announced on Thursday came two days after Obama 's March 31 deadline . The U.S.-imposed deadline served only to pressure the United States , and the French ambassador very publicly decried as a `` bad tactic . '' That bad tactic was a political move , a push to produce some sort of result , however vague , to protect the talks from critics . Again , a solid agreement that ensures Iran will not produce nuclear weapons would be a most welcome development . But the agreement so far does not look promising . It certainly shows the final outcome will differ greatly from what Obama had vowed . In a presidential debate in 2012 , Obama described a crystal clear goal for negotiations . `` The deal we 'll accept is they end their nuclear program . It 's very straightforward . '' Nobody is talking about Iran ending its nuclear program . Not even close . Iran will be allowed to keep one-third of its more than 6,000 centrifuges . That 's not a small symbolic number . And it does not appear as though any of its nuclear facilities will be dismantled , although Fordow will contain no nuclear materials . Iran has insisted all along that its nuclear program has only civilian uses . The fact is that Iran has a well-established record of lying and concealing the elements of its nuclear program to U.N. inspectors . And the U.N. agency chief says that has not stopped . A couple of weeks ago , with days left until the negotiating deadline , U.N. nuclear chief Yukiya Amano said Iran is still stonewalling . `` We are still not in a position to conclude that all nuclear material in Iran is -LSB- for a -RSB- peaceful purpose , '' he warned . The negotiations ' starting point is that Iran would like to have the bomb and the international community wants to delay that as much as possible -- and preferably , forever . The world only learned about Iran 's secret facilities at Arak and Natanz after dissidents raised the alarm . Iran , we have learned repeatedly , is very good at lying to international inspectors . It is well-established that it has had something to hide about its nuclear program . It is well-established that many of Iran 's neighbors do n't trust it and are anxious about the U.S.-led international dealings with Iran . It is well-established that Iran has engaged in international terrorism and in destabilizing the region . It is also clear that it took harsh international sanctions and a collapse in oil prices to bring Iran to the negotiating table . It was Iran that had the most to lose from a failure of talks . But political considerations turned the United States into the supplicant . The framework agreement starts lifting those indispensable sanctions much too soon . Nuclear enrichment will continue , although at a lower level . Iran officially , legally , becomes a nuclear threshold state , with the capability to make the final dash to a bomb within a `` breakout '' period of one year , the time when presumably inspectors would discover violation and allow the rest of the world to act . Even the Fordow facility , conveniently inside a fortified bunker in a mountain , will remain in existence , though `` converted '' to a nuclear `` research facility '' And without nuclear material on site . International sanctions lifting will begin almost immediately . Its nuclear infrastructure will remain largely in place , even if operating at a reduced pace , giving Iran much of what it wanted . With Iranian forces gaining ground in Arab lands and Iranian commanders declaring the destruction of Israel `` nonnegotiable '' and threatening Saudi Arabia , this deal does not look reassuring . Obama is right that a diplomatic solution is the most desirable option . But the deal so far looks like -LRB- another -RRB- win for Iran . It introduces enough restrictions that it could give the President the political cover he wants , but it does not do enough to make the world safe from nuclear proliferation and more potentially catastrophic instability in the Middle East . --LRB- CNN -RRB- Deion Sanders is such a dad . The NFL legend called out Deion Sanders Jr. on Twitter for saying he only eats `` hood doughnuts . '' In response , the elder Sanders -- in front of his 912,000 followers -- reminded his son he has a trust fund , a condo and his own clothing line called `` Well Off . '' `` You 're a Huxtable with a million $ trust fund . Stop the hood stuff ! '' Sanders followed it up with another tweet that included the hashtags #versacesheets #Huxtable and #Trustfund . Junior is a wide receiver at Southern Methodist University , an aspiring entrepreneur and occasional rapper . His Twitter timeline is a mix of biblical verses , motivational quotes and references to sports , cars , school and Balenciaga shoes . He also has gone on record with his love for `` hood doughnuts , '' or confections from `` a place in the hood , '' saying `` if my doughnuts do n't come in a plain white box , I do n't want them ! '' His father promptly put him in his place . Sanders Jr. seemed to take the public browbeating in stride , retweeting his father 's comments . At least he knew better than to delete them . --LRB- CNN -RRB- Blue Bell ice cream has temporarily shut down one of its manufacturing plants over the discovery of listeria contamination in a serving of ice cream originating from that plant . Public health officials warned consumers Friday not to eat any Blue Bell-branded products made at the company 's Broken Arrow , Oklahoma , plant . That includes 3-ounce servings of Blue Bell ice cream from this plant that went to institutions in containers marked with the letters O , P , Q , R , S or T behind the coding date . The warning by the Centers for Disease Control and Prevention does not affect other Blue Bell ice cream , including other 3-ounce servings , not made at the plant . But Blue Bell has recalled other products . The company is shutting down the Broken Arrow facility `` out of an abundance of caution '' to search for a possible cause of contamination . It is the third time Blue Bell has taken action in light of a listeria outbreak at a Kansas hospital that served the company 's ice cream . Listeria monocytogenes was recently found in a cup of ice cream recovered from the hospital . The cup contaminated with the bacteria was produced at the Broken Arrow plant in April 2014 , Blue Bell said . And , according to the CDC , listeria bacteria was found in additional samples of the same product that were recovered from the plant . The bacteria in the hospital sample and the factory sample appeared to match each other genetically , the CDC said . But they did not appear identical to listeria samples taken from patients infected in the Kansas outbreak . In a separate outbreak in Texas , the CDC did find that listeria samples taken from patients who came down with listeriosis between 2010 and 2014 in a hospital that served 3-ounce Blue Bell cups matched the listeria in recovered samples . None of this means the ice cream is the source of either spate of the infections . `` Investigation to determine whether these illnesses are related to exposure to Blue Bell products is ongoing , '' the CDC said . In early March , in light of the Kansas listeria outbreak , Blue Bell recalled a group of products made at a plant in Texas . It later added 3-ounce cup servings to the recall . Five people were infected and three died in the past year in Kansas from listeria that might be linked to Blue Bell Creameries products , according to the CDC . All five of them were hospitalized at the same hospital before developing listeriosis , the CDC said . At least four of them had consumed milkshakes made with Blue Bell ice cream before developing the infection . `` We are devastated and know that Blue Bell has to be and can be better than this , '' Paul Kruse , Blue Bell CEO and president , said in a statement . `` Quality and safety have always been our top priorities . We are deeply saddened and concerned for all those who have been affected . '' The CDC advises that individuals and institutions should check their freezers for the recalled products and throw them away . In a statement on its website , Blue Bell said `` this recall in no way includes Blue Bell ice cream half gallons , pints , quarts , 3 gallons or other 3 oz . cups . '' This has been the first product recall in the 108-year history of Blue Bell Creameries , the company said . Listeriosis is a serious infection caused by eating food contaminated with listeria , and primarily affects the elderly , pregnant women , newborns and people with weakened immune systems , according to the CDC . Symptoms of a listeria infection are fever and muscle aches , sometimes associated with diarrhea or other gastrointestinal symptoms . In the United States , an estimated 1,600 people become seriously ill each year , and approximately 16 % of these illnesses result in death . Cervical infections caused by listeriosis in pregnant women may result in stillbirth or spontaneous abortion during the second or third trimesters . CNN 's Debra Goldschmidt , Amanda Watts and Jacque Wilson contributed to this report . --LRB- CNN -RRB- When Hong Kong police answered a call in the early hours of a Saturday morning last November , they encountered a grisly scene and an alleged crime that shocked the city . One woman was lying on the floor with cuts to her neck and buttocks . Another was stuffed inside a suitcase on the balcony . A former banker , 29-year-old Briton Rurik Jutting , was charged with two counts of murder . On Thursday , a court hearing that was to determine whether there was enough evidence to proceed to trial was adjourned until May . Here 's what we know so far about the victims and their alleged attacker . Jutting allegedly lived at the murder scene , an upmarket apartment in the middle of Wan Chai , an inner-city suburb that 's home to an eclectic mix of late-night bars , residential tower blocks and local markets selling groceries and assorted cheap goods . In the early hours of Saturday morning , November 1 , police say Jutting called them to the apartment . There they found a woman lying on the blood-splattered floor , later identified as 29-year-old Seneng Mujiasih . During a search of the apartment , officers uncovered another body hidden in a suitcase on the balcony . It 's alleged 25-year-old Sumarti Ningsih was killed on October 27 , five days before her body was found . Sumarti Ningsih was from Cilacap , in Central Java , and was the mother of a five-year-old girl . In a statement , her cousin , Jumiati , described her as `` just an ordinary woman from Indonesia '' who , like many others , was `` forced to work abroad to feed her poor family and make her dream comes -LRB- sic -RRB- true . '' `` She wanted to work as professional so she can earn money and dignity for her family , '' Jumiati wrote . `` She is good girl and did not deserve this treatment . '' According to the Asian Migrant Coordinating Body , Ningsih was visiting Hong Kong as a tourist and had been due to fly back to Jakarta the day after her body was found . Last year , her grieving father , Ahmad Khaliman , told Agence France-Presse that his daughter had worked in Hong Kong as a domestic helper between 2011 and 2013 . She 'd since returned on two occasions , Khaliman said . He said the family had been shocked by her murder , and called for the perpetrator to be executed . `` If not , I can not accept it . He has already taken my daughter 's life , so he has to pay with his life , '' he told CNN affiliate Trans7 . Seneng Mujiasih had more recently worked as a domestic worker in Hong Kong but had overstayed her visa , according to the Asian Migrant Co-ordinating Body . Also known as Jesse Lorena , Mujiasih was from the city of Muna in Sulawesi province , in southeast Indonesia . Other than that , few details are known about her life and why she stayed on in Hong Kong . After news of their death spread , fellow domestic workers held a vigil in Hong Kong 's Victoria Park . Around 200 people gathered to sing and pray , and lay flowers besides photos of the two women . The victims ' bodies were buried after being repatriated to Indonesia in November . Before being taken into custody , Rurik Jutting lived in the upmarket J Residence in Wan Chai . He was detained at the scene , where police found the bodies of two women and seized a knife during a search of the premises . It 's unclear when Jutting left his job as a trader at the Bank of America Merrill Lynch ; a BoA spokesman would only confirm that a man of the same name had worked there in the past . Jutting 's profile on LinkedIn said he haad been employed at the bank 's structured equity finance and trading division in Hong Kong since July 2013 . Before that , he worked in the same unit in London for three years . According to the profile , Jutting previously worked in capital markets for the British bank Barclays and studied history and law at the prestigious University of Cambridge , between 2004 and 2008 . As part of the trial process , tests were conducted to determined if Jutting was psychologically fit to enter a plea . He was . The case was then adjourned to allow for more than 200 pieces of forensic and DNA evidence to be analyzed . --LRB- CNN -RRB- Universal 's `` Furious 7 '' continues to build momentum at the Friday box office for a weekend debut in the $ 135 million - $ 138 million range , the largest opening in North America since fall 2013 . That includes a projected Friday take of $ 58 million - $ 60 million . The final film featuring the late Paul Walker , `` Furious 7 '' is opening around the globe this weekend and earned a record-breaking $ 60 million internationally on Wednesday and Thursday for a possible worldwide debut approaching or crossing $ 300 million by the end of Easter Sunday . `` Furious 7 '' is getting the widest release in Universal 's history . Domestically , it will be playing in 4,003 theaters by Good Friday . Internationally , it has booked more than 10,500 screens in 63 territories , although it wo n't open in China , Japan and Russia until later . The current record-holder for top April opening domestically is `` Captain America : The Winter Soldier , '' which debuted to $ 95 million from 3,928 theaters last year . `` Furious 7 '' is likewise poised to nab the biggest opening of 2015 to date . And it will easily beat the $ 121.9 million launch of `` The Hunger Games Mockingjay -- Part 1 '' in November 2104 , making it the largest three-day opening since `` The Hunger Games : Catching Fire '' -LRB- $ 158 million -RRB- in November 2013 . The movie enjoys massive awareness and interest , due to both the popularity of the street-racing series and Walker 's death . The last film , `` Fast & Furious 6 , '' debuted to a franchise-best $ 117 million over the four-day Memorial Day weekend in 2012 , including $ 97.4 million for the three days , on its way to grossing $ 788.7 million worldwide . Universal intended to open `` Furious 7 '' on July 11 , 2014 , but production was halted in November 2013 when Walker died in a car crash during the Thanksgiving hiatus . After director James Wan , writer Chris Morgan and Universal pored over existing footage and tweaked the script , production resumed in April 2014 . CGI and voice effects were used in some scenes featuring Walker 's detective character , Brian O'Conner , with Walker 's brothers , Caleb and Cody , used as stand-ins . `` Furious 7 '' pits Vin Diesel 's Dominic Toretto and crew -LRB- which includes Michelle Rodriguez and Tyrese Gibson , among others , as well as Walker -RRB- against Jason Statham 's Deckard Shaw , out for revenge after the death of his brother . Dwayne Johnson also reprises his role as Hobbs . © 2015 The Hollywood Reporter . All rights reserved . --LRB- CNN -RRB- Imprisoned soldier Chelsea Manning can now communicate with the world -- in 140 characters or less . Manning , who is serving a 35-year prison sentence for leaking thousands of classified documents , appears to have joined Twitter this week . In a series of tweets , the prisoner formerly known as Bradley Manning said she will be using a voice phone to dictate her tweets to communications firm Fitzgibbon Media , which will post them on her behalf . She is not allowed Internet access in prison , according to The Guardian . `` It will be hard , but I do n't want this Twitter feed to be a one-way street/conversation , '' Manning posted to her nearly 26,000-plus followers . Manning was sentenced in 2013 , and in August of that year , she said she wanted to transition to a female . The Fort Leavenworth Disciplinary Barracks in Kansas , where she is serving her sentence , has authorized hormone therapy for her treatment . Manning said she suffers from gender dysphoria . Her lawyers describe it as `` the medical diagnosis given to individuals whose gender identity -- their innate sense of being male or female -- differs from the sex they were assigned at birth , causing clinically significant distress . '' Last year , a Kansas judge granted her request to be formally known as Chelsea Elizabeth Manning . The former Army intelligence analyst was convicted of stealing and disseminating 750,000 pages of documents and videos to WikiLeaks in what has been described as the largest leak of classified material in U.S. history . She was found guilty of 20 of the 22 charges , including violations of the U.S. Espionage Act . Manning has written opinion pieces for The New York Times and The Guardian from prison . --LRB- CNN -RRB- According to an outside review by Columbia Journalism School professors , '' -LRB- a -RRB- n institutional failure at Rolling Stone resulted in a deeply flawed article about a purported gang rape at the University of Virginia . '' The Columbia team concluded that `` The failure encompassed reporting , editing , editorial supervision and fact-checking . '' Hardly a ringing endorsement of the editorial process at the publication . The magazine 's managing editor , Will Dana , wrote , `` We would like to apologize to our readers and to all of those who were damaged by our story and the ensuing fallout , including members of the Phi Kappa Psi fraternity and UVA administrators and students . '' Brian Stelter : Fraternity to ` pursue all available legal action ' The next question is : . Can UVA , Phi Kappa Psi or any of the other fraternities on campus sue for defamation ? The Virginia Supreme Court said in Jordan v. Kollman that `` the elements of libel are -LRB- 1 -RRB- publication of -LRB- 2 -RRB- an actionable statement with -LRB- 3 -RRB- the requisite intent . '' `` Actionable '' means the statement must be both false and defamatory . Of course , the law of defamation must be balanced against the freedom of speech protected under not only the First Amendment to the United States Constitution , but also the Virginia Constitution . True statements can not be defamatory . Neither can pure statements of opinion , because they theoretically can not be either true or false . But the Rolling Stone article certainly purported to be fact , and it apparently is not exactly what the law considers `` true . '' The individual members of the fraternity will likely be considered private individuals , and not public figures ; the latter have a harder time proving defamation . A private person suing for defamation must establish that the defendant has published a false factual statement that is about the person and that it also harms the person 's reputation . The private plaintiff also must show that the defendant knew that the statement was false , or believed it was true but lacked a reasonable basis , or acted negligently in checking the facts . At first blush , that sounds like it fits perfectly , right ? The Columbia report may go a long way toward establishing at least a modicum of the required intent . But that 's only half the battle . There are strict rules about who can be a plaintiff in a defamation action like this . The identity of the aspiring plaintiff matters . First , let 's eliminate UVA . The university is a public university , and therefore it is a governmental entity . The Supreme Court has been clear on the issue of libelous statements about the government : The government can not sue for defamation . There is no such cause of action in American jurisprudence . Now the fraternities , starting with Phi Kappa Psi . A fraternity is not an individual , but a group . A plaintiff in a defamation case must show that the statements were `` of or concerning '' the plaintiff . It sounds obvious , but if you 're going to say a statement hurt you , you have to prove the statement actually was about you to begin with . When the statements are about a group without naming an individual , it 's hard to say the statement is `` concerning '' the individual -- and groups generally can not sue . For example , you can be sued if you call a specific lawyer a thief , but that same person can not sue you if you simply call all lawyers thieves . Defamatory statements about a group are therefore not actionable by the group 's individual members , for the most part . Like all rules , however , there are exceptions . If the defamatory language is about `` a comparatively small group of persons and the defamatory part is easily imputed against all members of the small group , an individual member may sue . '' If I said , `` The 1980 Philadelphia Phillies infielders were a bunch of criminals '' -LRB- they were n't -RRB- , the individual players could sue , because that mean statement is clearly about certain persons -- if I said that -- which I did n't . Phi Kappa Psi would likely argue that the `` small group '' exception fits it perfectly : Even if the individual members were not identified by name , the defamatory story has been imputed directly to individual members , who have suffered by their association with the group . On the other hand , Rolling Stone 's lawyers would likely argue that the group is so large and fluid -LRB- after all , the membership changes somewhat every year -RRB- , that even though the fraternity 's reputation is tarnished , the members have suffered no individualized injury . As for the other fraternities on campus but not implicated in the story , that 's likely a group that moves from the small category to large , and the members of Greek life generally will have a harder time bringing a lawsuit . Lawyers will tell you that a libel suit is one of those things that citizens often threaten each other with on Facebook , but that such cases are rarely actually filed . That 's because a plaintiff usually has to show some kind of financial harm . So if your Aunt Edna calls you a loser on Twitter , you 're going to have to spend money on an expert to explain to a jury how that actually damaged you financially . And since most of the people who waste time threatening each other with defamation suits on Facebook live in their moms ' basements and are `` between jobs , '' these are not the kind of people who have money or reputation to damage in the first place . The UVA situation is not your run-of-the-mill defamation case . The university wo n't be able to sue , but if the members of the fraternity can get past some of the preliminary hurdles of a defamation claim , and they can make a tangible case for damages , then this could be one of those rare successful defamation cases . --LRB- CNN -RRB- The classic video game `` Space Invaders '' was developed in Japan back in the late 1970 's -- and now their real-life counterparts are the topic of an earnest political discussion in Japan 's corridors of power . Luckily , Japanese can sleep soundly in their beds tonight as the government 's top military official earnestly revealed that the country 's Air Self Defense Force -LRB- ASDF -RRB- had never encountered an extraterrestrial unidentified flying object . Responding to a query from flamboyant former wrestler-turned-lawmaker Antonio Inoki , Defense Minister Gen Nakatani told the Diet , Japan 's parliament , that his jets had , to date , never come across any UFOs from outer space . `` When the Air Self Defense Force detects indications of an unidentified flying object that could violate our country 's airspace , it scrambles fighter jets if necessary and makes visual observation , '' Nakatani said . He continued : `` They sometimes find birds or flying objects other than aircraft but I do n't know of a case of finding an unidentified flying object believed to have come over from anywhere other than Earth . '' Inoki has appeared in the U.S.-based WWE -- which describes him as `` among the most respected men in sports-entertainment '' -- and is the founder of the New Japan Pro Wrestling organization . He entered Japan 's Upper House for a second stint in politics in 2013 . He also famously fought Muhammad Ali in 1976 , in one of the first-ever mixed-discipline matches , which would later pave the way for today 's wildly popular Mixed Martial Arts contests . Before his return to politics he was a regular fixture on Japanese TV variety shows and has promoted a slew of products , from hot sauce to banks . The maverick politician also traveled to Iraq in 1990 to try to secure the release of Japanese hostages , and has more recently attempted to replicate former NBA star Dennis Rodman 's `` basketball diplomacy '' by staging a wrestling tournament in North Korea . He reportedly converted to Islam in the 1990s , although he says he practices both Islam and Buddhism . The lawmaker , who is universally known in Japan for his colossal chin and once-ever-present red scarf -- these days often replaced with a red necktie -- as much as for his political achievements , had asked a Upper House Budget Committee meeting if aircraft were ever scrambled to meet extraterrestrial threats , and if research was being done into alien visitors , prompting Nakatani 's response . Inoki also claims to have seen a UFO with his own eyes , but admitted that he did n't know personally if aliens existed . The exchange was n't the first time Japanese politicians have discussed the implications of visitors from another planet . In 2007 then-Defense Minister Shigeru Ishiba pondered the legal ramifications , under Japan 's pacifist constitution , of a defense against an invasion from outer space . READ MORE : Japan unveils Izumo , its largest warship since World War II . --LRB- CNN -RRB- The FBI has confirmed that one of its most wanted terrorists , the Malaysian bomb maker known as Marwan , was killed in an otherwise disastrous raid in the Philippines in January . Marwan , whose real name is Zulkifli bin Hir , was believed by the FBI to a member of southeast Asian terror group Jemaah Islamiyah 's central command . The FBI said in February that a DNA sample -- understood to be from a severed finger -- taken from a man killed in a raid in the southern Philippines showed a link with a known relative of Marwan . But the FBI now says tests have confirmed that the dead man was the wanted Islamic extremist . `` After a thorough review of forensic data and information obtained from our Philippine law enforcement partners , the FBI has assessed that terrorism subject , Zulkifli Abdhir ... is deceased and has been removed from the FBI 's list of Most Wanted Terrorists , '' David Bowdich , assistant director in charge of the FBI 's Los Angeles field office , told CNN in a statement . The FBI had been offering a $ 5 million reward for information leading to Marwan 's capture in the wake of his 2007 indictment on terror charges in a California court . It accused him of being a supplier of IEDs to terrorist organizations , and having conducted bomb making training for terror groups , including the Philippines-based Abu Sayyaf . Marwan had previously been falsely reported dead after a raid by Philippine security forces in 2012 . The Philippines has been fighting an insurgency in the predominantly Muslim south for years , and last year signed a peace agreement with the Moro Islamic Liberation Front -LRB- MILF -RRB- , the largest rebel group in the region . But in January it launched a surprise raid in pursuit of Marwan at Mamapasono , in the southern province of Maguindanao . The mission went disastrously awry . Forty-four members of the police 's elite Special Action Force -LRB- SAF -RRB- unit were killed in the assault , targeting an area controlled by the Bangsamoro Islamic Freedom Fighters -LRB- BIFF -RRB- -- a hardline splinter group which has rejected the peace deal with the Philippines government . According to a report released by the Institute for Policy Analysis of Conflict -LRB- IPAC -RRB- last month , the BIFF faction sheltering Marwan had sworn allegiance to ISIS . In the immediate aftermath of the assault , the SAF company charged with executing Marwan came under fire , before another SAF company stationed in nearby MILF territory as a `` blocking force '' became engaged in an eight-hour firefight with MILF fighters . According to the IPAC report , the SAF `` blocking '' company eventually ran out of ammunition and only one of their number survived , . Eighteen MILF fighters were killed and a number of BIFF fighters may also died . The clash shattered a three-year ceasefire with the MILF , authorities said . A national day of mourning was declared as the men were laid to rest . Bowdich expressed the FBI 's `` sincere condolences to the brave officers of the Special Action Force who lost their lives while attempting to apprehend this dangerous fugitive . '' While an SAF superintendent said at a eulogy for the fallen commandos that their sacrifice had been worth it , controversy has dogged the botched mission in the Philippines . The IPAC report argued that the `` single-minded focus '' of authorities on killing Marwan has threatened the peace agreement with the MILF , which is yet to cross the final hurdle of being passed into law by the Philippines Congress . `` The best chance the southern Philippines has ever had for peace may now be in jeopardy , '' read the report , which argued that the Mamapasano fiasco was the result of a misguided emphasis on killing Marwan . The report argued that , although Marwan had aided terror attacks and provided funds and equipment to MILF and Abu Sayyaf , he was not `` the master bomber that his reputation suggested . '' Yet for the Philippines authorities and their U.S. allies , killing Marwan had become such a priority that security forces bypassed the mechanisms that had been established to alert the MILF to such operations , for fear of word leaking to their target . The report quoted an anonymous Indonesian associate of Marwan 's who described the Malaysian as `` a little snake who has been blown up into a dragon . '' READ MORE : Dozens of Philippine police killed in raid on ` high value ' bomb makers . READ MORE : Philippines honors 44 slain commandos with day of mourning . CNN 's Arlene Samson-Espiritu and Kathy Quiano contributed to this report . --LRB- CNN -RRB- One of Tokyo 's most prominent districts has taken a small , but potentially significant step to recognizing same-sex unions in Japan . The government of Shibuya ward , one of the capital 's most famous shopping and trendy entertainment districts , passed ordinance on Wednesday paving the way for `` partnership certificates '' for same-sex couples , allowing them some of the rights of married heterosexual couples . Same-sex partners who are registered with the district 's ward office will be able to hold visitation rights in hospitals and co-sign tenancy agreements . Other advantages that heterosexual married couples enjoy , such as joint filing of taxes , are controlled by the federal government and are outside the remit of individual municipalities . The measure was proposed in February by Shibuya 's mayor , Toshitake Kuwahara . While the certificates will not be issued until later in the summer and are not legally binding , proponents of marriage equality in socially conservative Japan say that the ward 's decision is a step in the right direction . `` It is not a marriage license and advantages will be limited but still better than nothing , '' Gon Matsunaka , a gay rights activist , told CNN . While Shibuya 's decision does not yet equate to heterosexual marriage , the hope is that the move will be the beginnings of promoting marriage equality for gay communities . `` What is important for the LGBT -LRB- lesbian , gay , bisexual and transgender -RRB- community in Shibuya is the ruling will make us visible in society , '' Matsunaka said . `` It could be a strong driver for Shibuya citizens to learn and know what kind of problems LGBT people are facing . '' Taiga Ishikawa , Tokyo councillor and the first male gay local assembly member in Japan , told CNN the ordinance was a `` big first step for the protection of human rights . '' He called the decision `` happy '' but said that it must go alongside education about alternative lifestyles . He said that the most important part of today 's announcement is that it `` should be actually put into practice , as should education for understanding -LRB- LGBT individuals -RRB- especially they suffer as they find out their sexuality when they are young . '' Neighboring Setagaya ward has indicated that it would look into following Shibuya 's lead . However , former councilor Ishikawa cautioned against taking the movement 's momentum for granted . `` To realize equal rights for gay couples , a national law has to be made , '' he said . While outright discrimination against the LGBT community is rare in Japan , its effects can be hidden and gay people often find themselves at a disadvantage . Many hide their sexuality from their employers , co-workers , families and friends . But the tide may be turning . A recent poll found that a slight majority at 52.4 % oppose gay marriage , but support amongst young adults in their 20s and 30s is as high as 70 % . An editorial in the Asahi Shimbun newspaper , which commissioned the poll , welcomed the Shibuya decision , calling it `` a bold and important step forward . '' Only traditional marriages are recognized under Japan 's constitution , but the wording is vague enough to open it to interpretation , according to Mari Miura , a professor of gender and politics at Sophia University in Tokyo . `` The constitution does not rule out same-sex marriage , so an interpretation can be made that it is constitutional , '' Miura told Bloomberg Business . While Prime Minister Shinzo Abe and the ruling Liberal Democratic Party `` do n't like the idea of same-sex marriage , but at the same time the issue is gaining momentum . '' Conservative groups were vocal in their opposition , with one , known as the Network Pushing for Normalization of Education , telling the Japan Times that granting same-sex couples the same rights as all other Japanese citizens would degrade the `` familial system and practice that heterosexual unions have long preserved in human history . '' While Shibuya 's registration system will be a first for Japan , Yodogawa ward in the western Japanese city of Osaka was the first in the nation to recognize and support the LGBT community . In 2013 the ward government pledged to give consideration to the issues that the community faced , and to train staff to accommodate needs specific to LGBT individuals . Journalist Chie Kobayashi contributed reporting from Tokyo . --LRB- CNN -RRB- Film director David Lynch has confirmed he will no longer direct the revival of `` Twin Peaks '' -- a cult 1990s television show that was set to return in 2016 . The offbeat TV series , created by Lynch and Mark Frost , featured a quirky FBI agent who went to the Pacific Northwest town of Twin Peaks to investigate the mysterious murder of a high school girl named Laura Palmer . The groundbreaking series is considered one of the most influential shows in television history . Lynch broke the news about his departure in a series of tweets , saying that the show 's third season will continue without him . He said he felt the network was not offering enough money to produce the show `` the way it needed to be done . '' Lynch also wrote that he had personally called the actors over the weekend to let them know he would no longer be directing . Showtime Network , which will air the nine-episode comeback , released a statement saying they were `` saddened '' by Lynch 's decision . `` We were saddened to read David Lynch 's statement today since we believed we were working towards solutions with David and his reps on the few remaining deal points , '' read the statement . `` Showtime also loves the world of Twin Peaks and we continue to hold out hope that we can bring it back in all its glory with both of its extraordinary creators , David Lynch and Mark Frost , at its helm . '' Showtime announced they would produce a third season in October last year . Actor Kyle MacLachlan , who played the coffee-obsessed FBI agent Dale Cooper in the original series , had confirmed he would reprise the lead role for the new season . --LRB- CNN -RRB- A University of Kentucky basketball player is apologizing for the `` poor choice of words '' he muttered under his breath after the team 's stunning loss to Wisconsin on Saturday . As a deflated panel of Wildcats fielded a reporter 's question about Wisconsin standout Frank Kaminsky , a hot mic picked up Kentucky guard Andrew Harrison saying of Kaminsky , `` F**k that -LRB- N-word -RRB- . '' Harrison , who is is black , said his words were `` in jest , '' and that he meant no disrespect to Kaminsky , who is white . `` First I want to apologize for my poor choice of words used in jest towards a player I respect and know , '' Harrison tweeted . `` When I realized how this could be perceived I immediately called big frank to apologize and let him know I did n't mean any disrespect . '' Kaminsky -- the 2015 Associated Press player of the year -- said Sunday that he was `` over it . '' `` He reached out to me . We talked about it . -LSB- I 'm -RSB- Over it , '' he said . `` Nothing needs to be made out of it . '' Harrison said he wished Kaminsky well in Monday 's national title game against Duke . `` We had a good conversation , and I wished him good luck in the championship game Monday . '' CNN reached out to Kentucky for comment on Sunday but did not hear back . Kentucky vs. Wisconsin nets biggest Final Four ratings in 22 years . -Hong Kong -LRB- CNN -RRB- Six people were hurt after an explosion at a controversial chemical plant in China 's southeastern Fujian province sparked a huge fire , provincial authorities told state media . The plant , located in Zhangzhou city , produces paraxylene -LRB- PX -RRB- , a reportedly carcinogenic chemical used in the production of polyester films and fabrics . The blast occurred at an oil storage facility Monday night after an oil leak , though local media has not reported any toxic chemical spill . Five out of six people were injured by broken glass and have been sent to the hospital for treatment , Xinhua news agency reported . More than 600 firefighters were sent to battle the blaze and the fire is now under control , the Zhangzhou fire department wrote on their official microblogging account Tuesday morning . Residents living close to the plant had heard the explosion and took to Weibo to post photos of the fire . One user wrote that he heard a loud blast and felt slight tremors . The plant was hit by another explosion in July 2013 , although there were no reports of casualties or toxic leaks at the time . Though demonstrations are illegal in China , the construction of PX plants has sparked protests , which have occasionally turned violent , in several cities in recent years . The Zhangzhou plant was slated for Xiamen -- a densely populated city in the southeast of the country . However , it provoked an angry backlash in 2007 due to pollution concerns and prompted the local government to relocate the factory to its current , more remote location . --LRB- CNN -RRB- The presence of a harmful pesticide at a luxury villa in the U.S. Virgin Islands may have resulted in the illness of a Delaware family , the U.S. Environmental Protection Agency said Friday . Paramedics were called last week to a rented villa at the Sirenusa resort in St. John after the family of four fell ill . They had rented the villa from March 14 to March 22 , and were later hospitalized . The illness was reported to the EPA on March 20 . `` Our preliminary results do show that there was a presence of methyl bromide in the unit where the family was staying , '' said Elias Rodriguez , an EPA spokesman . Exposure to methyl bromide can result in serious health effects , including central nervous system and respiratory system damage , according to the EPA . The use of the pesticide is restricted in the United States because of its acute toxicity . It 's not allowed to be used indoors . Only certified professionals are permitted to use it in certain agricultural settings . `` It 's an ongoing investigation ; we 're still on the island doing our assessment , '' Rodriguez said . `` We have been doing different types of air sampling and wipe sampling . '' Final test results were expected next week . The EPA is working with local government agencies to investigate whether the family was made ill after a fumigation at the resort on March 18 and whether any environmental regulations or laws were violated . `` Pesticides can be very toxic , and it is critically important that they be applied properly and used only as approved by EPA , '' said Judith A. Enck , a regional administrator for the EPA . `` The EPA is actively working to determine how this happened and will make sure steps are taken to prevent this from happening to others at these vacation apartments or elsewhere . '' Depending on the season , the luxury villa where the family stayed rents between $ 550 and $ 1,200 per night . Sea Glass Vacations , which acts as a rental agent for several units at Sirenusa , said that the unit directly below the one where the family stayed was recently treated for pests , but that their unit was not treated . The company said it licensed an outside company , Terminix , for the pest control services . `` Sea Glass Vacations does not treat the units it manages for pests but instead relies on licensed professionals for pest control services , '' the company said in a statement . The U.S. Department of Justice has initiated a criminal investigation into the matter , according to a U.S. Securities and Exchange Commission filing made Monday by ServiceMaster Global Holdings , the parent company of Terminix . In an email to CNN , a spokesman for Terminix wrote that the company is `` committed to performing all work ... in a manner that is safe for our customers , employees , the public and the environment '' and is `` looking into this matter internally , and cooperating with authorities . '' `` We 're thinking about the family , and we join the community in wishing them a speedy recovery , '' Terminix wrote . James Maron , an attorney who has been a spokesman for the family , has not responded to requests for comment . The SEC filing described the injuries to the family members as `` serious . '' --LRB- CNN -RRB- When I was elected to the Kentucky State Senate in 1967 , I became the first woman and the first person of color to serve in the body . Five decades later , I find it almost unfathomable that a politician from my own state is attempting to launch his presidential campaign on a record that includes questioning landmark voting rights and civil rights legislation . But that is what Rand Paul , who today declared he 's running for president of the United States , is doing . His campaign team told reporters last week that his campaign announcement message would be about `` expanding the Republican Party '' -- a message of inclusion . But those of us listening today who he is hoping to include , heard nothing more than hype . I 'm not buying it . Since coming to the U.S. Senate , Paul has tried to sell himself as a different type of Republican . He 's tried to brand himself as the GOP 's minority outreach candidate . The problem for Paul , and the GOP at large , is that they do n't back up their words with their policies . Yes , it 's about time that Republicans started seriously considering the fact that black voters are an important piece of the electoral puzzle . But they ca n't actually appeal to the community unless they have a real commitment to the issues facing minority communities . A quick survey of Sen. Paul 's positions makes clear that he does not . Paul kicked off his announcement speech in Louisville by declaring `` I have a message that is loud and clear : We have come to take our country back . '' I have no doubt that under Paul 's leadership , he would indeed take our country back -- in the wrong direction -- way back to a time when we were debating the Civil Rights Act -- which Paul has done since landing on the national stage ; when there was no Department of Education -- a department he thinks `` should be done away with ; '' when women did n't have choices -- choices Paul seeks to limit in Washington ; when DREAMers were n't protected from deportation -- protections Paul currently opposes . In his inept speaking engagements at historically black colleges and universities , he has come across as condescending and lacking basic cultural competency . But Paul has also questioned the Civil Rights Act , and even claimed that private business owners have a right to discriminate . When asked about the need for a more robust Voting Rights Act following the Supreme Court 's dismantling of the law , Paul dismissively remarked , `` We have an African-American President . '' When President Obama stood with John Lewis and other veterans of the civil rights movement in front of the Edmund Pettus Bridge last month to mark the 50th anniversary of Bloody Sunday , he inspired us all by saying : `` With effort , we can roll back poverty and the roadblocks to opportunity . ... With effort , we can protect the foundation stone of our democracy for which so many marched across this bridge -- and that is the right to vote . '' America is better -- and we solve more problems -- with more democracy , not less . Unfortunately Rand Paul has demonstrated that he disagree with that basic principle . Paul tried once again from that stage in Louisville to fashion himself as the one member of his party courageous enough to try to broaden Republican appeal to constituencies they ignore year after year . But his record makes it very clear that his views are outdated , outside of the mainstream , and disqualifying for a man who wants to lead our country . The American people deserve a leader who wo n't disrespect their intelligence , who wo n't pander to them when it 's convenient , and who wo n't work to dismantle the progress we have made over the last five decades . What I heard today , did n't change the facts about Rand Paul 's record . The American people deserve better than Rand Paul . --LRB- CNN -RRB- The United States Department of Justice has named a new defendant in the war on drugs , and the charges are serious indeed . A 15-count indictment filed in federal court in California bristles with accusations of conspiracies , transporting prescription pharmaceuticals dispensed with illegal prescriptions , violations of the Controlled Substances Act , misbranding charges , and money laundering charges . Who is this menace to society ? FedEx . Yes , the courier delivery service . Wait , can companies even be charged with crimes ? Where would a FedEx be incarcerated ? Is there a corporate Shawshank Prison ? How does one fit a company for a prison jumpsuit ? It turns out a corporation can indeed be prosecuted like a person . It 's a practice the Supreme Court has approved of for over a century . In fact , in many ways they are easier to prosecute than people . Corporations do n't have all the same inconvenient constitutional rights as citizens accused of crimes . Imprisoning convicted citizens is expensive , but corporate convictions , on the other hand , turn tidy profits for the U.S. government , with zero prison overhead . Even if corporations can be held criminally liable , should a courier service like FedEx be held liable for `` possessing '' what bad guys may send through the service ? The answer , according to FedEx , is not just `` No , '' but a `` No '' so conclusive that this case should never see a courtroom . The company maintains that it is innocent . It has a point . `` Possession '' is an elusive concept . When it comes to drugs , the law recognizes two kinds of possession : actual and constructive . Actual possession is when you have physical control over the contraband . When you have a gun in your hand or drugs in your pocket , you `` actually '' possess those things . The somewhat hazier concept of `` constructive possession '' means you can `` possess '' something without even having it on your person , as long as you have ownership , dominion or control over the contraband or the property where it is found . For example , the government would argue that while you may not have actual possession of the 5,000 OxyContin pills in the trunk of your car parked in your driveway , you `` constructively '' possessed them . Conversely , sometimes you can be holding something in your hand or have it in your vehicle , but not `` possess '' it either actually or constructively , in the eyes of the law . Such is the case with couriers who routinely drive to your home , walk up to your door and hand you a package , completely ignorant about what is inside it . It 's hard to argue the UPS guy intentionally `` possessed '' your subscription to porno mags , in their nondescript brown packaging . That is the idea behind the `` common carrier '' exception to possession , and a large part of FedEx 's compelling legal argument . A `` common carrier '' is one who offers its services to members of the public -- without much discretion -- and is engaged in the business of transporting persons or property for compensation . The public policy reasons behind `` common carrier '' exemptions make sense ; the industry simply could n't function if every driver , courier and handler who touches a valid shipment of OxyContin had to obtain a prescription for opiates to be legally allowed to deliver it to your front door . That would lead to an absurd result . That 's why the Controlled Substances Act and the Food , Drug , and Cosmetic Act allow common carriers to lawfully possess controlled substances , so long as it is in the usual course of their business . Of course , this is not a permission slip for drug runners to avoid liability by calling themselves `` common carriers . '' That 's why the `` usual course of business '' language acts as an additional safety measure . In court papers , FedEx 's lawyers offer the example of an airline whose sole activity was flying controlled substances from Jamaica to Miami . This would not be acting in the usual course of business of a common carrier , since this imaginary airline is not offering its services to the public , generally . On the other hand , FedEx argues that it is indeed a common carrier , performing the normal duties of a common carrier , because -LRB- a -RRB- it is engaged in the business of transportation of property and -LRB- b -RRB- it offers its services to the public generally . It 's hard to imagine extending liability to common carriers for possession of contraband . Does this mean a Greyhound bus driver becomes liable for marijuana possessed by a passenger ? The bus driver would argue he has no reason to know if a particular passenger is carrying drugs . But if the guy boards the bus with a Grateful Dead T-shirt and a set of bongos , should n't the driver at least have a hunch ? That seems dangerously close to profiling . Is this another illogical straw man argument ? Maybe . Obviously , the Department of Justice disagrees , which is why it has brought this criminal prosecution . According to the indictment , from at least as early as 2004 , the Drug Enforcement Administration , the Food and Drug Administration , and members of Congress put FedEx on notice that illegal Internet pharmacies were using its shipping services to distribute controlled substances and prescription drugs in violation of the Controlled Substances Act , the Food , Drug , and Cosmetic Act , and numerous state laws . The indictment alleges that as early as 2004 , FedEx knew that it was delivering drugs to dealers and addicts . FedEx 's couriers in Kentucky , Tennessee , and Virginia expressed safety concerns that were circulated to FedEx senior management . The DOJ is making the argument that even though FedEx carries and delivers whatever is handed to it by the public , FedEx knew or should have known in specific instances that it was involving itself in suspicious drug activity . It raises a larger question , though : Why do we prosecute inanimate objects that we ca n't even incarcerate ? The answer is the same reason that the drug dealers deal drugs , and drug smugglers smuggle them : Money . Power . The government in these cases gets to impose its will and policy upon large corporations -- in this case , it would be to force FedEx to help law enforcement in policing shady pharmaceutical transportation . The government also gets to extract gargantuan sums of money from corporations in `` deferred prosecution agreements . '' The reason you do n't see a lot of corporate trials is because most companies prefer to enter into such agreements ; for a company , a public prosecution alone would be tantamount to a death sentence , whether or not it 's found guilty . Still , every defense attorney would love to offer the option to his or her human clients of avoiding felony conviction and a potential life sentence -- by agreeing to pay some fines . Do n't get me wrong : I 'm all about prosecuting the black market , especially if that means prosecuting the guys who send us those spam emails to our work accounts with `` V1AGRA '' in the subject line , for our co-workers to see while we go to the bathroom . I want those guys locked up for sure . I 'm just not sure that FedEx has anything to do with the kingpins of the `` FR33 CYALIS '' email campaign . The DOJ 's underlying intentions are noble enough -- this is an attack on the supply line of the illegal drug market by attacking the actual supply chain . It makes good strategic sense . It might seem like good financial sense in the short run , with the millions in fines extracted from corporations , but that money has to come from somewhere . It 's just a matter of time before that trickles down to job cuts and less leg room on our flights . It probably does n't make good legal sense either . Yes , we have been treating corporations as fictional `` persons '' for centuries in some ways -- but it 's silly to treat them as persons in all ways . FedEx has a strong argument for dismissal in this case , but even if not , it wo n't be swapping its logo orange for prison orange anytime soon . --LRB- CNN -RRB- This is the end . Beautiful friend , the end . For the 1960s , the end arrived with -- depending on your ideals and your tribe -- either the Rolling Stones ' Altamont fiasco in December 1969 , the Kent State shootings in May 1970 or Richard Nixon 's 1972 re-election . For `` Mad Men , '' the `` end of an era , '' as its slogan has it , begins Sunday . Over the past eight years , the show about a 1960s advertising agency and its collision with changing times has become part of the national fabric , if never a huge ratings hit . Stores have created fashion lines inspired by the show ; there have been `` Mad Men '' cocktails and `` Mad Men '' museum exhibits and even `` Mad Men '' presidential references . Don Draper , the creative director played by Jon Hamm , has become a symbol of the times -- his and , sometimes , ours . Its subjects have taken the show to heart . In March , a `` Mad Men '' bench was unveiled in front of New York 's Time & Life Building , where the fictional firm of Sterling Cooper & Partners has its headquarters . The end of a TV series brings with it some risk . `` The Sopranos , '' `` Mad Men '' creator Matthew Weiner 's former employer , divided fans with its famous cut-to-black finale . On the other hand , `` Mad Men 's '' former AMC stablemate , `` Breaking Bad , '' was saluted for an almost perfect landing . Speaking of landings : The last season -- technically , the first half of season 7 -- ended with the moon landing in July 1969 . Though Weiner and his cast have been typically tight-lipped -- Weiner even hid the finale from his cast at first -- it 's reasonable to assume the new season will pick up soon afterward . What 's going to happen ? Here are some educated guesses . With the '60s screaming towards their conclusion , `` Mad Men '' probably wo n't jump ahead much . The latter half of 1969 included the Manson murders , the Woodstock festival , a New York mayoral campaign and the Vietnam War moratorium demonstrations -- plenty of fodder for the characters to interact with , if only tangentially . Who knows ? The show might even mention the Miracle Mets . It would be a nice way to acknowledge the agency 's late Lane Pryce . Of course , Weiner might have a different idea ; he 's from Baltimore . `` Mad Men '' is generally a show about disintegration , reflective of the '60s themselves . The old orders are falling apart : white-shoe WASP firms like Sterling Cooper giving way to the ethnic pace-setters such as Doyle Dane Bernbach ; grimy New York replaced by sunny Los Angeles ; the `` Good War '' generation butting heads with the `` Make Love , Not War '' cohort ; vacuum tubes and ledger books being displaced by a sleek , solid-state IBM world . It 's all an ad agency can do to keep up . Last season saw plenty of intraoffice turmoil , thanks to the ill-fitting merger between Sterling Cooper and former rival Cutler Gleason and Chaough . Though the agency survived , it 's now without Bert Cooper -LRB- Robert Morse -RRB- and under the ownership of -LRB- real-life -RRB- Madison Avenue titan McCann Erickson . That 's not a recipe for long-term survival , and expect a number of longtime characters -- Ken Cosgrove -LRB- Aaron Staton -RRB- , Harry Crane -LRB- Rich Sommer -RRB- and perhaps even Joan Harris -LRB- Christina Hendricks -RRB- -- to look for an exit . Roger Sterling -- the wisecracking executive played by John Slattery -- might find an exit as well , but not one he 's anticipating . He 's suffered two heart attacks . He drinks to excess . He 's never grown up . Bet on a sudden and shocking departure . On the other hand , Peggy Olson 's star has continued to rise -LRB- much like one of the character 's models , advertising wunderkind Mary Wells Lawrence -RRB- . She left Sterling Cooper once ; indeed , she would n't have returned if her new agency had n't merged with her old one . If Olson , played by Elisabeth Moss , bolts the firm , it will probably be to head her own agency -- and possibly get married . That is , if she 's still interested in such an old-fashioned tradition . In recent seasons , Don 's ex-wife , Betty -LRB- January Jones -RRB- , has lost herself amid all the turmoil . She sees herself through the eyes of her spouses , and though husband Henry Francis -LRB- Christopher Stanley -RRB- has been far more supportive than Don , he 's a busy man . And Sally , Don 's daughter -LRB- Kiernan Shipka -RRB- , is proving to be a handful . On the one hand , she 's obviously bright ; on the other , she 's a teenager and starting to rebel . In recent seasons she 's run away and started sneaking cigarettes , and she 's always fighting with her mother . You could see her hitchhiking to Woodstock , or at least dropping out of school . Anything 's possible , but given all that the character has been through -- divorces , affairs , office politics , morose late-night rides with Glen Bishop -- it 's a bit on the nose , is n't it ? Instead , try this : It 's April 1 , 1970 . Richard Nixon is signing legislation banning cigarette ads on radio and television , reminding Don of the day 10 years earlier when he came up with the Lucky Strike campaign that began the series . No fool , he had seen this day coming years before . He 'll fix himself a drink , ponder buying an avocado-colored refrigerator , clean out his ashtray and leave the show the way he arrived : on top of the zeitgeist , unable to accept his past and utterly , inscrutably alone . --LRB- CNN -RRB- Comedian Chris Rock made light of racial disparities in police treatment of whites and blacks with a tongue-in-cheek guide to not being beaten by the police . He encapsulated the frustration and grief caused by a New York grand jury 's decision not to indict a white police officer in the death of a black man with a simple tweet : `` This one was on film . '' Now , he 's stirring things up again with a series of tweets documenting three traffic stops in seven weeks . `` Stopped by the cops again wish me luck , '' he posted early Tuesday , along with a photo showing him behind the wheel of a car with what looks like blue police lights in the background . He posted similar photos in February . Many African-Americans have long bemoaned the phenomenon of being pulled over for no apparent reason , calling it `` driving while black . '' Blacks are about 30 % more likely to be pulled over by police than whites , according to figures reported by the Bureau of Justice Statistics in 2013 . And in amid increased conversation over race and policing after the high-profile deaths last year of Eric Garner in New York and Michael Brown in Ferguson , Missouri , the issue is even more sensitive . Rock has n't commented on the tweets and did n't say how the police stop turned out . He got lots of support on Twitter . `` My heart legit dropped , no kidding , '' one Twitter fan posted . Many praised him for documenting the stops . Some accused him of race-baiting . But one bit of advice in particular lit up social media . Actor Isaiah Washington urged Rock to '' #Adapt '' to avoid racial profiling . `` I sold my $ 90,000.00 Mercedes G500 and bought 3 Prius 's , because I got tired of being pulled over by Police , '' Washington tweeted . Some saw that as a sell-out , saying Rock should n't have to take steps others might not have to as a way to avoid being pulled over . `` Let me guess . . you also make sure your pants are pulled up as well ? . '' Twitter user YeshaCallahan posted . Appearing on CNN , Washington defended the tweet , saying he wanted to `` excite a conversation . '' Years ago , Rock filmed a sketch for his `` Chris Rock '' show on HBO in which he detailed ways to avoid being beaten by police as a black man . Besides obeying the law , he suggested bringing a white friend along for the ride . He did just that last year in a segment of `` Comedians in Cars Getting Coffee '' with Jerry Seinfeld . The two chat as Seinfeld drives an orange Lamborghini . And what happened ? They get pulled over after Seinfeld goes a bit heavy on the gas . `` Here 's the crazy thing , '' Rock tells Seinfeld as the police officer stops the duo . `` If you were n't here , I 'd be scared . '' --LRB- CNN -RRB- Boston native Mark Wahlberg will star in a film about the Boston Marathon bombing and the manhunt that followed , Deadline reported Wednesday . Wahlberg 's film , to be titled `` Patriots ' Day , '' is being produced by CBS Films , which linked to the Deadline article from its website . According to Deadline , Wahlberg is hoping to play Boston Police Commissioner Ed Davis , who retired after the attack in 2013 . The film will be told from Davis ' point of view . The film will feature material researched and shot by CBS Films ' corporate sibling , the CBS News program `` 60 Minutes . '' Wahlberg is also a producer of the film . `` Patriots ' Day '' is the second film related to the Boston bombing to be announced . Fox announced in November that it will be making a film called `` Boston Strong '' about the event . --LRB- CNN -RRB- What do we have for the contestant on `` The Price Is Right '' ? A brand-new car ! Whoops . That was n't supposed to happen . On Thursday 's edition of the popular game show , model Manuela Arbelaez accidentally revealed the correct answer to a guessing game for a new Hyundai Sonata . Host Drew Carey could n't stop laughing . `` Congratulations ! Manuela just gave you a car ! '' he exulted . Arbelaez was mortified , attempting to hide behind the display . But everything turned out OK , she tweeted later . It 's been a busy week for `` The Price Is Right . '' On Wednesday , former host Bob Barker , 91 , showed up to run his old show . --LRB- CNN -RRB- One hundred and forty-seven victims . Many more families affected . Even more broken hopes and dreams . As Kenyans mourned those killed last week in one of the deadliest terrorist attacks in the nation , citizens used social media to share the victims ' stories , hopes and dreams . Using the hashtag # 147notjustanumber -- a reference to the number of people , mostly students , killed at Garissa University College on Thursday -- Kenyans tweeted pictures of the victims in happier times . Kenyan authorities have not released a list of the victims . The posts provided heart-wrenching details on the victims , including one about an elderly man whose dreams died with his son . He had reportedly taken a loan to educate him at the university , where he was killed by Al-Shabaab terrorists . The attack in Kenya killed 142 students , three security officers and two university security personnel , and was the nation 's deadliest since the bombing of the U.S. Embassy in 1998 . Kenyan churches mourned the dead during Easter services Sunday as armed guards protected the congregations . In emotional services nationwide , churchgoers wept as they paid tribute to the victims of the massacre . The gunmen who attacked the university in the predawn hours separated Muslims from Christians and killed the latter . The extremist group has also killed Muslims in recent attacks . The Interior Ministry has identified one of the attackers killed by security forces as the son of a government official . The father of suspect Abdirahim Abdullahi is a chief in Mandera and had reported his son missing , officials said . The Islamist extremist group is based in Somalia , but it has n't confined its terrorism to the nation that shares a border with Kenya . In 2013 , militants attacked Nairobi 's upscale Westgate Mall , killing nearly 70 people . -Marseille , France -LRB- CNN -RRB- Investigators have collected all the main evidence from the site where Germanwings Flight 9525 crashed , a French national police official told CNN on Saturday . Investigators are not expected to return to the crash site , said Capt. Yves Naffrechoux of the High Mountain Gendarmerie . The plane crashed March 24 in rugged terrain of the Alps about 6 miles -LRB- 10 kilometers -RRB- from the town of Seyne-les-Alpes . `` All the police investigators have left the -LRB- Germanwings -RRB- crash site , '' he said . `` There is only a private security company ensuring security around the crash site so that no one can go there . '' The security firm will guard the site until the remaining debris is collected and taken to secure locations for further analysis , if necessary , he said . The flight data recorder , or `` black box , '' was found Thursday by a member of the recovery team . The cockpit voice recorder was found days after the crash . In addition , out of more than 2,000 DNA samples collected from the crash site , lab workers have isolated 150 DNA profiles , said Brice Robin , Marseilles prosecutor . The crash killed all 150 people on board . Brice Robin , Marseilles prosecutor , said authorities have found 470 personnel effects at the site . That number includes 40 cell phones , though all those were badly damaged . Robin cast doubt that any useful information could be retrieved from those phones , given their condition . Authorities say the flight 's co-pilot , Andreas Lubitz , locked the captain out of the cockpit and engineered the plane 's demise . Initial tests on the flight data recorder show that Lubitz purposely used the controls to speed up the plane 's descent , according to the French air accident investigation agency , the BEA . It also has emerged that Lubitz had battled depression years before he took the controls of Flight 9525 and that he had concealed from his employer recent medical leave notes saying he was unfit for work . Calls for crash avoidance technology . CNN 's Margot Haddad reported from Marseille , and Greg Botelho wrote from Atlanta . CNN 's Laura Smith-Spark contributed to this report . --LRB- CNN -RRB- Authorities identified and charged a man Monday in connection with the discovery of human remains in a duffel bag in Cambridge , Massachusetts , over the weekend . Carlos Colina , 32 , was arraigned on charges of assault and battery causing serious bodily injury and improper disposal of a body , the Middlesex District Attorney 's Office said in a statement . `` This was a gruesome discovery , '' said District Attorney Marian Ryan . `` Detectives are continuing to analyze evidence and awaiting information from the Office of the Chief Medical Examiner so that we may determine if additional charges are warranted . '' Police were notified Saturday morning about a suspicious item along a walkway in Cambridge . Officers arrived at the scene , opened a duffel bag and found human remains . After that discovery , police say , a surveillance video led them to an apartment building , where more body parts were discovered in a common area . That location is near the Cambridge Police Department headquarters . The remains at both locations belonged to the same victim , identified Monday as Jonathan Camilien , 26 . Camilien and Colina knew each other , according to authorities . The next scheduled hearing in the case is set for April 14 . CNN 's Andreas Preuss contributed to this report . -Abu Dhabi , United Arab Emirates -LRB- CNN -RRB- Lost luggage after a long flight is a common , frustrating occurrence of modern air travel . And sometimes , airlines lose things that are irreplaceable . American Jennifer Stewart says she was devastated to learn that Etihad Airways lost her most important baggage following a recent trip from Abu Dhabi to New York City : her 2-year-old pet cat , Felix . Stewart said that she and her husband , Joseph Naaman , booked Felix on their Etihad Airways flight from the United Arab Emirates to New York 's John F. Kennedy International Airport on April 1 . Shortly after the plane arrived in New York that evening , Felix went missing somewhere on the grounds of Kennedy Airport , according to Etihad Airways . Felix was able to get loose , Stewart said she believes , because the cat 's plastic carrier was badly damaged at some point either during the flight or the transfer from the airplane to the pickup area . Stewart said a cargo manager called the couple to an office after they landed at Kennedy last week and notified them that their cat 's carrier had been crushed . Photographs taken by Stewart showed a large hole in the top of the cat 's carrier . At least one of the corners of the case appeared partially collapsed . Nearly one week later , Felix remains missing . `` For them to take a cat and ship him like he was cargo , not a live animal , makes me sick , '' Stewart said . `` You trust that people care and are doing the job well , and then this happens . '' A representative for Etihad Airways told CNN that that the loss of pets during air travel is `` extremely rare . '' The airline shipped more than 200 pets last year . Etihad Airways is investigating the incident and is working with ground handlers at the New York airport to help locate the missing cat . The Abu Dhabi-based carrier also said it hired `` third-party specialists '' to help in the hunt for Felix . `` We deeply regret this unfortunate incident and are keeping the owner apprised of the progress of the search , '' Etihad Airways told CNN in a statement . `` We will review our pet handling procedures in the wake of this incident , as the safety and care of pets traveling with Etihad Airways is a top priority . '' Stewart and her husband booked the cat 's flight as part of their job relocation to the United States after living in Abu Dhabi for more than three years . The couple said they spent $ 1,200 to ship Felix on the 14-hour flight . `` You pay all of this money , but for what ? People assume you pay extra to have your pets taken care of , but they 're treated no differently than a free piece of checked luggage , '' Stewart said . It is n't the first time a pet has gone missing at New York 's busiest airport . In August 2011 , a cat escaped from its carrier before an American Airlines flight from New York to San Francisco . That cat was eventually discovered -- alive -- two months later in a customs room at the airport . But the cat later had to be euthanized because of injuries and malnutrition it suffered while lost . This weekend , Stewart enlisted the help of a local nonprofit , which provided a highly trained detection dog , to help track down Felix 's scent . A wildlife biologist who works with the airport has also placed traps to facilitate Felix 's safe return , according to the Port Authority of New York and New Jersey . Officials at Kennedy have offered to assist Etihad Airways as the airline investigates what happened , the Port Authority said . Stewart said the couple will continue to search the airport until they have answers . `` We just want to find Felix . But I just do n't know if we will , '' she said . --LRB- CNN -RRB- For those wondering if we would ever hear from the Bluth family again , the answer would appear to be yes . `` Arrested Development '' executive producer Brian Grazer said the show will return for a fifth season of 17 episodes . The Hollywood mogul was interviewed on Bill Simmons ' podcast recently , and let it drop that fans can expect more of the quirky comedy . Netflix had no comment for CNN when asked to verify his statements . The fourth season was streamed exclusively on Netflix in 2013 , after Fox canceled the show several years before . Despite critical acclaim , the series never had big ratings , but has a devoted fan base , who often quote from the show . It was not yet known if the full cast , including Jason Bateman , Michael Cera and Will Arnett , will return for the season . --LRB- CNN -RRB- Easter is unique on the Christian calendar , a major point in the cycle of the religious year , and one that has always been able to resist the commercialization and culture warring that surrounds Christmas . That 's in part because Easter is genuinely about how religious impulses , and patterns , can operate in ways that affect our lives . Nevertheless , I 'm often surprised by how little people , even those supposedly within the Christian tradition , actually know about what is called Holy Week and its culmination on Easter Sunday . At a time when our culture is roiled by questions of identity and ethics -LRB- and tolerance -RRB- that have profound religious implications , it 's worth pausing to explore this crucial holiday -- and the awareness of the human condition , in all its sadness and glory , that it engenders . After all , Holy Week calls mostly to those who incline their minds and hearts in its direction with seriousness of intent . Still , the fuss must puzzle those looking on , wondering what it all means . Why do Christians make so much of this springtime week , and make so much of Easter weekend ? There is a phrase that many never come across , even among Christians : Easter Triduum . This refers to the three days of Easter that begin with Good Friday , proceed through Holy Saturday , and conclude with Easter Sunday . It 's definitely a progression , although the word itself -- triduum -- can refer to any three days of prayer . Easter Triduum has a kind of major prologue in Maundy Thursday , the day when , by tradition , Jesus celebrated the Last Supper with his disciples in the upper room in Jerusalem on the night before he was crucified . The idea of Holy Communion begins with this meal , which was a Passover meal . Jesus , of course , was Jewish , as were all his disciples . He was never trying to erase Judaism and found a new religion . His work involved modifying and extending Judaism in fresh ways . On Maundy Thursday , Christians sometimes practice the washing of feet , recalling that Jesus washed the very dusty feet of his disciples at the Last Supper as a way of demonstrating profound humility -- showing that he was himself a servant -- and modeling a kind of ideal behavior . Good Friday is n't , in fact , so good . It 's the day of the crucifixion , when Jesus was scourged and beaten , forced to carry his cross to Golgotha , the `` place of the skull , '' and nailed to the cross itself for what must have been an agonizing death . The actual scene of the Crucifixion varies from gospel to gospel , as do his last words , assembled into the so-called `` seven last words '' of Jesus by adding up fragments from different gospels . Some of these words are quotations , as when Jesus asked God why he has abandoned him : This is a quote from the 22nd Psalm , which opens : `` My God , my God , why hast thou forsaken me ? '' Good Friday is a day of death , sacrifice , displacement , fear . Holy Saturday is probably the least understood day of the Easter Triduum . It 's a passageway between the darkness of the crucifixion and the bright hope of Easter . This day occupies an anxious space in human experience , when the certain knowledge of something dreadful is n't quite erased -- ca n't be erased -- simply by hope . It 's a day of depression , a day of suspension . Then comes Easter , with the aura of the resurrection . I 'm always moved by the deep symbolism of this mythic moment , when the body of Christ becomes what is called a `` glorified body . '' This was not , as I 've said elsewhere , the Great Resuscitation , although that 's part of it , too . Resurrection implies a total transformation , something beyond the physical realm . It 's very important that almost nobody who encounters Jesus after the resurrection can really recognize him , know him , or understand him as the same person who was with them before he was crucified . Easter embraces the great mystery of resurrection , with its promise of transformation -- a shift from one form to another , and a change that moves well beyond any literal understanding . The three days of Easter , the Triduum , occur only once a year on the calendar . But the really interesting thing is that we all experience the pattern of the three days again and again . We find ourselves emptied out in small ways , nailed to our own trees in life , embarrassed or broken by life . It was the Buddha who famously observed that life is suffering . Good Friday embodies the Christian version of that truth . Jesus suffered in the way all of us must suffer . We must all die , perhaps less ignominiously but just as certainly . Our friends and families must die . We all experience illness , loss , sadness , a loss of confidence , darkness . This is simply part of the human experience . We dive again and again into Holy Saturday , too -- a period of transition , when the bleakness of suffering is perhaps slightly behind us but nothing restorative seems in view . We know well this in-between time ; it 's an anxious passage , with only a glimmer on the horizon of potential hope . And we 've all been resurrected , again and again , perhaps in tiny ways . This is the joy of Easter , and it 's not something reserved for one day on the calendar . It 's there whenever we experience what T.S. Eliot once called the `` timeless moment , '' which can only occur -- paradoxically -- in time itself . It 's a mystical point where timelessness intersects with time . I suspect we all experience the Triduum frequently , sometimes more than once in a single day . But the ritual enactment of these three days of the Easter season reminds all of those who practice Christianity -- and perhaps those who do n't -- that we should expect to move through darkness into light . It 's a pattern that describes a kind of spiritual progression . It 's good cause for celebration , too : and one that wo n't easily be co-opted by secular culture . --LRB- CNN -RRB- `` Sell all that you own and distribute the money to the poor , and you will have treasure in heaven ; then come , follow me , '' Jesus tells the rich man in one of his best-known parables . It was a mantra he invoked repeatedly : the poor were blessed , and it was easier for a camel to pass through the eye of a needle than it was for the well-to-do to enter paradise . Meanwhile , Jesus told his Twelve Apostles to leave their day jobs and follow him on an itinerant mission with few prospects of success and no visible means of support . So how did this wandering band of first-century evangelists support themselves ? Clearly , money was a concern , and not just as an impediment to salvation . In the New Testament , money gets 37 mentions , while `` gold '' gets 38 citations , `` silver '' merits 20 , and `` copper '' four . `` Coin '' comes up eight times , and `` purse '' and `` denarii '' -- the Roman currency -- get half a dozen mentions each for a total of 119 currency referrals . Perhaps the most relevant reference is also one of the most charged passages in the New Testament : . As the Gospel of John tells it , six days before Passover , Jesus was in Bethany at the house of his friend Lazarus , whom he had raised from the dead . A woman named Mary takes a jar of costly perfumed oil and anoints the feet of the reclining Jesus . She dries his feet with her hair , an irresistible image for artists and dramatists . Judas Iscariot objected to the act . `` Why was this perfume not sold for three hundred denarii and the money given to the poor ? '' Judas asks . Though 300 denarii was the annual wage of a laborer , Jesus told Judas to leave her alone , and foreshadowing his fate , said the anointing would be useful for his burial , and besides , `` you always have the poor with you '' -- but Jesus would not always be there . What that passage makes clear is that the Jesus community had a common purse because they needed money to survive . So how much ? `` I imagine the ministry functioned at a subsistence level , '' Rabbi Joshua Garroway , a professor of Early Christianity and the Second Commonwealth at Hebrew Union College in Los Angeles . Jesus and his disciples walked , wore what they had , slept outside or in stayed in friends ' homes . They ate what they caught or what others shared . `` I venture to guess that begging and hospitality will have sufficed to meet the basic needs of Jesus and the companions with whom he traveled , '' Garroway said . Garroway said that it was possible , even likely , that Jesus and his followers received donations from supporters , and possibly substantial ones from some of the rich people who were drawn to his ministry despite -- or perhaps because of -- his preaching on the perils of wealth . The Gospel of Luke gives us a glimpse of how Jesus ' ministry functioned on a practical level : . `` Soon afterwards he went on through cities and villages , proclaiming and bringing the good news of the kingdom of God . The twelve were with him , as well as some women who had been cured of evil spirits and infirmities : Mary , called Magdalene , from whom seven demons had gone out , and Joanna , the wife of Herod 's steward Chuza , and Susanna , and many others , who provided for them out of their resources . '' So , according to Luke , women whom Jesus had healed in turn provided for him out of their `` resources , '' with Mary Magdalene and Joanna capturing our attention -- one by virtue of her husband , and the other , by her stature in the story of Jesus . Joanna was an upper-class woman married to a man who was intelligent and capable enough to manage the complicated household of Herod Antipas , the son of Herod the Great , the violent and ambitious head of Judea . As part of this volatile but powerful household , Joanna would be uniquely positioned to help Jesus with her resources , being both wealthy and having palace connections . She attends to him during his life , and , the Gospels tell us , after his death , as one of the trio of women who go to his tomb and find it empty . With her on that morning is Mary Magdalene , also identified as -- among other things -- a financial supporter of Jesus . Mary likely came from the prosperous town of Magdala , on the Sea of Galilee . As home to a thriving fishing industry , as well as dye and textile works , Mary could well have come from an affluent family -- or have been a successful business woman herself . Mary Magdalene was free to travel the country with Jesus and his disciples , so was unlikely to have a husband and children waiting for her at home , and in `` Finding Jesus '' we examine the Gnostic gospel of Mary Magdalene and explore the argument that Jesus was , in fact , her husband . She may have simply been an independent woman with her own resources who found a compelling message , and messenger . Not only was Mary Magdalene one of Jesus ' most devoted followers , who stuck with him all the way from Galilee to Jerusalem , from the ministry to the cross and the tomb , but also she provided for him from her own means , said Mark Goodacre , a professor of New Testament and Christian Origins at Duke University . When the Gospels speak of her `` ministering '' to Jesus , they are explaining that she was one of the key figures in Jesus ' everyday mission , Goodacre continues . Along with other women like Joanna and Susanna , she was one of those who made his mission viable . Along with these women , men like Joseph of Arimathea and Nicodemus , both men of stature and wealth , may have chipped in to help fund Jesus ' ministry . The Gospels reveal that both these men were rich , and supported Jesus -- indeed , it was Joseph who removed Jesus from the cross on Good Friday , anointing his body with the help of Nicodemus , and placing him in the tomb that Joseph had reserved for himself . After the resurrection on that first Easter Sunday , the movement Jesus started grew exponentially , and the church 's relationship to money grew more complicated as the needs became greater . Michael McKinley is co-author , with David Gibson , of `` Finding Jesus : Faith . Fact . Forgery. : Six Holy Objects That Tell the Remarkable Story of the Gospels . '' --LRB- CNN -RRB- The nation 's top stories will be unfolding Tuesday in courthouses and political arenas across the country . Massachusetts is hosting two of the highest-profile court trials in recent memory -- those of former New England Patriot Aaron Hernandez and Boston bombing suspect Dzhokhar Tsarnaev . Both lengthy trials are coming to a close . In Louisville , Kentucky , Sen. Rand Paul made the not-so-surprising announcement that he will run for president , while in Chicago , voters will head to the polls in a very surprising runoff between Mayor Rahm Emanuel and challenger Jesus `` Chuy '' Garcia . And in Ferguson , Missouri , the shadow of Michael Brown and the protests over his shooting by Officer Darren Wilson will loom large over the city 's elections . Here 's a breakdown of what to expect today and how we got here : . Tsarnaev , who 's accused of detonating a bomb at the 2013 Boston Marathon along with his now-deceased brother , faces the stiffest of penalties -- life in prison or the death penalty -- if he 's found guilty on any of 17 capital counts against him , including setting off weapons of mass destruction at a public event as an act of terrorism . The 13th juror : What defense ? On Monday , survivors and victims ' families wept and Tsarnaev fidgeted at a defense table as jurors heard a prosecutor allege that the 21-year-old `` brought terrorism into the backyards and main streets . '' The jury on Tuesday morning began what is expected to be a lengthy deliberation process on 30 total charges , before the so-called penalty phase , should he be found guilty on any counts . It took prosecutors months to present 131 witnesses to support their claim that Hernandez killed semi-pro player Odin Lloyd , yet on Monday , Hernandez 's defense team wrapped up its witnesses in less than a day . Closing arguments are scheduled for Tuesday , and the jury will begin deliberations soon thereafter . Jurors in Fall River , Massachusetts , will be asked to decide if Hernandez is culpable in the shooting death of Lloyd , whose body was found in a Massachusetts industrial park in the summer of 2013 . Much of the evidence against Hernandez is circumstantial , and among the facts the jury will be asked to take into consideration are New England Patriots owner Robert Kraft 's testimony , the testimony of Hernandez 's fiancee , some grainy footage from Hernandez 's home security system and a footprint left by a Nike Air Jordan shoe . Hernandez known for swagger , even in court . OK , sure , no one was floored when the Kentucky senator announced his bid for the Oval Office , but of course it was news when he made it official Tuesday . Paul is expected to hit the campaign trail visiting the all-important early voters in New Hampshire , South Carolina , Iowa and Nevada . The physician rode a wave of tea party popularity into the Senate in 2010 , where he carefully built a brand of mainstream libertarianism , and he is banking on a coalition of younger voters and traditional Republicans to usher him into the White House . Paul and Sen. Ted Cruz are the only declared candidates for the GOP nomination , though the field will certainly grow and could include the likes of Florida 's Jeb Bush , New Jersey 's Chris Christie , Wisconsin 's Scott Walker , South Carolina 's Lindsey Graham and Florida 's Marco Rubio . Would Rand be here without Ron ? It 's the Windy City 's first runoff for a citywide office , and it 's being billed as a battle for the `` future of Chicago . '' In one corner , you have Emanuel , President Barack Obama 's notoriously hard-charging former chief of staff , and in the other , you have Jesus `` Chuy '' Garcia , a county commissioner who has come to embody populist and liberal Democrats ' frustrations with the Chicago incumbent . After Emanuel failed to snare half the vote in February 's general election , he will go head-to-head with Garcia . The timing is interesting , too , as Easter , Passover and spring break appear to have spurred more than 142,000 early votes , up from about 90,000 before the first round of voting in February . Following Michael Brown 's death , the national spotlight shone on Ferguson , particularly how the city 's predominantly black population is woefully underrepresented in its police force and City Council . Yet with all the hubbub about the face of civic leadership , only four in 10 city residents hit the polls in November to cast ballots . Residents speak out ahead of vote . Tuesday 's election will bring change , no matter how the ballots are cast : Two black men are running for one of the open seats , and the current lone black council member is n't up for re-election . In another ward , two black women and two white men are vying for an open seat . And a white protester is running for a third post . -Cedar Falls , Iowa -LRB- CNN -RRB- As aides politely tried to rush Ted Cruz from an event in Cedar Falls to one in Cedar Rapids , Iowa , on Thursday , the presidential candidate continued shaking hands with anyone who wanted to meet him . Finally , after the selfies and conversations started to die down , his aides managed to move him closer to the door when a tall , burly man stopped him . `` Senator , '' he said , `` can I pray with you real quick ? '' `` Yeah , '' Cruz said , as he clasped the man 's upper arm and the two bowed their heads . It was one of the many moments when Cruz connected with voters on a religious level last week , as the senator from Texas hit the trail in Iowa for the first time as a presidential candidate . Being the only official contender in the race , Cruz drew large crowds during his two-day swing across the state . He 's counting on Iowa , known for its vocal and active evangelical base , to propel him forward in what 's expected to be a tough competition among a crowded field of GOP candidates . Cruz , himself , displays a pastoral swagger when he is speaking on stage and working a room . The senator regularly avoids using a podium , instead favoring pacing the stage with a wireless microphone , a scene reminiscent of a Sunday morning sermon . When he meets with people after events , he embraces each one 's hand with both of his , softens his usually theatric tone and looks people square in the eye -- a familiar interaction between churchgoing Christians and their pastors . The past two winners of Iowa 's caucuses rose to victory with support from the Christian right , and Cruz , who announced his bid last month at the well-known Baptist school Liberty University , is aiming to energize that same base and claim the coveted state as his prize . Evangelicals make up a large segment of Iowa 's Republican voter bloc . According to a Des Moines Register/Bloomberg Politics poll from January , 44 % of likely 2016 Republican caucus-goers said they were born-again or evangelical Christians . Cruz has built a brand as a stalwart conservative willing to buck GOP leadership on fiscal issues , but he showed in Iowa last week that he 's also eager to champion social issues at a time when many Republicans are anxious to avoid them . He was one of the loudest defenders of the religious freedom law in Indiana , which came under fire last week for what critics called paving a path to discrimination against gays and lesbians . He described the outrage over the laws as `` shameful '' and an `` assault '' on First Amendment rights . `` There are a lot of people here in Iowa and across the country whose hearts are breaking , watching what has happened in the last two weeks , '' Cruz said Friday night at an event in Des Moines . `` We have seen a grossly unfair vilification of religious liberty . '' RELATED : Republican 2016 hopefuls back Indiana 's ` religious freedom ' law . He 's more than comfortable talking about his own faith and telling the story of how his father became a Christian and a pastor . Rafael Cruz , who 's become a celebrity among Christian conservatives , will frequently visit Iowa over the next year , Cruz told voters . And Cruz 's Iowa director , Bryan English , is a former pastor . Cruz 's first television ads are appearing this weekend during programs on Fox News and NBC that are pegged to Easter Sunday . In the ad , Cruz talks about the impact of the `` transformative love of Jesus Christ '' on his life . While neither Mike Huckabee , who won Iowa in 2008 , nor Rick Santorum , who won in 2012 , went on to win the nomination , their successes helped launch them into high-profile battles with the then-front-runners . And with both of them likely running again in 2016 , the competition will be stiff . That 's why , for Cruz , courting evangelicals is only a component of a three-pronged strategy to win the nomination that also includes dominating the tea party faction and competing for the libertarian base . His stump speech hits on elements that appeal to each faction . He received standing ovations last week for calling to abolish the IRS , and , in a knock against the National Security Agency , he frequently tells audiences to leave their cell phones on so President Obama `` can hear every word I have to say . '' Cruz argued Thursday that the Republican Party needs to bridge the gap between what he described as the Ron Paul-Rand Paul faction of the party -- young libertarian-minded voters -- and the Santorum base -- evangelicals . The two blocs , he said , are `` not necessarily the best of chums . '' `` If we 're going to win , we 've got to bring that coalition together , '' he said in Cedar Falls . `` And I think we can do that . '' Cruz frequently says he wants to see a return of the evangelical vote to 2004 levels , when more than six in 10 evangelicals voted in the presidential election , a higher than normal turnout for the demographic . That number has waned slightly since 2004 -- but it 's not too far off from the 56 % of the overall population that voted in 2012 . Still , his campaign believes that if it can tap into the group of evangelicals who 've been staying home and get the demographic as a whole to overperform , then that could mean the difference of millions more at the polls . `` If you look at available places for the party to expand the vote , it does n't exist in the middle , it exists in the evangelical vote , '' said Rick Tyler , a top Cruz adviser . `` It is n't a pond , it 's an unfished ocean of available voters who are conservative . '' Russell Moore , president of the Ethics & Religious Liberty Commission of the Southern Baptist Convention , said he expects to see record turnout among evangelicals in 2016 no matter who the nominee is or what that person says . Moore points to hot-button topics like religious freedom issues in the U.S. , as well as increased attention to the killing of minority Christians in the Middle East and rising anti-Semitism . `` I do n't think a candidate is going to be able to get very far simply by using evangelical lingo or by pointing to his or her personal faith , '' Moore said . `` I think a candidate is going to have to explain how he or she would protect religious liberty and would appoint justices and judges who will maintain the common good . '' Later in April , voters in Iowa will see the bulk of the GOP field tackle these issues when they take the stage at an event hosted by the Iowa Faith and Freedom Coalition . While the past two winners of the Iowa caucuses -- Santorum and Huckabee -- are likely running for president again , Steve Scheffler , president of the group , argued that the field is wide open in terms of who 's going to win favor among evangelicals . Jeb Bush , while not popular among conservative activists , was known for his staunch anti-abortion record as Florida governor and touts his Catholic faith as a big force behind his policy views . Scott Walker is the son of a pastor . Ben Carson , the former neurosurgeon , rose to fame in conservative circles after criticizing the Obama administration at a national prayer breakfast . And other likely candidates -- from Marco Rubio to Rick Perry to Rand Paul -- have made serious efforts to court the religious right . `` It 's up for grabs . It 's a clean slate regardless of if you 've run before , '' Scheffler said . `` Naturally those two -LRB- Huckabee and Santorum -RRB- have the name recognition and database of people who supported them in the past , but by and large voters are going to say , ` Let me take a good look at all of these candidates . ' '' --LRB- CNN -RRB- Just kill it already . That was the sentiment of many `` Vampire Diaries '' fans on Tuesday after star Nina Dobrev announced she will be leaving the CW show at the end of this season . `` I always knew I wanted Elena 's story to be a six season adventure , and within those six years I got the journey of a lifetime , '' she posted on her social media accounts after a `` goodbye party '' at Lake Lanier outside Atlanta , where the show is filmed . `` I was a human , a vampire , a doppelganger , a crazy immortal , a doppelganger pretending to be human , a human pretending to be a doppelganger . I got kidnapped , killed , resurrected , tortured , cursed , body-snatched , was dead and undead , and there 's still so much more to come before the season finale in May . '' And while that may be true , fans were feeling a little jilted . Many chastised the show 's producers , some even Dobrev herself , for allowing the show to go on to a seventh season this fall after she departs . Many were upset that Dobrev 's departure could sink hopes of seeing a satisfying denouement to the relationship between Dobrev 's character , Elena Gilbert , and love interest vampire Damon Salvatore . Fans called the couple `` Delena . '' `` I feel angry , sad , depressed , numb but most of all I feel like part of me died along with Nina leaving TVD . Nothing will be the same again , '' Twitter user iDamonAndElena posted . Producer Julie Plec issued a statement supporting Dobrev 's decision . `` Nina is excited to spread her wings , get some rest , travel the world and also take it by storm , and we support her a thousand-fold , '' she said in the statement , according to media accounts . `` We will miss Nina and the four hundred characters she played , but we look forward to the insane and exciting challenge of continuing to tell stories of our Salvatore Brothers and our much-loved and gifted ensemble . '' No thanks , some fans said . Dobrev seemed to anticipate the pain , urging fans to hold on through the show 's finale next month . `` If you think you know what 's coming , you do n't , '' she said . -Beijing -LRB- CNN -RRB- China 's state prosecutors on Friday formally charged the country 's former security czar with accepting bribes , making him the highest-ranking Chinese Communist Party official ever to face corruption charges . Zhou Yongkang , 72 , was also charged with abuse of power and leaking state secrets , the Supreme People 's Procuratorate , the highest prosecution authority in China , said . As a member of the ruling Communist Party 's Politburo Standing Committee -- China 's top decision-making body -- Zhou was one of nine men who effectively ruled the country of more than 1.3 billion people . He retired in 2012 . At the height of his power , Zhou controlled police forces , spy agencies , court systems as well as prosecution offices across China -- and was n't shy in deploying his vast assets to crush dissent and unrest in the name of `` preserving social stability . '' Now , prosecutors have accused Zhou of `` taking advantage of his posts to seek benefits for others and illegally accepting huge amounts of money '' during his long political career . His alleged actions have caused heavy losses to public assets and greatly harmed national interests , they added . Zhou was notified of his legal rights during the investigation and his lawyer 's views were heard , according to a statement by the prosecutors . His case will be tried in Tianjin , a city near the Chinese capital , Beijing . The president of China 's supreme court recently told reporters there would be `` open '' trials for accused former leaders like Zhou . However , the charge of leaking state secrets may allow authorities to shield certain legal proceedings from public view in Zhou 's case . Zhou has not been seen in public since he attended an anniversary event at his alma mater in October 2013 . He was expelled from the Communist Party and arrested last December . State media have painted an intricate web of officials , cronies and tycoons -- some with alleged mafia connections -- orbiting around Zhou before the crumbling of his power structure last summer . Zhou and his family members were said to have accumulated enormous wealth , in a blatant exchange between money and power . He was also found to have affairs with multiple women and allegedly traded power for sex , state-run Xinhua news agency reported last year . Analysts have viewed his shocking downfall as a watershed moment in the secretive world of Chinese politics , now ruled by President Xi Jinping . Xi has been spearheading a massive anti-corruption campaign , targeting both `` tigers '' and `` flies '' -- high-ranking , and low-level , officials . Zhou is by far the biggest tiger caught in Xi 's dragnet to date . `` The important thing here is that Xi has proven he 's powerful enough to break this taboo of never incriminating former Politburo Standing Committee members , '' longtime political analyst Willy Lam , a professor at the Chinese University of Hong Kong , said last year , when the government revealed its formal investigation into Zhou . Many observers also note Zhou 's patronage of Bo Xilai , a former Communist leader sentenced to life in prison for corruption in 2013 . Bo 's spectacular downfall the year before -- complete with tales of murder , bribery and betrayal -- attracted global attention . State media have cited his subsequent conviction as a prime example of Xi 's resolve to clean up the party . The former Chongqing Communist Party chief 's supporters , however , have long called him a political victim -- the former high-flying politician was once considered Xi 's main challenger for the top spot of Chinese leadership . Political watchers see similarities between the Bo and Zhou cases . `` The people being investigated for corruption are on the losing side of factional struggles , '' said Lam , who has predicted a suspended death sentence for Zhou . -New Delhi , India -LRB- CNN -RRB- Police have arrested four employees of a popular Indian ethnic-wear chain after a minister spotted a security camera overlooking the changing room of one of its stores . Federal education minister Smriti Irani was visiting a FabIndia outlet in the tourist resort state of Goa on Friday when she discovered a surveillance camera pointed at the changing room , police said . Four employees of the store have been arrested , but its manager -- herself a woman -- was still at large Saturday , said Goa police superintendent Kartik Kashyap . State authorities launched their investigation right after Irani levied her accusation . They found an overhead camera that the minister had spotted and determined that it was indeed able to take photos of customers using the store 's changing room , according to Kashyap . After the incident , authorities sealed off the store and summoned six top officials from FabIndia , he said . The arrested staff have been charged with voyeurism and breach of privacy , according to the police . If convicted , they could spend up to three years in jail , Kashyap said . Officials from FabIndia -- which sells ethnic garments , fabrics and other products -- are heading to Goa to work with investigators , according to the company . `` FabIndia is deeply concerned and shocked at this allegation , '' the company said in a statement . `` We are in the process of investigating this internally and will be cooperating fully with the police . '' --LRB- CNN -RRB- Nine British citizens were arrested in Turkey on Wednesday , suspected of trying to cross illegally into Syria , the Turkish military said on its website . The group included four children -- the oldest being 10 or 11 , with the youngest born in 2013 , a Turkish official told CNN on condition of anonymity . The nine were arrested at the Turkey-Syria border , the Turkish military said . It did n't say why the group allegedly was trying to get into Syria , which has been torn by a roughly four-year war between Syrian government forces and Islamist extremist groups and other rebels . Among the war 's combatants is ISIS , which has taken over parts of Syria and Iraq for what it claims is its Islamic caliphate , and which is known to have been recruiting Westerners . Accompanying the children were three men and two women ; all nine had British passports , the Turkish official said . UK police charge man with terror offenses after Turkey trip . The British Foreign Office said Wednesday that it is aware of reports of the arrests and that it is seeking information about the incident from Turkish authorities . CNN 's Gul Tuysuz reported from Istanbul , and Elaine Ly reported from London . CNN 's Jason Hanna contributed to this report . --LRB- CNN -RRB- Kayahan , one of Turkey 's best-loved singers and songwriters , died of cancer Friday at the age of 66 . He had performed most recently in Istanbul on Valentine 's Day . The performer , who was also an accomplished guitarist , was first diagnosed with cancer in 1990 , the year he competed in the Eurovision Song Contest , and the year before he released the album that ignited his career . The cancer returned in 2005 and then again in 2014 , Turkey 's semiofficial Anadolu Agency reported . He died Friday in a hospital in Istanbul , five days after his 66th birthday . `` We are in grief over losing Kayahan , who contributed to Turkish music with countless compositions and marked a generation with his songs , '' Prime Minister Ahmet Davutoglu tweeted . The singer , whose full name was Kayahan Acar , was born in Izmir province , in western Turkey on March 29 , 1949 . He grew up in Ankara , Turkey 's capital , before moving to Istanbul . In 1990 , he competed in the Eurovision Song Contest , finishing 17th . The following year he released an album titled `` I Made a Vow , '' which catapulted him to prominence . Though he recorded nearly 20 albums , that one would remain his most popular . His final album was released in 2007 . Other artists recorded his material throughout his career . Videos available online show a vibrant performer with a thick shock of dark hair as he accompanies himself on guitar and croons in a clear tenor . Kayahan was best known for his love songs . More recent videos show a frailer performer , seated and without a guitar , but still clearly glorying in the joy of singing a song . --LRB- CNN -RRB- A nuclear submarine being repaired at a Russian shipyard has caught on fire , according to a law enforcement source speaking to Russia 's state-run news agency ITAR-Tass . `` The submarine is in a dry dock , '' Tass reports , citing the source , and there is no ammunition on board . `` The rubber insulation between the submarine 's light and pressure hull is on fire , '' Tass reported . Russia 's RIA Novosti news agency says insulation caught on fire as welding work was being done on the submarine . Tass reported that the fire began on a sub in the Zvyozdochka shipyard in northwestern Russia . Zvyozdochka spokesman Yevgeny Gladyshev told the news agency that the sub had been undergoing repairs since November 2013 . `` Nuclear fuel from the sub 's reactor has been unloaded , '' he reportedly said . `` There are no armaments or chemically active , dangerous substances , fissionable materials on it , '' Gladyshev said to Tass . `` The enterprise 's personnel left the premises when the submarine caught fire , no one has been injured . The fire presents no threat to people and the shipyard . '' --LRB- CNN -RRB- Four workers died in a massive oil rig fire that raged for hours off the coast of Mexico Wednesday . Mexican state oil company Pemex said 45 workers were injured in the blaze , which began early Wednesday morning . Two of them are in serious condition , the company said . Authorities evacuated about 300 people from the Abkatun Permanente platform after the fire started , Pemex said . At least 10 boats worked to battle the blaze for hours . The fire had been extinguished by Wednesday night , Pemex said in a Twitter post . The company denied rumors that the platform had collapsed and said there was no oil spill as a result of the fire . The state oil company has n't said what caused the fire on the platform , which is located in the Gulf of Mexico 's Campeche Sound . The fire began in the platform 's dehydration and pumping area , Pemex said . CNN 's Mayra Cuevas contributed to this report . --LRB- CNN -RRB- A French-language global television network regained control of one of its 11 channels Thursday after a cyberattack a day earlier crippled its broadcasts and social media accounts . Television network TV5Monde was gradually regaining control of its channels and social media outlets after suffering what the network 's director called an `` extremely powerful cyberattack . '' In addition to its 11 channels , TV5Monde lost control of its social media outlets and its websites , director Yves Bigot said in a video message posted later on Facebook . On a mobile site , which was still active , the network said it was `` hacked by an Islamist group . '' ISIS logos and markings appeared on TV5Monde social media accounts . But there was no immediate claim of responsibility by ISIS or any other group . As day broke Thursday in Europe , the network had regained the use of one of its 11 channels and its Facebook page , Paul Germain , the chain 's editor in chief , told BFMTV , a CNN affiliate in France . However , by late morning , a number of pages on the network 's website had messages saying they were under maintenance . The outage began around 8:45 p.m. Paris time -LRB- 2:45 p.m. ET -RRB- on Wednesday . TV5Monde offers round-the-clock entertainment and news programming that reaches 260 million homes worldwide , according to the Ministry of Culture and Communications . It functions under a partnership among the governments of France , Canada and Switzerland , as well as the Wallonia-Brussels Federation . Other networks that provide content to TV5Monde include CNN affiliates France 2 and France 3 , France 24 and Radio France International . -Kabul , Afghanistan -LRB- CNN -RRB- Three people were killed and five others were wounded Thursday afternoon when a group of armed assailants stormed into the attorney general 's office in Balkh province , northern Afghanistan , according to a press release from the provincial governor 's office . Although most staff members and civilians have been rescued , an exchange of fire between Afghan security forces and the assailants is ongoing , the statement says . Two police officers and a security guard of the provincial attorney general 's office were among the dead . Afghan security forces are cautiously making advances in the fight in order to avoid civilian casualties , according to the press statement . -Boston -LRB- CNN -RRB- Guilty across the board . But will he face death ? After deliberating for 11 1/2 hours , jurors found Dzhokhar Tsarnaev guilty on Wednesday of all 30 counts he faced in the Boston Marathon bombing trial . Seventeen of the 30 counts were capital charges , meaning he is eligible for the death penalty . The trial will next move into a penalty phase , where the jury will hear testimony and arguments from both sides and ultimately be tasked with deciding whether Tsarnaev , 21 , will be executed . A look at all of the charges . Jurors will be asked to weigh aggravating factors such as the heinousness of his crimes against mitigating factors such as his family and mental health history , as well as his relative youth . Tsarnaev was 19 at the time of the bombing . The start date of the penalty phase has not yet been set . Since testimony began March 4 , federal prosecutors have called 92 witnesses , and the defense just four . It seemed a mismatch from the start . `` He was there , '' Tsarnaev 's defense attorney Judy Clarke conceded as the trial opened , but many say the defense strategy always had been to focus on persuading the jury to spare Tsarnaev 's life . Tsarnaev lawyer keeps hated criminals off death row . Clarke tried to convince jurors that her client 's older brother , 26-year-old Tamerlan Tsarnaev , who died in a shootout with police days after the terror attack , was the instigator of the marathon plot . The younger man , Clarke said , was only following his older brother . After the verdict , CNN legal analyst Paul Callan said Clarke now faces an uphill battle . `` Because No. 1 , he -LRB- Tsarnaev -RRB- is almost functioning as an officer of a military organization attacking the United States -- the claim of course that he 's an Islamic radical and that this is almost an army-like attack on civilians . `` And the second thing -- it was so well planned and so callously planned so that civilians would die , so that children would be maimed . And all of this , she has to get around and convince the jury he 's not worthy of the death penalty . `` Boy , she 's climbing the Mount Everest of death penalty cases in this case , '' Callan said about Clarke . Survivors react to the verdict . Ann O'Neill reported from Boston . Dana Ford reported from Atlanta . --LRB- CNN -RRB- A mammoth fire broke out Friday morning in a Kentucky industrial park , sending plumes of thick smoke over the area as authorities worked to contain the damage . The blaze began shortly before 7 a.m. at the General Electric Appliance Park in Louisville , according to Mike Weimer from the city 's emergency management agency . He said that there were no reports of anyone injured or trapped . Video showed both smoke and bright orange flames . Firefighters took up positions around the affected buildings , spraying water from the periphery . Weimer told CNN that authorities did n't know what had caused the fire , which had gone to at least four alarms . According to a GE website , its facility in the Louisville Appliance Park is `` revitalizing manufacturing in the United States . '' The park is large , such that 34 football fields could fit in one of its warehouses in the facility . --LRB- CNN -RRB- Do you remember the talk about plans for Iraqi-led force to try to take back Mosul this spring ? Well , you might want to forget it . Nearly three months after a U.S. official said up to 25,000 Iraqis troops were expected to return to the key northern Iraqi city in April or May , a senior official in President Barack Obama 's administration said Thursday that Washington is `` not putting a timeframe on '' a possible invasion . It `` might be some time from now . Might be soon , '' another senior administration official said . Mosul has long been the big prize in the Iraqi government 's fight -- aided by a U.S.-led military coalition , which has carried out airstrikes for months -- to defeat ISIS . It has also long been a source of embarrassment , considering how it fell after Iraqi troops dropped their weapons , abandoned their posts and ran for their lives when militants arrived last June . The senior administration officials who talked to reporters Thursday stressed the Iraqis and their allies are making progress in their fight against the group that calls itself the Islamic State . In fact , officials insist that ISIS has been degraded substantially thanks to a combination of air power and ground combat . The biggest and most recent example of this came with the recapture a few weeks ago of Tikrit , the hometown of former Iraqi dictator Saddam Hussein that is located some 100 miles -LRB- 160 kilometers -RRB- north of Baghdad . Iraqi forces aided by Iranian-backed Shiite militiamen took that northern city , the same place where ISIS allegedly massacred Iraqi troops last year . Still , Mosul is n't Tikrit . For one thing , it has a lot more people -- about a million , one Obama administration official noted . And it 's more important not only to Iraq , but ISIS , meaning the terrorist group has all the more reason to go all-out to defend it . In some ways , the campaign for Mosul has begun , according to officials . There are no plans for U.S. combat troops involvement in an eventual operation , they say , but airstrikes have already targeted ISIS positions in the area . Just because the area has been softened up some from the air , though , does n't mean a full ground assault is imminent . Calling for `` patience , '' an administration official said that winning Mosul is a complex endeavor . It will `` take a lot of capacity , '' the official said , `` and some time to build . '' --LRB- CNN -RRB- The California Public Utilities Commission on Thursday said it is ordering Pacific Gas & Electric Co. to pay a record $ 1.6 billion penalty for unsafe operation of its gas transmission system , including the pipeline rupture that killed eight people in San Bruno in September 2010 . Most of the penalty amounts to forced spending on improving pipeline safety . Of the $ 1.6 billion , $ 850 million will go to `` gas transmission pipeline safety infrastructure improvements , '' the commission said . Another $ 50 million will go toward `` other remedies to enhance pipeline safety , '' according to the commission . `` PG&E failed to uphold the public 's trust , '' commission President Michael Picker said . `` The CPUC failed to keep vigilant . Lives were lost . Numerous people were injured . Homes were destroyed . We must do everything we can to ensure that nothing like this happens again . '' The company 's chief executive officer said in a written statement that PG&E is working to become the safest energy company in the United States . `` Since the 2010 explosion of our natural gas transmission pipeline in San Bruno , we have worked hard to do the right thing for the victims , their families and the community of San Bruno , '' Tony Earley said . `` We are deeply sorry for this tragic event , and we have dedicated ourselves to re-earning the trust of our customers and the communities we serve . The lessons of this tragic event will not be forgotten . '' On September 9 , 2010 , a section of PG&E pipeline exploded in San Bruno , killing eight people and injuring more than 50 others . The blast destroyed 37 homes . PG&E said it has paid more than $ 500 million in claims to the victims and victims ' families in San Bruno , which is just south of San Francisco . The company also said it has already replaced more than 800 miles of pipe , installed new gas leak technology and implemented nine of 12 recommendations from the National Transportation Safety Board . According to its website , PG&E has 5.4 million electric customers and 4.3 million natural gas customers . The Los Angeles Times reported the previous record penalty was a $ 146 million penalty against Southern California Edison Company in 2008 for falsifying customer and worker safety data . CNN 's Jason Hanna contributed to this report . --LRB- CNN -RRB- In her 40 years living in Rochelle , Illinois , Cathy Olson had never seen a tornado that big . `` I saw the top of the funnel cloud , and it was absolutely massive , '' she said . She watched the hulking gray twister grind past her town Thursday , tearing up its fringes . Farther north , in the rural Illinois hamlet of Fairdale , one person died as a twister shredded homes and ripped trees bare of leaves and most limbs . Only the thickest branches remained standing . It was the only death reported so far in two days of tornado touchdowns . Rochelle was fortunate . But in nearby Kirkland , debris was so thick on the roads , responders searching for trapped residents could not yet assess the damage or injuries , fire officials said . On Thursday , a video surfaced on YouTube of a massive twister barreling across an open field , barely missing farmhouses and barns . Images of the funnel turned up elsewhere on social media . Multiple tornadoes ripped through the rural Midwest on Thursday . A large and dangerous twister tore across fields in Iowa . And a twister touched down 70 miles outside of St. Louis . Eight tornadoes were reported Wednesday in Oklahoma , Kansas and Missouri , the Storm Prediction Center said . But it appears residents have been fortunate enough to come away from the terrifying weather spectacle alive . Hail stones the size of tennis balls plummeted down on Ashton , Illinois . It could have been worse as severe tornado damage dotted a path not far from the dense populations of Chicago and Rockford -- the state 's third largest city . The tornado cut a 22-mile path through Ogle County , according to disaster management coordinator Tom Richter . North of Rochelle , a tornado took away a local favorite restaurant -- Grubsteakers . `` It 's kind of one of your little greasy spoon restaurants , '' said Eric Widick , who drove up in his truck to help out . `` We 're a community . If one person is in need , we 'll all be there for them . '' People were inside when the storm quashed Grubsteakers and turned over a semitruck parked outside . No one was killed or seriously injured , Widick said . Although a patron who found shelter in a restroom was trapped inside for about half an hour . People had been eating at Grubsteakers for some 25 years and will miss it , Widick said . In Rochelle , the tornado flattened some of Olson 's friends ' homes . A safe distance away from it , at her mother 's house , she had to think about her husband , Chet , who was reelected mayor of the town of about 10,000 people the day before . He 'd have a job ahead of him . `` I have not been able to get a hold of him , Olson said , `` but I know he 's in touch with the sheriff and is safe , '' she said . Sheriff Brian VanVickle told journalists late Thursday that the tornado had spared life and limb in Ogle County aside from some people whose injuries were easily treatable . The county lost 20 homes -- one of them was his own . Fifty to 100 houses had significant damage , he said . Only foundations remained of some homes , said storm chaser Dan Gottschalk . `` You can hear the hissing everywhere from where the structures used to be , '' he said . Lindsey Clark , a reporter from CNN affiliate WREX , said rescuers were pulling trapped people from a home in the Rochelle area . VanVickle was newly elected sheriff of Rochelle on Wednesday . On Thursday , the storm took his house and his sister-in-law 's . `` I 've got the clothes on my back , '' he said . But his family was n't at home when it hit . `` My family was on the way to Louisville , dog was in the basement and she survived . '' It was the first tornado the sheriff had ever seen in his county . `` I 've lived here all my life , am the fifth generation in the county . My mom said this is the first time she 's ever seen a tornado . '' He is thankful that the National Weather Service warned one could come . That saved lives , he believes . The service warned of a `` particularly dangerous situation . '' People across the Midwest should be on alert for severe weather . Tornado watches were set to run out early Friday . CNN 's AnneClaire Stapleton , Catherine Shoichet , Greg Botelho , Dave Alsup , Steve Almasy , Jack Maddox and Sean Morris contributed to this report . --LRB- CNN -RRB- Eyewitness video showing white North Charleston police Officer Michael Slager shooting to death an unarmed black man has exposed discrepancies in the reports of the first officers on the scene . Slager has been fired and charged with murder in the death of 50-year-old Walter Scott . A bystander 's cell phone video , which began after an alleged struggle on the ground between Slager and Scott , shows the five-year police veteran shooting at Scott eight times as Scott runs away . Scott was hit five times . If words were exchanged between the men , they 're are not audible on the tape . It 's unclear what happened before Scott ran , or why he ran . The officer initially said that he used a Taser on Scott , who , Slager said , tried to take the weapon . Before Slager opens fire , the video shows a dark object falling behind Scott and hitting the ground . It 's unclear whether that is the Taser . Later in the video , when Slager approaches Scott 's body , Slager appears to drop a dark object near Scott . Slager is seen in the video handcuffing Scott after the shooting . Witness : I nearly erased shooting video out of fear . Feidin Santana , the witness who recorded the video , said he did n't see Scott grab Slager 's Taser . His account contradicts what Slager told dispatchers . In two interviews with NBC , Santana said that he was walking to his job in North Charleston on Saturday morning when he saw Slager chase Scott , who had been pulled over for a broken taillight . Santana told NBC 's Lester Holt on Wednesday that he saw the two men struggling on the ground . `` They were down on the -LRB- ground -RRB- ... before I started recording , '' Santana said . `` I remember the police -LRB- officer -RRB- had control of the situation . He had control of Scott . '' Santana said he heard the sound of a Taser being used . He believed Scott was trying to get away from it . But Scott never got the Taser or used it on the officer , Santana told NBC . Who was Walter Scott ? A North Charleston Police report included brief statements from eight police officers , but not Slager . One officer , identified as Sgt. J. Gann , said in the report he was conducting a separate traffic stop about 9:30 a.m. Saturday when he heard -- apparently via radio -- Slager say he was `` in foot pursuit '' of another motorist . Gann said that while driving to the officer 's location , `` Slager advised that he deployed his Taser and -LRB- requested -RRB- back up units . '' Seconds later , Gann reported , he heard Slager tell a dispatcher , `` Shots fired and the subject is down . He took my Taser . '' Hours after the shooting , The Post and Courier of Charleston quoted a statement from police spokesman Spencer Pryor , who said Slager attempted to use his Taser to stop a fleeing suspect . The men struggled over the device , with the suspect taking the Taser and attempting to use it against Slager , the newspaper reported . In the police report , another officer , J. Banias , said he was heading to the scene about 10 minutes after the initial call . Slager asked him to `` secure his vehicle at the site of the traffic stop . '' Banias said he spoke to a passenger in the car Scott was driving . `` The passenger was ... detained and placed in the back seat of my vehicle , '' the officer reported . The passenger 's identity was not given in the report , but the officer said in the report that the passenger was detained . Scott family spokesman Ryan Julison confirmed to CNN that a man was with Scott and said he is not related to the family . The family declined to provide any more information . A timeline of events . The North Charleston Police Department is not providing additional information , citing an ongoing investigation of Scott 's killing by the independent South Carolina Law Enforcement Division . Gann said when he arrived at the shooting scene , an officer identified only as Habersham `` was administering first aid '' to Scott . `` I exited my vehicle and assisted Officer Habersham with first aid and CPR to the driver , '' Gann said in the report . `` We continued to perform first aid and CPR until EMS arrived ... When EMS and first responders arrived , EMS took care over providing care to the driver , who was pronounced deceased a short time later . '' Habersham , in his account , did not mention performing CPR . `` I attempted to render aid to the victim by applying pressure to the gunshot wounds and -LRB- directing -RRB- the best route for EMS and fire to get to the victim faster , '' he said in the report . An officer identified as Sgt. Webb said that he requested an ambulance . Webb said that at 9:41 a.m. he saw Habersham `` administering chest compression to the defendant . '' North Charleston Police Chief Eddie Driggers was asked at a news conference this week whether CPR was performed on Scott . `` I do not know . I was told that life-saving ... that they tried to save his life , '' Driggers said . North Charleston Mayor Keith Summey added that not every North Charleston police officer is CPR certified . What we know about Officer Slager . --LRB- CNN -RRB- Police in India are putting aside their batons in favor of an overhead solution to angry and unruly crowds : pepper-spraying drones . Yashasvi Yadav , Senior Superintendent of police in Lucknow , northern India , told CNN the city 's force has bought four drones and is in the process of purchasing one more . `` The drones have been tested in controlled conditions , '' he said . `` They have been very successful and will be used by the Lucknow police whenever there are violent protests or mob attacks . '' The miniature aircraft will be fitted with a camera and pepper spray ; each drone costs between $ 9,560 and $ 19,300 , Yadav added . Views on the new measure are mixed , with some concerned about the suppression of freedom of speech -- an already contentious issue in India . Last month , the country failed to enforce a law that would allow authorities to arrest people who post offensive material on social media . Others believe the country could learn from events further afield . Some say this method of crowd control needs regulation too . Questions have also been raised as to why the police are resorting to aggression . `` While I think it is bound to fail if not be another scam in the making , it also shows the mindset of the administration to not use dialogue and mediation to solve problems but use authoritarian and forceful methods , '' photojournalist Chirag Wakaskar in Mumbai told CNN . `` What they could do is start by having video surveillance in sensitive areas and have swifter justice . '' Protests are a common occurrence in India , a country with a population of 1.2 billion ; Lucknow , the capital of the northern state of Uttar Pradesh , also used drone cameras to monitor crowds at a recent religious festival . As well as being used as a security measure in other cities including Delhi and Mumbai , the unmanned , airborne vehicles have been used in tiger hunts , disaster relief and criminal investigations -- and even pizza deliveries . Reports suggest that the drone surveillance will be officially launched by the Chief Minister of Lucknow , Akhilesh Yadav , later this month . Kunal Sehgal contributed to this report . --LRB- CNN -RRB- Just as the agency begins to recover from a series of high-profile missteps , the Secret Service is facing yet another scandal . A female employee accused Xavier Morales , a supervisor within the agency , of assault after he made sexual advances at her , according to The Washington Post . `` The woman told police and agency investigators that Morales , her boss , told her during the party at Capitol City Brewing Company that he was in love with her and would like to have sex with her , '' and later tried to kiss her in the office , according to a report from The Washington Post . During the incident , he `` grabbed her arms when she resisted '' and the two tussled until Morales gave up , sources told the paper . The Post reports that the March 31 party was in celebration of Morales ' new assignment as head of the Louisville field office . A Secret Service spokesperson confirms that Morales was placed on administrative leave and his security clearance was suspended . This incident was first reported on April 2 , and Secret Service Director Joe Clancy was briefed that afternoon . Clancy called the allegations `` very disturbing . '' `` Any threats or violence that endangers our employees in the workplace is unacceptable and will not be tolerated , '' he said in a statement . This is just the latest chapter for an organization embroiled in scandal over the past several months . Last month , two top-ranking officials were suspended following an incident at a White House command post during an investigation of a possible bomb . Clancy was not made aware of the episode until five days later . The agency has also faced scrutiny for another lapse in late January when a drone crash-landed on the White House lawn . Secret Service Director Julia Pierson resigned in September after a fence-jumper gained access to the East Room of the White House . Earlier in September , an armed security contractor was allowed to get into an elevator with President Barack Obama during a trip to the Centers for Disease Control and Prevention in Atlanta . An independent report released in December found that the Secret Service is stretched `` beyond its limits , '' needing more training , more staff , and a director from outside its ranks . Clancy , who formally assumed the post in February , is a 27-year veteran of the agency . `` It 's going to take time to change some of this culture , '' Clancy said at a House Appropriations Committee hearing last month . `` There 's no excuse for this information not to come up the chain . That 's going to take time because I 'm going to have to build trust with our workforce . '' The incident will be further investigated by the Office of the Inspector General . --LRB- The Hollywood Reporter -RRB- Richard Dysart , the Emmy-winning actor who portrayed the cranky senior partner Leland McKenzie in the slick , long-running NBC drama `` L.A. Law , '' has died . He was 86 . Dysart , who also played Coach in the original 1972 Broadway production of Jason Miller 's Pulitzer Prize-winning `` That Championship Season , '' died Sunday at home in Santa Monica after a long illness , his wife , artist Kathryn Jacobi , told The Hollywood Reporter . The acclaimed `` L.A. Law '' -- created by Steven Bochco -LRB- who eventually handed off the series to David E. Kelley -RRB- and Terry Louise Fisher -- aired for eight seasons from 1986 to 1994 . For playing the founder of the firm McKenzie , Brackman , Chaney and Kuzak , Dysart was nominated for the Emmy for outstanding supporting actor in a drama series for four straight years , finally winning the trophy in 1992 . `` I always had him in mind for that role , '' Bochco said in a 2002 interview with the Archive of American Television . `` He 's so avuncular . So I reached out to him . You know , Dick is sort of an old hippie . So he went into his closet and tried to find a lawyer outfit , and he came to meet us wearing a suit and tie . He was perfect . '' `` We got together , mapped out the character 's past to give us a basis from which to work , and it 's all gone smoothly since then , '' Dysart said in a 1990 interview with The Seattle Times . `` Sometimes I worry -- it 's all been going too well -- a role I love to play in a series that 's about as good as you can get . Something 's wrong ! '' Perhaps Dysart 's most memorable character arc on the show was when he was found in bed with power-hungry competitor Rosalind Shays -LRB- played by Diana Muldaur -RRB- . He was one of the few actors to appear in every episode . Dysart 's range of authority - figure parts ran right to the top . He limned Harry Truman in the CBS telefilm `` Day One '' and in the ABC miniseries `` War and Remembrance , '' both of which aired in 1989 , and he was Henry L. Stimson , the 33rd U.S. president 's Secretary of War , in the 1995 HBO telefilm `` Truman , '' starring Gary Sinise . Similarly , he played the Secretary of Defense in `` Meteor '' -LRB- 1979 -RRB- . Hollywood Reporter : Most powerful people in N.Y. media . Dysart also performed extensively in the medical - -LRB- movie -RRB- field , performing enough doctor roles to , perhaps , qualify to practice . His two most memorable came in classic satires : in Paddy Chayevsky 's scathing `` The Hospital '' -LRB- 1971 -RRB- , starring George C. Scott -LRB- a good friend -RRB- , and in `` Being There '' -LRB- 1979 -RRB- , as Melvyn Douglas ' doctor . He also was a doctor who died a gruesome death in John Carpenter 's `` The Thing '' -LRB- 1982 -RRB- and a physician in such films as `` The Terminal Man '' -LRB- 1974 -RRB- , `` The Falcon and the Snowman '' -LRB- 1985 -RRB- and `` Warning Sign '' -LRB- 1985 -RRB- . Dysart portrayed J. Edgar Hoover in the 1993 USA telefilm `` Marilyn & Bobby : Her Final Affair '' and in Mario Van Peebles ' `` Panther '' -LRB- 1995 -RRB- . Dysart also excelled as cranky coots and shifty sorts . He portrayed a motel receptionist in Richard Lester 's `` Petulia '' -LRB- 1968 -RRB- ; was the bad guy who battled Clint Eastwood in `` Pale Rider '' -LRB- 1985 -RRB- ; stood out as a power player in Oliver Stone 's `` Wall Street '' -LRB- 1987 -RRB- ; and sold barbwire in `` Back to the Future III '' -LRB- 1990 -RRB- . Dysart was born March 30 , 1929 , in Boston and raised in Maine . Following high school , he attended the Gould Academy in Bethel , Maine , for a year , served in the U.S. Air Force and attended Emerson College , where he graduated with a master 's degree in speech communications . At the time , he was interested in a career in radio -LRB- he became fascinated with the medium in first grade , when he was bedridden for a year because of rheumatic fever -RRB- but was soon tempted by acting . He moved to New York on a whim and was able to land minor roles on TV and a part in an off-Broadway production of `` The Iceman Cometh '' opposite Jason Robards . In the mid-1960s , he joined the American Conservatory Theater and toured the country doing plays , then landed roles on Broadway in `` All in Good Time , '' `` The Little Foxes '' and `` A Place Without Doors . '' He received a Drama Desk Award for his performance in `` That Championship Season . '' Hollywood Reporter : Q&A with Liz Smith . Dysart 's credits include an eclectic array of movies , including `` The Crazy World of Julius Vrooder '' -LRB- 1974 -RRB- , `` The Day of the Locust '' -LRB- 1975 -RRB- , `` The Hindenburg '' -LRB- 1975 -RRB- , `` An Enemy of the People '' -LRB- 1978 -RRB- , `` Prophecy '' -LRB- 1979 -RRB- , `` Mask '' -LRB- 1985 -RRB- and `` Hard Rain '' -LRB- 1998 -RRB- . On television , he was top-notch in the telefilms `` The Autobiography of Miss Jane Pittman '' -LRB- 1974 -RRB- , `` The People vs. Jean Harris '' -LRB- 1981 -RRB- , as Dwight D. Eisenhower in `` The Last Days of Patton '' -LRB- 1986 -RRB- and as studio chief Louis B. Mayer in `` Malice in Wonderland '' -LRB- 1985 -RRB- . Survivors also include his stepson Arie and daughter-in-law Jeannine Jacobi , mother-in-law Lenore , brother and sister-in-law Nadine and John Jacobi and grandchildren Abby and Levi . A private memorial is being planned . In lieu of flowers , the family requests donations be made to the Will Geer Theatricum Botanicum , an outdoor theater in Topanga Canyon in the Los Angeles area . Dysart and Jacobi had a second home in the forests of British Columbia . He was lured out of retirement for his last onscreen appearance , the `` L.A. Law '' reunion telefilm of 2002 . `` They remain timely , with cases about points of law that are still current , '' he said of watching `` L.A. Law '' reruns in a 2002 interview with The Bangor Daily News . '' -LSB- The show -RSB- was also one of the fathers of yuppiedom . It was very much of the times , and very Los Angeles . It holds up as well as any series I know . '' People we 've lost in 2015 . © 2015 The Hollywood Reporter . All rights reserved . --LRB- CNN -RRB- You may know Mindy Kaling from Fox 's cult hit comedy `` The Mindy Project , '' in which she plays Mindy Lahiri , a perky , quirky OB/GYN juggling her career and love life in New York . -LRB- Only in the Big Apple can a doctor not afford an apartment ! -RRB- . The show was a breakthrough for on-screen representation -- the first network sitcom created by and starring a woman of color -- and it looks likely to be renewed for the coming 2015-16 season . Recently , however , Kaling 's brother Vijay Chokalingam unveiled a project of his own , and while it has been getting a lot of attention , it has n't generated quite as many laughs -- either from observers or from his famous sibling , who told him it brought `` shame upon their family . '' You see , Chokalingam revealed that , as an undergraduate at the University of Chicago , he engaged in a daring -LRB- his view -RRB- or ridiculous and offensive -LRB- pretty much everyone else -RRB- scam : He applied to medical school claiming to be African-American . Chokalingam had spent his college years as a `` hard-partying frat boy , '' and achieved a less than stunning 3.1 GPA . Upon facing graduation and exploring his med school options , he realized that fellow Indian-Americans with his grades were getting turned down from the universities of his choice -- but that `` black , Hispanic , and Native American applicants with my grades and test scores were much more likely to gain acceptance . '' This revelation led him to make the decision to pose as a black man , both to `` dramatically improve '' his chances of admission , and to illustrate the unfair advantage that blacks and other underrepresented minorities receive when applying to prestigious schools . To accomplish this goal , Chokalingam shaved his head of its naturally wavy black locks , trimmed his `` long Indian-American eyelashes , '' checked `` black '' under the optional race/ethnicity declaration and submitted his application to 14 schools under his childhood nickname `` JoJo . '' He received invitations for in-person interviews at 11 schools , results that he claims support the notion that African-Americans garner special privileges that are unavailable to whites or Asians . And now that the statute of limitations on his act of fraud has expired , he 's looking to write a book on his experiences , titled `` Almost Black : The True Story of an Indian American Who Got Into Medical School Pretending to Be an African American . '' What 's truly curious is that even if you agree with Chokalingam that affirmative action is merely a form of `` systematic racism , '' when all is said and done , it offers very little evidence of the `` privilege '' that he claims is accorded to black , Hispanic and Native American candidates . Chokalingam had mediocre grades and MCATs , but he graduated from one of the most prestigious schools in the nation . Yet even while representing himself as black , Chokalingam received only a single admission offer , to St. Louis University 's School of Medicine , which falls somewhere between 57th and 67th in national rankings . Harvard , University of Pennsylvania , Columbia and all the higher ranked schools he applied to rejected him . Meanwhile , he admits , pretending to be black came with disadvantages . He found himself being accused of shoplifting by store clerks and harassed by cops -- who would regularly stop him while driving and demand that he tell them how much his car cost , implying that he must have stolen it . These acts of very real prejudice , experienced regularly by blacks and Hispanics of all backgrounds -- multimillionaire comedian Chris Rock has recently been tweeting pictures of the occasions when he is pulled over by police for no reason -- did n't seem to dissuade Chokalingam from his adamant belief in the unfairness of a system that seeks to address the shockingly low numbers of minority health practitioners by providing some weight to race and ethnicity in decision-making . It 's not just a matter of what individual applicants `` deserve . '' One-third of Americans are black , Hispanic or Native American ; just one in 10 physicians are . Since minority medical practitioners are up to three times as likely to practice in their own communities , this lack of diversity has produced `` doctor deserts , '' in which urban and rural ethnic enclaves across the nation go without access to primary care physicians . Years ago , when I told my father -- a doctor from a long line of doctors -- that I did n't want to follow in his footsteps , he told me that was fine , because medicine is a service trade , and anyone not interested in serving should avoid the profession . A medical degree is n't a reward to be earned , he said , but a responsibility to be accepted . Which really cuts to the heart of what 's so sad about Chokalingam 's racial farce . Like others who 've recently been exposed for falsely claiming racial identities -- including putative presidential candidate Jeb Bush , who registered himself as `` Hispanic '' on a 2009 voter form , and Massachusetts Sen. Elizabeth Warren , who was excoriated during her campaign for having claimed Native American ancestry in the past -- Chokalingam wanted to claim the fruits of racial affiliation without having to carry black people 's burden . Race is n't just about color or blood ; it is about the collective experiences and inherited cultural context and present-day condition of a community of people . Many of the markers of race are persistently corrosive ; others are deeply painful . Affirmative action programs are a means of redress for these awful realities of our nation 's history ; an imperfect one , but necessary . There are some fields where the imbalances might never correct themselves on their own . Industries like health care and Hollywood . Because what 's most ironic about Chokalingam 's decision to ride on his sister 's coattails in telling his story : While Asians are well represented in medicine , our numbers are vanishingly low in the entertainment and media world , and until the recent breakthrough of modern pioneers like Mindy Kaling , it was impossible to imagine film and television that included our faces , voices and stories . Kaling 's immense talent and charisma made her a star . But it was a quota-based affirmative action initiative -- NBC 's Diversity Writers Program -- that gave her a start . --LRB- CNN -RRB- `` A long , long , time ago ... '' Those five words , when uttered or sung , makes baby boomers immediately think of Don McLean 's pop masterpiece `` American Pie . '' It 's hard to believe that his phenomenal 8 1/2 minute allegory , which millions of Americans know by heart , is 44 years old . All sorts of historical cross-currents play off each other in this timeless song , brilliantly gilded with the unforgettable chorus , which starts as `` Bye , Bye , Miss American Pie . '' There is no real way to categorize McLean 's `` American Pie '' for its hybrid of modern poetry and folk ballad , beer-hall chant and high-art rock . On Tuesday , Christie 's sold the 16-page handwritten manuscript of the song 's lyrics for $ 1.2 million to an unnamed buyer . McLean was a paperboy when , on February 3 , 1959 , he saw that Buddy Holly , Ritchie Valens and J.P. `` The Big Bopper '' Richardson had been tragically killed in an airplane crash in Clear Lake , Iowa . `` The next day I went to school in shock and guess what ? '' McLean recalled . `` Nobody cared . Rock 'n' roll in those days was sort of like hula hoops and Buddy had n't had a big hit on the charts since ' 57 . '' By cathartically writing `` American Pie , '' McLean has guaranteed that the memory of those great musicians lives forever . Having recorded his first album , `` Tapestry , '' in 1969 , in Berkeley , California , during the student riots , McLean , a native New Yorker , became a kind of weather vane for what he called the `` generation lost in space . '' When his cultural anthem `` American Pie '' was released in November 1971 , it replaced Bob Dylan 's `` The Times They Are A Changin '' as the Peoples Almanac of the new decade . It 's important to think of `` American Pie '' as one would of Henry Longfellow 's `` Evangeline '' or Johnny Mercer 's `` Moon River '' -- an essential Americana poem emanating wistful recollection , blues valentine , and youthful protest rolled into one . There is magic brewing in the music and words of `` American Pie , '' for McLean 's lyrics and melody frame a cosmic dream , like those Jack Kerouac tried to conjure in his poetry-infused novel `` On the Road . '' Don McLean : Buddy Holly , rest in peace . Influenced by Pete Seeger and the Weavers , McLean proudly wore the mantle of troubadour in the early 1970s , when `` American Pie '' topped the Billboard charts , and has never shed the cape . Wandering far and wide , singing `` American Pie '' at windblown dance halls in Wyoming and cloistered colleges in New England , at huge amphitheaters in California and little coffee houses in the Hudson River Valley , McLean has performed his global anthem thousands of times . Yet the encore number never loses its transfixing allure . When McLean prods audiences by rhapsodizing `` and they were singing '' everybody spontaneously joins in with the `` Bye , Bye '' chorus . Watching McLean deliver his most notable song in concert is to take part in a collective Happening . What makes `` American Pie '' so unusual is that it is n't a relic from the counterculture but a talisman , which , like a sacred river , keeps bringing joy to listeners everywhere . When `` American Pie '' suddenly is played on a jukebox or radio it 's almost impossible not to sing along . Like `` Danny Boy '' or `` Streets of Laredo '' or `` Shenandoah , '' it 's eternal . With illusions to football fields and rock 'n' roll , river levees and nursery rhymes , the song cascades along like a boat going down Niagara Falls or a roller coaster that jumps tracks but floats instead of crashes . After all these years , `` American Pie '' still makes me feel empowered and yet filled with a sense of loss . The song is alive and joyful , yet fretful about a world gone wrong . It is a song that will never die . A reverie for the ages . There is a jump to the chorus , which forces the mind to relive the '50s , '60s and '70s , to troll through the back pages of our lives while , like a traditional Irish folksong , it reminds us of fate . While McLean , the muse , has rightfully not tried to interpret `` American Pie , '' it 's fair to surmise that `` the king '' is Elvis Presley , `` Helter Skelter '' refers to the Charles Manson murders , the `` jester on the sidelines in a cast '' is Bob Dylan , and `` Jack Flash '' the Rolling Stones . But who knows ? The lyric remains a puzzle open to thousands of spirited interpretations . As a literary artifact of the early 1970s , there is n't anything to compare to `` American Pie . '' Normally , I do n't like rankings of literature or songs or even presidents , for that matter . But the fact that the Recording Industry of America and the National Endowment of the Arts chose `` American Pie '' as the fifth greatest song of the 20th century speaks to the composition 's importance as an enduring piece of pop art . The other four were `` Over the Rainbow '' -LRB- by Harold Arlen and E.Y `` Yip '' Harburg -RRB- , `` White Christmas '' -LRB- by Irving Berlin -RRB- , `` This Land is Your Land '' -LRB- by Woody Guthrie -RRB- and `` Respect '' -LRB- by Otis Redding -RRB- . That is fine company . Quite simply , `` American Pie '' is one of the greatest songs ever written . And Tuesday the original lyrics found a new home . --LRB- CNN -RRB- Anthony Ray Hinton is thankful to be free after nearly 30 years on Alabama 's death row for murders he says he did n't commit . And incredulous that it took so long . Hinton , 58 , looked up , took in the sunshine and thanked God and his lawyers Friday morning outside the county jail in Birmingham , minutes after taking his first steps as a free man since 1985 . He spoke of unjustly losing three decades of his life , under fear of execution , for something he did n't do . `` All they had to do was to test the gun , but when you think you 're high and mighty and you 're above the law , you do n't have to answer to nobody , '' Hinton told reporters . `` But I 've got news for you -- everybody that played a part in sending me to death row , you will answer to God . '' Jefferson County Circuit Court Judge Laura Petro had ordered Hinton released after granting the state 's motion to dismiss charges against him . Hinton was convicted of murder in the 1985 deaths of two Birmingham-area , fast-food restaurant managers , John Davidson and Thomas Wayne Vason . But a new trial was ordered in 2014 after firearms experts testified 12 years earlier that the revolver Hinton was said to have used in the crimes could not be matched to evidence in either case , and the two killings could n't be linked to each other . `` Death Row Stories '' : Hard questions about the U.S. capital punishment system . The state then declined to re-prosecute the case . Hinton was 29 at the time of the killings and had always maintained his innocence , said the Equal Justice Initiative , a group that helped win his release . `` Race , poverty , inadequate legal assistance , and prosecutorial indifference to innocence conspired to create a textbook example of injustice , '' Bryan Stevenson , the group 's executive director and Hinton 's lead attorney , said of his African-American client . `` I ca n't think of a case that more urgently dramatizes the need for reform than what has happened to Anthony Ray Hinton . '' Stevenson said the `` refusal of state prosecutors to re-examine this case despite persuasive and reliable evidence of innocence is disappointing and troubling . '' Amnesty report : Executions down but death sentences on the rise . Dressed in a dark suit and blue shirt , Hinton praised God for his release , saying he was sent `` not just a lawyer , but the best lawyers . '' He said he will continue to pray for the families of the murder victims . Both he and those families have suffered a miscarriage of justice , he said . `` For all of us that say that we believe in justice , this is the case to start showing , because I should n't have -LRB- sat -RRB- on death row for 30 years , '' he said . Woman who spent 22 years on death row has case tossed . Hinton was accompanied Friday by two of his sisters , one of whom still lives in the Birmingham area . Other siblings will fly to the area to see him soon , Stevenson said . His mother , with whom he lived at the time of his arrest , is no longer living , according to the lawyer . Hinton planned to spend at least this weekend at the home of a close friend . He will meet with his attorneys Monday to start planning for his immediate needs , such as obtaining identification and getting a health checkup , Stevenson said . The plan now is to spend a few weeks to get oriented with freedom and `` sort out what he wants to do , '' Stevenson said . --LRB- CNN -RRB- Pardon us , `` Lost '' fans , but April 8 was n't only your day . Yes , we know the significance of April 8 , 2015 , and the alignment of 4:23.42 p.m. on that date to everyone obsessed with the hit ABC show , and we heard about the general geek-outs that were occurring . But do n't forget , April 8 was also `` Rex Manning Day . '' Twitter did n't , paying homage to the 1995 film `` Empire Records '' and the character of Rex Manning , played by the very dreamy Maxwell Caulfield . The movie -- also starring Liv Tyler , Anthony LaPaglia and Renée Zellweger -- centers on an independent record store in Delaware where , on April 8 , former pop idol Manning is scheduled to make an in-store appearance . Fret not if you missed it , as we have some other dates made famous by films that you are n't going to want to let pass you by : . April 14 . Their love affair was doomed like two ships passing in the night , but it was so good while it lasted for Jack and Rose in the 1997 blockbuster movie `` Titanic . '' The sketch Jack does of his beloved is dated April 14 , 1912 . The Titanic sank on April 15 , 1912 . April 25 . Thanks to the 2000 film `` Miss Congeniality , '' we now know that April 25 is the perfect date . Just do n't forget to dress accordingly . October 3 . `` Mean Girls Day '' is officially October 3 , given that 's when Aaron Samuels -LRB- OMG , he is so hot ! -RRB- asks Cady what day it is . Of course , she replies `` It 's October 3 . '' Honestly , any day is a good day to quote the 2004 film . It 's so fetch . October 21 , 2015 . Buckle up for this one . In the 1989 film `` Back to the Future Part II , '' Marty McFly and the gang travel to October 21 , 2015 . We hope to be celebrating that in our flying car that we are STILL waiting on , please and thank you . --LRB- CNN -RRB- Their relationship led to jail time for her , but Mary Kay Letourneau Fualaau wants the world to know that she and her husband , Vili Fualaau , are still happily together . She was a married 34-year-old teacher and mother of four in Seattle in 1996 when she began an affair with Fualaau , her 13-year-old student . Letourneau gave birth to her young lover 's child and went on to serve more than seven years in prison on charges related to their sexual relationship . On Friday , ABC 's `` 20/20 '' will air an exclusive interview with the couple , who will celebrate their 10th wedding anniversary on May 20 . The pair wed soon after she was released from prison in 2005 and are now the parents of two teen girls . According to ABC , during the interview with Barbara Walters , `` Mary Kay tells Walters what makes their marriage work in spite of their huge difference in their age . '' `` She also discusses her surprising plans to teach again , as well as her intentions to have her status as a registered sex offender lifted , '' a posting on the network 's site says . `` Vili Fualaau , meanwhile , discusses his bouts with alcoholism , depression and why he believes the system failed him while he was still a minor . '' Letourneau Fualaau is now 53 , and her husband is 31 . --LRB- CNN -RRB- They 're not gon na take it anymore . Really . Twisted Sister says that its 2016 tour will be its last , according to a press release . Next year marks the band 's 40th anniversary , and to celebrate , the tour is being titled `` Forty and F*ck It . '' `` It 's official : Farewell , '' Twisted Sister singer Dee Snider posted on Facebook . Snider also noted that the band will play with a new drummer , Mike Portnoy of Adrenaline Mob . Portnoy replaces A.J. Pero , who died March 20 . The band will also perform two shows in Pero 's honor : one at Las Vegas ' Hard Rock Hotel and Casino , the other at the Starland Ballroom in Sayreville , New Jersey . The latter is in support of Pero 's family . Twisted Sister 's biggest hit , `` We 're Not Gon na Take It , '' hit the Top Forty in 1984 and was featured in a popular video . --LRB- The Hollywood Reporter -RRB- `` Grace of Monaco , '' starring Nicole Kidman as star-turned-princess Grace Kelly , is heading straight to Lifetime . The critically-panned film , which opened last year 's Cannes Film Festival , will premiere on Lifetime on Memorial Day , May 25 . After the movie performed poorly in its international engagements , The Weinstein Co. , which first purchased U.S. distribution rights at the 2013 Berlin Film Festival , decided to sell it directly to Lifetime rather than book it into U.S. theaters , a source confirmed to The Hollywood Reporter . THR : Grace of Monaco ' Cannes review . The film , which was directed by Olivier Dahan and focuses on a period in the early '60s when Monaco was involved in a stand-off over taxes with France and Grace was contemplating a return to Hollywood , was originally scheduled for release in late 2013 . Given the names involved , some handicappers had put it on their list of potential Oscar contenders . But when TWC pulled it out of awards contention and shifted its release to March 14 , 2014 , Dahan lashed out at TWC 's Harvey Weinstein , over the movie 's final cut , which the director was in the process of completing . `` There are two versions of the film for now , mine and his , '' Dahan complained , continuing , `` They want a commercial film smelling of daisies , taking out anything that exceeds that which is too abrupt , anything that makes it cinematic and breathe with life . '' That planned March release was then scrubbed , when Cannes expressed interest in debuting the director 's version of the movie in May . Even before it screened , though , Grace 's children blasted the picture as `` needlessly glamorized and historically inaccurate '' and boycotting the Cannes red carpet . THR : The Weinstein Co. nearing deal to keep ` Grace of Monaco ' Weinstein did n't attend the movie 's premiere either -- explaining that he had been visiting Syrian refugee camps in Jordan as part of a long-scheduled U.N.-sponsored trip . But TWC did strike a new distribution deal for the film in Cannes , agreeing to show Dahan 's cut in the U.S. , but acquiring rights for just $ 3 million upfront , a $ 2 million discount from its earlier contract . But TWC then did not slot `` Grace of Monaco '' into its fall , 2015 release schedule . Tim Roth costars as Kelly 's husband Prince Rainier III , Frank Langella as Kelly 's priest and confidante , Parker Posey as Grace 's aid , and Paz Vega -LRB- `` Spanglish , '' `` Sex and Lucia '' -RRB- as opera singer Maria Callas . See the original story at The Hollywood Reporter . © 2015 The Hollywood Reporter . All rights reserved . --LRB- CNN -RRB- That 's some rich `` American Pie . '' The lyrics to the famed Don McLean song sold for $ 1.2 million Tuesday morning at an auction held by Christie 's . `` Don McLean 's manuscript of ` American Pie ' achieved the 3rd highest auction price for an American literary manuscript , a fitting tribute to one the foremost singer-songwriters of his generation , '' Christie 's Tom Lecky said in a statement . McLean told Rolling Stone that it was time to part with the manuscript . `` I 'm going to be 70 this year , '' the singer and songwriter said in February . `` I have two children and a wife , and none of them seem to have the mercantile instinct . I want to get the best deal that I can for them . It 's time . '' Over the years , `` American Pie '' has become one of the most dissected and argued-about songs in the pop music canon . McLean has said that the opening lines were inspired by the death of Buddy Holly , but after that , it 's all been conjecture -- which has n't stopped a marching band 's worth of analysts from trying to parse the symbols in the 8-minute , 33-second opus . Is the jester Bob Dylan ? The football game Vietnam ? The `` girl who sang the blues '' Janis Joplin ? -LRB- One thing 's certain : Buddy Holly 's plane was NOT named `` American Pie . '' -RRB- . `` Over the years I 've dealt with all these stupid questions of ` Who 's that ? ' and ` Who 's that ? ' '' McLean said . `` These are things I never had in my head for a second when I wrote the song . I was trying to capture something very ephemeral and I did , but it took a long time . '' The song catapulted the former folk singer to headliner status . The song hit No. 1 in early 1972 , despite its length . -LRB- The 45-rpm single split the song in half on its A and B sides . -RRB- . The draft that was auctioned is 16 pages : 237 lines of manuscript and 26 lines of typed text , according to Christie 's . It includes lines that did n't make the final version as well as extensive notes -- all of which should be revealing , McLean said . The record for a popular music manuscript is held by Bob Dylan 's `` Like a Rolling Stone , '' which sold for $ 2 million in June . Opinion : What 's so great about ` American Pie ' ? --LRB- CNN -RRB- Kanye West has settled a lawsuit with a paparazzi photographer he assaulted -- and the two have shaken on it . The photographer , Daniel Ramos , had filed the civil suit against West after the hip-hop star attacked him and tried to wrestle his camera from him in July 2013 at Los Angeles International Airport . West pleaded no contest last year to a misdemeanor count of battery over the scuffle . A judge sentenced him to two years ' probation , as well as anger management sessions and community service . Ramos and his lawyer , Gloria Allred , sought general and punitive damages in the civil suit , saying that West had interfered with the photographer 's rights to pursue a lawful occupation . The case had been set for trial next week , but Allred issued a statement Tuesday night saying Ramos ' side had filed a dismissal `` because the case was settled to the satisfaction of the parties . '' She did n't disclose the details of the settlement other than saying that `` one important aspect of it was an apology by Kanye West to our client , Daniel Ramos . '' Her statement included a picture of West and Ramos shaking hands , which she said happened after the apology . The original incident was caught on video , including the following exchange . `` Kanye ! Kanye ! Talk to me , Kanye ! '' Ramos shouts outside a terminal at the Los Angeles airport on the night of July 19 , 2013 . `` What 's ' going on ? Why ca n't we talk to you ? I mean , why ? '' he asks as West moves through a group of paparazzi . `` Now come on , Kanye , I do n't want to fight with you , '' he says as West advances toward him . `` I told you , do n't talk to me , right , '' West says . `` You 're trying to get me in trouble so I step off and have to pay you like $ 250,000 . '' West is then seen rushing the photographer and attempting to wrestle his camera from his hands . West retreats after about 15 seconds of scuffling with the photographer . `` We believe that this case sent an important message , '' Allred said . `` Celebrities are not above the law , and they have no right to physically attack someone simply because they were asked a question . '' Beverly Hills Police investigated an incident in January 2014 in which West was accused of assaulting a man at a Beverly Hills chiropractor 's office . West avoided criminal charges by reaching a civil settlement with the man . Kanye West apologizes to Beck , Bruno Mars . CNN 's Sonya Hamasaki contributed to this report . --LRB- CNN -RRB- Buzz has surrounded HBO 's new documentary `` Going Clear : Scientology and the Prison of Belief , '' but Scientologist John Travolta is not a fan . Travolta told the Tampa Bay Times that he has not seen the documentary , `` and I do n't really care to . '' `` I 've been so happy with my -LRB- Scientology -RRB- experience in the last 40 years that I really do n't have anything to say that would shed light on -LRB- a documentary -RRB- so decidedly negative , '' Travolta said . The actor , one of the Church of Scientology 's most high-profile members along with stars like Tom Cruise and Kirstie Alley , is premiering his new film , `` The Forger , '' in Clearwater , Florida . The HBO documentary is based on the book `` Going Clear : Scientology , Hollywood , and the Prison of Belief '' by Lawrence Wright and is critical of the organization , which has close ties to the showbiz industry . Travolta said he believed the doc was a result of `` people who were disgruntled with their experiences '' with the Church of Scientology , which he touted as a positive experience for him . `` I have n't experienced anything that the hearsay has -LRB- claimed -RRB- , so why would I communicate something that was n't true for me ? '' Travolta asked . `` It would n't make sense , nor would it for Tom -LRB- Cruise -RRB- , I imagine . '' He called Scientology `` brilliant '' and credited the church with helping him to survive the death of his teen son , Jett , after a seizure while the family was on vacation in the Bahamas in 2009 . `` Oh , my God , I would n't have made it , '' said Travolta , whose wife , Kelly Preston , is also a member . `` Honestly . '' --LRB- CNN -RRB- Blues legend B.B. King was hospitalized for dehydration , though the ailment did n't keep him out for long . King 's dehydration was caused by his Type II diabetes , but he `` is much better , '' his daughter , Claudette King , told the Los Angeles Times . The legendary guitarist and vocalist released a statement thanking those who have expressed their concerns . `` I 'm feeling much better and am leaving the hospital today , '' King said in a message Tuesday . Angela Moore , a publicist for Claudette King , said later in the day that he was back home resting and enjoying time with his grandchildren . `` He was struggling before , and he is a trouper , '' Moore said . `` He was n't going to let his fans down . '' No more information on King 's condition or where he was hospitalized was immediately available . B.B. is short for Blues Boy , part of the name he used as a Memphis disc jockey , the Beale Street Blues Boy . He was inducted into the Rock and Roll Hall of Fame in 1987 , and has 30 Grammy nominations . King , 89 , has used various models of Gibson guitars over the years , and named each one of them Lucille . In the 1980s , Gibson officially dropped the model number on the guitar he used last and most . It became a custom-made signature model named Lucille , manufactured exclusively for the `` King of the Blues . '' Some of his hits include `` The Thrill Is Gone , '' which won him his first Grammy in 1970 , `` There Must be a Better World Somewhere '' and `` When Love Comes to Town , '' a collaboration with U2 . Last year , the bluesman suffered from dehydration and exhaustion after a show in Chicago , forcing him to cancel the remainder of his tour . CNN 's Greg Botelho and Sonya Hamasaki contributed to this report . --LRB- CNN -RRB- Rebekah Gregory blinked back tears as she thought about the verdict . It had been almost two years since Dzhokhar Tsarnaev and his brother planted bombs at the Boston Marathon , setting off deadly explosions that wounded her and hundreds of others . In court last month , she testified that one of the blasts on that day in 2013 left her lying in the street , staring at her own bones . Now , jurors have found him guilty on all 30 counts he faced for the deadly bombings and their aftermath . But no verdict can ever totally make up for the pain , she said . `` I do n't believe that there will ever be justice brought to this , no mater if he does get the death penalty or he remains in prison for the rest of his life , '' she said , crying as she spoke to reporters outside her Texas home . `` I do believe , however , that he should be held accountable for his actions . And I 'm very thankful for each of the jury members that are making him do that . '' Gregory , who wrote a widely publicized letter to Tsarnaev after testifying , said the trial has left her and other victims reeling from a flood of emotions as they relive horrifying memories , but it 's an important step . `` Everything is being brought up again full force . Our lives will never ever be the same , but I hope with this we can move forward and remember that we are still here for a reason , that there 's a bigger plan , '' she said . `` I may be standing on one fake leg , but I 'm standing here , stronger than ever , because someone tried to destroy me , and he failed . '' For Gregory and others who lived through the 2013 attack , Wednesday 's verdict brought a mix of emotions , from triumphant vows to move forward , to expressions of gratitude , to debate over whether Tsarnaev should be sentenced to death . There were no outbursts inside the federal courthouse in Boston . In fact , there was barely any peripheral noise as people sat on the edges of their seats . As Tsarnaev fidgeted and scratched the back of his head , some survivors and victims ' family members lowered their heads and dabbed tears . As CNN 's Alexandra Field noted from inside the courtroom , `` They 've waited a long time for this . '' The family of Sean Collier , a 26-year-old police officer shot to death in his patrol car on the campus of the Massachusetts Institute of Technology , said Tsarnaev and his brother , Tamerlan , were terrorists who `` failed monumentally '' in striking fear in people . `` While today 's verdict can never bring Sean back , we are thankful that Dzhokhar Tsarnaev will be held accountable for the evil that he brought to so many families , '' the Collier family said in a written statement . To Richard `` Dic '' Donohue , an MBTA police officer left in a pool of blood after being wounded in a shootout with the Tsarnaevs in Watertown , the verdicts show that `` as a society , ... terrorism will not prevail , and we will hold those accountable for their acts against our nation . '' `` Justice has been served today , '' Donahue tweeted . Survivor Karen Brassard said she needed to attend the trial to help her heal . She does n't believe Dzhokhar Tsarnaev 's brother Tamerlan , now dead , persuaded him to take part in the plot , as the defense contended . Dzhokhar , in her view , was `` all in . '' `` Obviously we are grateful for the outcome today , '' Brassard tolder reporters . `` It 's not a happy occasion , but it 's something that we can put one more step behind us . '' That sense of turning the page was echoed by Bruce Mendelsohn , who is among those who rushed to save lives at the marathon finish line . The verdicts mean that Dzhokhar Tsarnaev is no longer a bombing suspect -- he is now officially a `` convicted killer . '' You ca n't call it celebration . But there is a newfound peace of mind , at least , in and around Boston . This was a community that suffered greatly after the bombing and subsequent manhunt . And they got through it by rallying around each other , a deep bond reflected in the mantra `` Boston Strong . '' That feeling was reaffirmed all around the city by Wednesday 's verdict . And it 's evident in people like Heather Abbott , who lost her left leg below the knee . Since then , she 's become a living example of someone who was n't stopped by the terror -- learning not only to walk again , but to run again . `` Nothing can ever replace the lives that were lost or changed forever , '' Abbott said Wednesday on Facebook . `` But at least there is some relief in knowing that justice is served and responsibility will be taken . '' That view was commonly shared . For those hurt -- physically , mentally , emotionally -- by the horrors of 2013 , Wednesday was key to their progression . But it 's not the end of the road . Just ask Jeff Bauman . The picture of him , bloodied , being rushed through the streets of Boston by good Samaritan Carlos Arredondo , became a symbol of the carnage and heroism from this attack . Even after losing both his legs , Bauman has become a symbol since of resilience -- moving on with his life , by marrying and fathering a child . On Wednesday , Bauman said the verdict `` will never replace the lives that were lost and so dramatically changed . '' `` But it is a relief , '' he added , `` and one step closer to closure . '' CNN 's Ann O'Neill and Steve Almasy contributed to this report . --LRB- CNN -RRB- A popular Chinese television host known for impromptu satire is now the subject of controversy after being caught on camera cursing the late Chairman Mao Zedong . Bi Fujian , who works for state-run China Central Television , was filmed at a dinner party singing a revolutionary song that eulogizes the Communist Party 's early years when he started going off script . `` The Communist Party , Chairman Mao . Do n't mention that old son of a b *** h . He made us suffer so bad , '' went Bi 's improvised lyrics . The other dinner guests burst into laughter . Bi later apologized . `` My personal speech has led to grave social consequences , and I feel remorseful for that . I hereby sincerely apologize to the public . As a public figure , I shall learn the lesson from this incident , adhering to strict self-discipline , '' he posted on Weibo , China 's Twitter-like social media platform . Making disrespectful references to China 's leaders in public is considered a taboo in China , even today . And Bi 's comment was directed at the man regarded by many as the country 's founding father -- despite his controversial reputation . The 75-second video clip , seemingly filmed on the cellphone of another dinner guest , was uploaded on Monday . Since then , it has been removed from video-sharing sites inside China , although it was still accessible on Weibo . It 's unclear when the incident occurred , or what the relationsip was between the camera person and Bi . CCTV said it would investigate . `` As a CCTV presenter , Bi Fujian 's speech in the online video has led to grave social consequences , '' the network said in a statement posted on its Weibo account . CCTV did not respond to a CNN request for comment . Fondly known as `` Grandpa Bi , '' the 56-year-old TV personality was born and grew up in the Mao era . The song Bi riffed on was part of a `` red '' Peking opera that was first performed in the late 1950s . It was popularized during the Cultural Revolution of the 1960s and 1970s -- which was launched by Mao -- when China was torn apart by violence and social unrest . The video quickly divided China 's online community . Critics said Bi , as an influential public figure , deserved a harsh punishment . But others rushed to his defense , arguing that Bi was simply enjoying himself in a private setting and was set up by whoever uploaded the clip . The video also emerged just a day before the new head of CCTV started his job , leading some to wonder if it were a case of `` a new broom sweeps clean . '' Mao still divides opinion in China . His giant portrait hangs on Beijing 's Tiananmen Gate , and thousands flock to see his embalmed body at his mausoleum in Tiananmen Square in the heart of the Chinese capital . But despite this reverence , Mao 's is a deeply flawed legacy . Many remember him as a brutal dictator who inspired fear , paranoia and famine , and whose actions resulted in tens of millions of deaths . CNN 's Shen Lu contributed to this report . --LRB- CNN -RRB- Tornado sirens blared Wednesday night in Kansas as several storms brought reports of twisters . Spotters reported a tornado about 6 miles northwest of Goddard , which is less than 15 miles west of Wichita . That storm moved to the northeast , missing the city , but posing potential risks to other communities . `` There will be storms ... that pop up all night long , '' said CNN severe weather expert Chad Myers . `` Nighttime tornadoes are the most deadly , are the most dangerous . '' Other reports of tornadoes came in from southwestern Kansas , according to the Storm Prediction Center . Three of the sightings were near Aetna , 125 miles southwest of Wichita . Kansas was n't the only state affected by the storms . The National Weather Service indicated a tornado may have touched down in the small town of Potosi , Missouri , about 70 miles from St. Louis . CNN affiliate KMOV reported that it had received reports of wind damage and flooding in the town . One Instagram user there posted a photo of a fallen tree . Aerial footage also showed damage to roofs and one street overtaken by water . Not far away from Potosi , Shyler and Christin Strube in Leadington posted an Instagram picture of some unusual dark clouds . And a Twitter user in Farmington got bad news when he went out to his car . `` They were n't kidding when they said baseball size -LRB- hail -RRB- , '' Kevin Knox wrote . On Thursday , more storms are expected in the Midwest , Mississippi River Valley , Tennessee River Valley and near the southern Great Lakes , the weather service said . CNN 's Sean Morris and AnneClaire Stapleton contributed to this report . --LRB- CNN -RRB- Anyone who has given birth -- or been an observer of the event -- knows how arduous it can be . But to do it live on the Internet ? With two hooves sticking out for several minutes in the midst of labor ? Luckily , Katie -- a giraffe at the Dallas Zoo -- is a champ . In an hour-long labor captured by 10 cameras and streamed live by Animal Planet , Katie gave birth to a not-so-little baby -LRB- about 6 feet tall -RRB- early Friday evening . There was no immediate word on the newborn 's gender or condition . But there were good signs , as seen on the live stream and Dallas Zoo 's Twitter feed -- like its ears moving , its efforts to stand , and its nursing -LRB- or at least trying to nurse -RRB- from mom . `` We 're so proud , '' the zoo tweeted . The newcomer 's debut was a long time coming , especially when you count for Katie 's 15-month gestation period -- average for a giraffe , according to Animal Planet . The baby joins a sister , 4-year-old calf Jamie . It was n't immediately known how many people online saw Katie go into labor and give birth . But the giraffe definitely did have watchers in the form of fellow giraffes who saw the scene unfold from an abutting barn , one of them being Katie 's BFF Jade . The fact that the spunky Katie held up so well under the spotlight is n't a total shocker . The zoo describes her as the `` diva '' among a herd of 12 giraffes at the zoo who loves to `` toss her head around '' when she does n't like something . As Animal Planet noted , `` She 's one of the only giraffes at the Dallas Zoo who can stick her long tongue out on cue . '' CNN 's Justin Lear contributed to this report . --LRB- CNN -RRB- Where do you go from here ? The fourth season of `` Game of Thrones '' saw massive battles , major deaths -LRB- Tywin ! -RRB- and White Walkers , but what can fans expect Sunday as we head into a fifth season of one of the most popular shows in HBO history ? It 's the most high-profile premiere yet , airing simultaneously in 170 countries for the first time . -LRB- HBO is a Time Warner company , like CNN . -RRB- . We sought out `` Thrones '' aficionado Doug Gross , a writer for Nerdwallet and a former CNN employee , who had a few thoughts on the matter -LRB- beware , TV fans , he has read the books -RRB- . `` We 're going to start seeing some of the show 's major story arcs coming together , '' Gross said -LRB- as confirmed by the executive producers -RRB- . `` Already , Stannis has shown up at the Wall to save Jon Snow and the rest of the Night 's Watch from the wildlings , '' he said . `` Now we 'll see how his quest for the Iron Throne collides with the Watch 's supposedly non-political role protecting the realm . '' Tyrion 's path should cross with Daenerys ' this season , according to the trailers . `` Season five also will be unique in that some of the major story arcs will clearly be moving ahead of where George Martin is in the ` Song of Ice and Fire ' books , '' Gross pointed out . Executive producer David Benioff told Rolling Stone , `` We are starting to build to a crescendo , which means the battles have to get bigger and things have to get more dramatic . '' Indeed , this fifth season means we 're past the halfway point , with the show currently set to end after seven years . The Stark daughters , Arya and Sansa , will be the characters to watch this season , as will Cersei . The world of Westeros is constantly plagued by war , but is there a time when people have just had enough ? `` Wars are waged by the nobles , but it 's the common folk who suffer , '' Gross noted . `` And , this season , we 'll get a glimpse of what happens when those common people have had enough . '' --LRB- CNN -RRB- The VII Summit of the Americas was supposed to be all about the symbolic handshake between the United States and Cuba . But insert Venezuela into the mix and Panama City , Panama , quickly turns into a `` triangle of tension . '' Heads of state from 35 countries in the Western Hemisphere have met every three years to discuss economic , social or political issues since the creation of the summit in 1994 . Cuba has historically been the wrench in the diplomatic machinery , with some Latin American leaders threatening not to attend the Summit of the Americas if the United States and Canada did n't agree to invite President Raul Castro . The tide changed December 17 , 2014 , when President Barack Obama and Castro announced that more than five decades of Cold War rivalry was ending . Diplomats from both countries immediately began negotiations to establish embassies in Havana and Washington , and the attention immediately focused on the Summit of the Americas , where for the first time since the about-face , Obama and Castro would come face-to-face . The much anticipated handshake between Obama and Castro would steal all the headlines if it was n't for Cuba 's strongest ally , Venezuela . Venezuelan President Nicolas Maduro recently accused the United States of trying to topple his government and banned former President George Bush , former Vice President Dick Cheney , and Senators Bob Menendez and Marco Rubio from entering Venezuela . `` They ca n't enter Venezuela because they 're terrorists , '' Maduro said , blaming the American politicians for what he called terrorist actions in Iraq , Syria and Vietnam . The U.S. State Department said the allegations of U.S. involvement in a coup plot against Maduro were `` baseless and false . '' Later , Obama issued an executive order sanctioning seven Venezuelan officials for human rights violations and saying the country was a `` threat to national security . '' White House officials said every executive order includes that language , but it has sparked a fiery response from Maduro , who has been collecting millions of signatures demanding the repeal of the order . He also asked for repeal in full-page ads in The New York Times and in a Panama City newspaper . Maduro did n't stop there ; he has been rallying other Latin American leaders , including Bolivian President Evo Morales , Ecuador 's Rafael Correa and Nicaragua 's Daniel Ortega . But perhaps most damning for the United States -- and creating the `` triangle of tension '' at the summit -- Cuban Foreign Minister Bruno Rodriguez has sided publicly with Maduro . `` We reiterate our strong condemnation of the unacceptable and unjustifiable unilateral sanctions imposed against the sister nation of Venezuela and the continued foreign interference with the purpose of creating a climate of instability in that sister nation . We ratify our firmest support to the Bolivarian Revolution and the legitimate government headed by President Nicolás Maduro , '' Rodriguez said . While the world watches for the photo-op of Obama and Castro , it 's unclear if more Latin American diplomats will side with Maduro , and for America , the VII Summit of the Americas could go from `` mi casa es su casa '' to a walk into the lion 's den . --LRB- CNN -RRB- The outlines of a nuclear deal with Iran are in place . Unfortunately , it seems like too many in President Barack Obama 's administration have forgotten that the only reason this terrorist-supporting state came to the negotiating table in the first place was because of tough sanctions imposed by the U.S. Congress . Indeed , the reality is that President Obama is giving up enormous leverage in his nuclear deal with Iran -- and I worry we will lose it for good . Bleeding money , and faced with falling oil prices , Supreme Leader Ayatollah Khamenei gave his government rare permission to bargain with the `` Great Satan '' -- the United States . But just as U.S. and European sanctions were forcing Iran to the nuclear crossroads , President Obama has given Tehran an easy exit . For Khamenei , the `` framework '' announced last week looks like a win-win : He gets to keep his nuclear infrastructure , and in return gets billions of dollars in sanctions relief . Congress offered a better strategy when the top Democrat on the Foreign Affairs Committee , Eliot Engel , and I introduced a bill to hit Tehran with its toughest sanctions yet . Unfortunately , this bill -- which passed the House in a 400-20 vote -- was blocked in the Senate last year , despite the fact that it would have sharpened the Ayatollah 's choice : Dismantle your nuclear weapons program or see your economy collapse . President Obama once had a tougher line , when in 2012 he said : `` The deal we 'll accept is they end their nuclear program . It 's very straightforward . '' But the framework announced last week does nothing of the sort . Negotiated between Iran and the United States , Russia , China , Britain , France and Germany , the framework concedes that Iran can maintain `` a mutually defined enrichment program , '' operate thousands of centrifuges , and continue its research and development of nuclear technologies . The deal currently on the table would hand Tehran billions of previously sanctioned funds , filling the coffers of the world 's biggest state sponsor of terrorism , with strongholds in Syria , Iraq , Yemen and Lebanon . Meanwhile , the strictest restrictions on Iran 's enrichment will expire in only 10 years , despite the President receiving a letter from 367 Members of Congress -- both Democrats and Republicans -- in which we insisted that `` verifiable constraints on Iran 's nuclear program must last for decades . '' The President admitted as much when he conceded that `` in year 13 , 14 , 15 , they have advanced centrifuges that enrich uranium fairly rapidly , and at that point the breakout times would have shrunk almost down to zero . '' But as bad as these concessions are , the most concerning aspect of the April 2 deal is that it lacks tough safeguards to stop Iran from cheating . The key question is this : Will the inspectors at the International Atomic Energy Agency be allowed to inspect these military sites without warning ? Because if the IAEA can not conduct `` anytime , anywhere '' inspections , Iran will be able to `` sneak out '' to a bomb . It has been done before . Remember , in 1994 , when President Bill Clinton told us he had struck a deal with North Korea that would `` make the United States , the Korean Peninsula , and the world safer '' ? President Clinton sounded a little too much like the current Secretary of State John Kerry , when he promised that the North Korea agreement `` does not rely on trust '' and that `` compliance will be certified by the International Atomic Energy Agency . '' Twelve years after these assurances , North Korea detonated its first nuclear bomb . Iran could easily do the same . The best predictor of its future behavior is its past behavior -- between 2004 and 2009 , the Iranian government built a huge centrifuge facility named Fordo under a mountain deep in the Iranian desert . Luckily for the world , Western intelligence agencies discovered Tehran 's deception . But we can not rely on such luck in the future , particularly when Iran still has n't come clean about its history of secret weapons development and is still dodging basic questions from the IAEA . Let 's not forget the other things Iran has been doing while its diplomats have been bargaining with the U.S. and its partners . While Iran was showing its friendly new face to the world , it has simultaneously been helping Syrian dictator Bashar al Assad kill his own people , training and funding the terrorist group Hezbollah , which aims to annihilate Israel , and supporting the Houthis , who started a civil war and overthrew the government in Yemen -- one of America 's more reliable counterterrorism partners in the region . If President Obama is going to hand over billions of dollars to a regime that behaves like this , run by a man who publicly declares : `` Death to America , '' it has to be a better deal . The framework we have before us keeps Iran 's nuclear door well and truly open . -Waterloo , Iowa -LRB- CNN -RRB- Martin O'Malley and Jim Webb share little in common . Both Democrats are toying with a presidential run , both are facing long odds in that endeavor , and both shared a stage at the Polk County Democrats Awards Dinner in Des Moines , Iowa , on Friday night . But , as was evident at the dinner , that is where the similarities end . O'Malley is a former mayor and Maryland governor who seems most at home when he is pressing the flesh at events and introducing himself to anyone who would extend their hand . Webb , on the contrary , is a decorated Vietnam War veteran and former senator from Virginia who comes across as more stoic and , at times , uncomfortable with retail politics . Before the event , O'Malley confidently cruised the union hall . He took selfies with young environmental activists and chatted with sometimes tepid supporters who admitted their other political allegiances . `` It is a marathon , not a sprint , '' one man told O'Malley , a nod to his long odds in the 2016 Democratic nomination process . `` Yes , it is ; it 's a marathon , '' O'Malley responded . `` Welcome to Iowa , '' said another man . `` We hope to see you here more . '' O'Malley smiled , `` Thanks a lot . I hope you do , too . '' Webb was n't nearly as active , opting instead to stay close to his seat near the front of the venue and chat with a small group of people around him . As Webb cut into his sizable helping of pork , O'Malley was standing directly behind him , shaking hands . The former Virginia senator , after possibly seeing O'Malley making the rounds , did stand up and shake hands with a few of the diehard Democratic activists in the room . `` Seven months old , '' Zach Smith , a new father , said of his baby boy , Noah . `` I have a bunch of kids . The youngest one is 8 years old , '' Webb said . The baby looked up at the senator . `` He is pretty calm , '' Webb remarked , himself calm . Despite coming from bordering states , Webb and O'Malley do n't know each other . When they passed each other in a Des Moines hotel lobby on Friday morning , it was the first time the two had met . That said , the two Democrats find themselves in the same position . Hillary Clinton , the former secretary of state who is set to announce her presidential bid Sunday , leads every national and state poll of the Democratic field . She has begun to build a sizable staff and is expected to have massive amounts of money to win the nomination . O'Malley and Webb are both looking up at her . In a March CNN/ORC poll -LRB- PDF -RRB- of national Democrats , only 1 % said O'Malley and Webb were their top choice . In a January poll from Bloomberg Politics and the Des Moines Register -LRB- PDF -RRB- , O'Malley was at 1 % among Iowa Democrats , while Webb found himself at 3 % . The speaking portion of the night further showed Webb and O'Malley 's differences . Webb , who spoke before the governor , gave a more subdued , biographical speech that mentioned three areas he would focus on if he ran for president : Basic governance , economic justice and criminal justice reform . To the approval of the audience , Webb promised to come back to Iowa regularly . `` I am committing to you right now , '' he said , `` we are going to go over the whole state . '' And the biggest applause came near the end of his speech , when he urged his party to get back to talking about issues . `` Money is ruining our political process , '' Webb said to a chorus of applause and `` hear hear . '' O'Malley , on the other hand , gave a speech littered with intentional applause lines . At points , the governor would deliberately stop to allow for the silence to be filled with clapping hands . `` When the American Dream is denied , our lives shrink , our hopes fade , and our days unfold not in the light of possibility but in the darkness of fear , '' O'Malley said , delivering the same stump speech he usually gives . `` To make the dream true again , we must fight for better wages for all workers , so that Americans can support their families on what they earn . '' As the event wound down , Webb and O'Malley stuck around to shake more hands and meet people . O'Malley , who spent the previous day in Iowa , left Friday night for New York . Webb , who is in the midst of a four-day trip to Iowa , stayed in Des Moines and headlined a veterans event on Saturday morning in Waterloo . Webb regularly speaks about his service and appeared more at home at the event . He told war stories with young and old veterans and spoke at length about how the government could be doing more for veterans . He also touted his work on passing the 21st Century G.I. Bill of Rights , a 2008 act that expanded education benefits for veterans , and stressed that more needed to be done . `` You want the next greatest generation , give them the same opportunity the the greatest generation had , '' Webb said to applause . `` If you really want to thank them , hire a vet . '' After the event , Webb shook hands with people veterans who told stories about dropped benefits and problems with the Department of Veterans Affairs . He occasionally smiled and thanked people for coming on a sunny Saturday morning . Asked whether he enjoys the retail politics that is crucial in early voting states like Iowa and New Hampshire , Webb smiled . Skepticism of retail politics is not new for Webb . As a one-term Democratic senator , Webb was rumored to loathe the burdens that came with campaigning , namely fundraising and retail politics . This time , he put on a rosy view . `` This is the good part of it , `` Webb said , with a laugh . `` Talking to the media , that is not always the good part . '' -Charleston , South Carolina -LRB- CNN -RRB- Police officers Saturday accompanied the hearse carrying the body of Walter Scott to his South Carolina funeral service , where hundreds of mourners celebrated his life and death as a catalyst for change in America . A pair of officers on motorcycles were part of the large procession delivering the father of four -- who was fatally shot in the back by a police officer -- to a service open to the public . An overflow crowd gathered on a humid and occasionally rainy April afternoon at W.O.R.D. Ministries Christian Center in Summerville , which has a capacity of about 300 people . The flag-draped casket of the U.S. Coast Guard veteran was wheeled inside the church as Scott 's relatives and friends followed . Some dabbed tears ; others embraced . Hundreds , including local officials , assembled inside the packed sanctuary -- in corridors , under an awning at the entrance , wherever they could stand . Silence filled the vast space as Scott 's daughter Samantha read a poem of love dedicated to her father . Anthony Scott said God had selected his brother as a candidate for change in America . `` The change will come , '' he said , bringing to the crowd to its feet . The head of the church , George Hamilton , spoke of how Scott had brought members of his family to the church , of the agony of not only losing a family member but having to watch it happen on video . The death of Scott , who was black , at the hands of a white police officer was `` motivated by racial prejudice , '' Hamilton said . It was `` an act of overt racism . '' `` Hate came because Walter was an African-American , '' he said . Hamilton said his remarks were not meant as an indictment of law enforcement , but he singled out the officer who killed Scott as a `` disgrace to the North Charleston Police Department . '' `` There is gong to be change , '' he said . `` Walter 's death will not be in vain . '' After the service , pallbearers gently lifted Scott 's casket into the hearse . Crowds poured from the church . A slow-moving procession of black cars then made its way to Live Oak Memorial Gardens in Charleston for the private burial . Chris Stewart , an attorney for the Scott family , said the death represented more than an race issue . `` It 's a human issue , '' he said . `` We 're getting emails from people in Arkansas telling us , ` I 'm a white male , and I 'm supporting this family . ' Their son is going to be remembered for changing the way we look at each other . '' On Friday night , Scott 's open casket was draped with an American flag , and he was in a dark suit for his private visitation in Charleston . A Dallas Cowboys banner -- his favorite NFL team -- was placed outside the casket , and a figurine of a Cowboys player stood at his side . But Scott 's family was missing . They needed privacy , said Charleston Mayor Joseph Riley , who attended . A week ago , Scott was killed in North Charleston after getting pulled over for a broken taillight . A passer-by caught the shooting on cell phone video , and Officer Michael Slager was swiftly charged with murder . He was fired and faces life in prison or the death penalty if convicted . Who was Walter Scott ? The video shows Scott running from an officer , who fires eight shots . Scott is struck five times ; he falls to the ground . `` Nothing in this video demonstrates that the officer 's life or the life of another was threatened , '' National Urban League President Marc Morial said . `` The question here is whether the use of force was excessive . '' But one witness is speaking of a struggle before the shooting . And at least one expert believes a murder charge may not hold up . On Thursday , Gwen Nichols told CNN 's Brian Todd that she saw Scott and Slager scuffling at the entrance to a vacant lot . `` It was like a tussle type of thing , like , you know , like , ` What do you want ? ' or ` What did I do ? ' type of thing , '' Nichols said . `` I did n't hear Mr. Slager saying ` Stop ! ' '' Nichols ' account has similarities to Slager 's . He had told investigators that he had tussled with Scott over his Taser and that he feared for his safety . A timeline of events . Criminal defense attorney Paul Callan said he believes Slager 's defense will play up the reported scuffle in arguing that this is not a murder case . `` Defense attorneys will say this was a heat of passion shooting -- -LRB- that -RRB- this was something that he did suddenly after some kind of an altercation , a physical altercation with a suspect , '' Callan said . `` And that would constitute manslaughter under law , as opposed to murder , and it makes a huge difference in sentencing . '' In South Carolina , a murder conviction requires a measure of premeditation . But the account from the witness who recorded the cell phone video , Feidin Santana , paints a different picture . He was walking to work when he saw Slager on top of Scott , he said , who was on the ground . Santana said he could hear the sound of a Taser in use . He said he did n't see Scott go after the Taser , as Slager initially claimed . He said he believes Scott was trying to get away . `` Mr. Scott never tried to fight , '' Santana said . Neither the struggle nor the use of a Taser was captured on video , because Santana started recording shortly after that . Investigators from the South Carolina Law Enforcement Division found troubling inconsistencies from the very start , it said in a statement . `` We believed early on that there was something not right about what happened in that encounter , '' division Chief Mark Keel said in a statement . `` The cell phone video shot by a bystander confirmed our initial suspicions . '' Slager 's lawyer , Andy Savage , has complained that he `` has not received the cooperation from law enforcement that the media has . '' Savage 's office said in a statement that it has yet to receive `` any investigative documents , audio or video tapes , other than a copy of Mr. Slager 's arrest warrant . '' The news release added that the lawyer has been advised that the police union that Slager belongs to `` is no longer involved in the case . '' Charleston County Sheriff Al Cannon said Slager 's wife , Jamie , who is eight months ' pregnant , and his mother had a visit with him at the county detention center Friday . Slager was being held in isolation and being `` monitored for his mental health , '' Cannon said . In a statement , one of Slager 's lawyers said the meeting lasted about an hour . `` His wife and mom were tearful but strong , and they were all very grateful for the chance to see him in person , even if separated by a thick pane of glass , '' the statement said . `` They held up family photos -- and even Jamie 's ultrasound from earlier that day -- to remind him of all those who love him . Throughout the visit , Michael was focused on Jamie and their baby and was very relieved to know that she is being shown so much love and support by their families . '' A second video , taken from a police dash cam , has also emerged from the day Scott died . It shows moments before the shooting , when things seemed to be going smoothly between Scott and Slager . Scott apparently tells the officer that he has no insurance on the vehicle , and Slager returns to his car to do paperwork . Then Scott gets out of the car and runs out of the camera 's frame . Scott was the subject of a bench warrant over $ 18,104.43 in unpaid child support at the time of the stop , according to court records . That was why he ran , lawyers for the family said after the funeral service . U.S. Rep. James Clyburn , D-South Carolina , told reporters outside the service that Scott lost a $ 35,000-a-year job the first time he was jailed for failing to pay child support . `` He said it was the best job he 's ever had , '' Clyburn said . `` Now you have to ask ... if you want to collect child support , there 's got to be income . And you ai n't going to make much income from jail . It seems to me that we need to take a look to how to deal with that issue without causing unemployment and the loss of freedom . '' On Friday afternoon , police met with a man who was in Scott 's car , but the passenger 's name was n't in a police report obtained by CNN . He was detained briefly after the shooting , one officer wrote in the report . Scott family attorney Chris Stewart said he was a co-worker and friend . But he did not identify the passenger by name . On Friday , a few mourners trickled into the Fielding Home for Funerals . A white banner with a blue star near Scott 's casket displayed his favorite NFL team . It said : `` Tradition , the Cowboys way . '' `` This is a heartbreaking tragedy for everyone in our community , '' said Riley , the mayor . `` It breaks everyone 's hearts . '' CNN 's Polo Sandoval and Martin Savidge reported from Charleston , and Ben Brumfield and Ray Sanchez reported and wrote in Atlanta and New York . -Washington -LRB- CNN -RRB- Washington was rocked late Thursday by shootings -- one at the gates of the U.S. Census Bureau 's headquarters and another in a popular area packed with restaurant patrons . The shootings were connected , authorities said . They began with what authorities believe was a domestic kidnapping incident , according to D.C. Police Chief Cathy Lanier . The suspect 's vehicle was spotted outside the Census Bureau , which is in Suitland , Maryland . A guard apparently approached the vehicle and saw two people arguing . That guard was then shot at least once in the upper body , said Prince George 's County Fire Department spokesman Mark Brady . The guard was in extremely critical condition , according to Brady . The police chief said the suspect then fled the scene . Officers picked up the chase , and the suspect fired gunshots at multiple locations , Lanier said . The chase ended in a crash on Washington 's busy H Street . A shootout ensues , Lanier said . An officer and the suspect were wounded , according to the police chief . Both were conscious and talking when they left the scene . `` Right now , we have every reason to believe that the car that we have in this last incident here is the same car involved and the same person involved in the kidnapping , '' she said . Lanier told reporters the kidnapping victim was located and is in good condition . She did not identify the suspect , nor the guard , nor the officer who were injured . Steve Brusk reported from Washington . Dana Ford wrote from Atlanta . CNN 's Greg Botelho also contributed to this report . -Washington -LRB- CNN -RRB- An Iranian military observation aircraft flew within 50 yards of an armed U.S. Navy helicopter over the Persian Gulf this month , sparking concern that top Iranian commanders might not be in full control of local forces , CNN has learned . The incident , which has not been publicly disclosed , troubled U.S. military officials because the unsafe maneuver could have triggered a serious incident . It also surprised U.S. commanders because in recent months Iranian forces have conducted exercises and operations in the region in a professional manner , one U.S. military official told CNN . `` We think this might have been locally ordered , '' the official said . The incident took place as the U.S. and other world powers meet with Iran in Switzerland to negotiate a deal limiting Tehran 's nuclear program . At the same time , Iran has been active in supporting proxies in several hotspots in the Persian Gulf and neighboring regions . The Navy MH-60R armed helicopter was flying from the deck of the USS Carl Vinson on a routine patrol in international airspace , the official said . An unarmed Iranian observation Y-12 aircraft approached . The Iranian aircraft made two passes at the helicopter , coming within 50 yards , before the helicopter moved off , according to the official . The official said the helicopter deliberately broke off and flew away in a ` predictable ' manner so the Iranians could not misinterpret any U.S. intentions . The Navy helicopter was in radio contact with the ship during the encounter , but there was no contact between the two aircraft and no shots were fired . The Navy crew took photos of the incident but the military is not releasing them . The U.S. administration is considering a potential demarche protest against Iran , the official said . CNN has reached out to Iranian officials but has not received a response . This type of Iranian observation aircraft generally operates over the Gulf several times a month . But after the recent incident , U.S. naval intelligence did not see it again for two weeks , leading to the conclusion that the incident may have been ordered by a local commander who was then reprimanded by higher-ups . The Pentagon has noted for the last several years that most encounters with the Iranian military at sea or in air are conducted professionally , but that some missions run by Iranian Revolutionary Guard Corps forces have been too aggressive against U.S. forces in the area . The U.S. military 's concern has been that one of these incidents could escalate into a military encounter . This incident `` might have been buffoonery '' the official said , but there is always a risk from such actions . The incident comes as the Navy patrols the Gulf of Aden to watch for Iranian ships the U.S. believes are trying to bring weapons to resupply the Houthi rebels in Yemen . The Navy would share such intelligence with Saudi Arabia , a second U.S. official told CNN . -New York -LRB- CNN -RRB- When Liana Barrientos was 23 years old , she got married in Westchester County , New York . A year later , she got married again in Westchester County , but to a different man and without divorcing her first husband . Only 18 days after that marriage , she got hitched yet again . Then , Barrientos declared `` I do '' five more times , sometimes only within two weeks of each other . In 2010 , she married once more , this time in the Bronx . In an application for a marriage license , she stated it was her `` first and only '' marriage . Barrientos , now 39 , is facing two criminal counts of `` offering a false instrument for filing in the first degree , '' referring to her false statements on the 2010 marriage license application , according to court documents . Prosecutors said the marriages were part of an immigration scam . On Friday , she pleaded not guilty at State Supreme Court in the Bronx , according to her attorney , Christopher Wright , who declined to comment further . After leaving court , Barrientos was arrested and charged with theft of service and criminal trespass for allegedly sneaking into the New York subway through an emergency exit , said Detective Annette Markowski , a police spokeswoman . In total , Barrientos has been married 10 times , with nine of her marriages occurring between 1999 and 2002 . All occurred either in Westchester County , Long Island , New Jersey or the Bronx . She is believed to still be married to four men , and at one time , she was married to eight men at once , prosecutors say . Prosecutors said the immigration scam involved some of her husbands , who filed for permanent residence status shortly after the marriages . Any divorces happened only after such filings were approved . It was unclear whether any of the men will be prosecuted . The case was referred to the Bronx District Attorney 's Office by Immigration and Customs Enforcement and the Department of Homeland Security 's Investigation Division . Seven of the men are from so-called `` red-flagged '' countries , including Egypt , Turkey , Georgia , Pakistan and Mali . Her eighth husband , Rashid Rajput , was deported in 2006 to his native Pakistan after an investigation by the Joint Terrorism Task Force . If convicted , Barrientos faces up to four years in prison . Her next court appearance is scheduled for May 18 . --LRB- CNN -RRB- #UporDown ? That 's the trending question on social media , thanks to a photo of a cat coming down some stairs . Or is it going up some stairs ? -LRB- And you thought you were done with this kind of optical illusion free-for-all after #TheDress . -RRB- . The picture was apparently uploaded on Imgur a few days ago and has caught fire thanks to a post on the website 9gag . com . Some people are noting the apparent motion of the cat . Others are commenting about the construction of the stairs . -LRB- Nobody has mentioned that some cats we could name would be more likely to stop in the middle of the steps and play with a mousie . -RRB- . Of course , where there 's public debate , there are advertisers waiting to take advantage of the situation . Taxes ? Now , those are REALLY confusing . --LRB- CNN -RRB- I remember the day I stopped praying . It was the day after my little brother , Jimmy , died of cancer . He was 25 . I was so angry at God . I was 27 at the time , and , like most young people I had stopped going to church . But , on that day -- that terrible day -- I desperately needed to understand why God took my brother . I called the nearest Catholic church , looking for a priest . A lady picked up the phone . `` Can I talk with Father ? '' I asked . I wish I could say her answer was `` yes . '' Instead , she asked me if I was a member of that particular parish . `` Does it matter ? '' I asked . -LRB- At the time I lived far from my home parish . -RRB- I do n't remember how she responded , but the answer about my being able to see Father was clearly no . I do n't know if all Catholic churches would have shut me out , but I figured , at the time , it was part of the long list of rules the Vatican required Catholic leaders to follow . I cried for a bit , then decided I would never ask God for anything . Clearly , his conduits on Earth did not have time for me -- a lifelong Catholic -- and sinner -- so why would he ? Ever since , I 've considered myself a lapsed Catholic . Until Pope Francis . There is something about Francis that 's reawakened my faith . And it 's not because he opened the floodgates to allow sin in the eyes of the church . He still argues against things I passionately support , but I find myself -- like many other lapsed Catholics -- enthralled . Recently I had the pleasure of meeting one of the Pope 's newly appointed cardinals . His name is Cardinal Gerald Lacroix . The 57-year-old presides at the Basilica Cathedral of Notre Dame in Quebec City . One of my first questions : What is it about Pope Francis ? `` Every person is a mystery you know . ... But what 's evident is this man is living with such freedom , such inner freedom . He 's himself . He 's in tune with the Lord , '' Lacroix told me . `` Those close to him say he 's up close to 4 in the morning to prepare his daily Mass , which is at 7 in the morning on the weekdays . So that 's almost three hours of prayer , preparation and silence before the Lord and the word of God . Wow , that really fine-tunes you to start off a day . '' Perhaps that 's how the Pope stays humble . Why he defies tradition and washes the feet of the disabled , women and those of other faiths . Why he ordered showers to be built for the poor in St. Peter 's Square . All of this is appealing , but it 's more than that . In my mind , it 's his tone . When Pope Francis said , `` If a person is gay and he searches for the Lord and has good will , who am I to judge ? '' The comment took me aback . Homosexuality has long been a taboo subject for the Vatican , yet Pope Francis uttered those welcoming words . Lacroix likened the Pope 's approach to Jesus . `` Jesus did n't judge . Jesus did not come as a judge . He came as someone who preached and talked about the love of God . '' Those kinds of answers are so different in my experience , but I understand why more conservative Catholics worry . If the Pope does not judge , then who will tell us who is a sinner and who is not ? `` I hear that sometimes , too , '' Lacroix told me . `` I think Pope Francis is conservative in the right way . You have to be conservative enough to come back to what is the foundation : that 's the Gospel . You can not reproach Pope Francis of not living the Gospel , or not preaching the truth of the Gospel . '' But is n't homosexuality a sin in the eyes of the church ? `` There is room for everyone . The door is open , '' Cardinal Lacroix insisted . `` Of course you know that the Catholic Church will never promote same sex marriage , but do we respect homosexual persons ? Do we welcome them ? Do we accompany them ? Of course . But to respect the Church and its teaching , which is based on a long tradition and also the word of God , we will not go so far as to bless . But that does n't mean we reject . '' That last sentiment -- `` that does n't mean we reject . '' -- did it for me . I finally understood why Pope Francis reawakened my faith . I always felt my church would reject me for committing the smallest of sins . Like calling a priest at a church that was not my home parish . Like not covering my head with a traditional veil at Easter . Like accidentally eating meat on Holy Friday . Like supporting the use of contraception . But as Lacroix told me , Jesus walked with sinners until the very end . He did not banish them to fires of hell , for He refused to give up on anyone . The Cardinal 's last words to me : `` I 'm trying to do my best on -LRB- the -RRB- local level -- to have an open ear to what the church and world are experiencing . To see how we can today respond to those needs . I want people to see me , and the church , as an open heart to grow together . Not a church that 's imposing -- we have nothing to impose -- we have someone to propose : the Lord Jesus and his Gospel . '' I ca n't wait to go church next Sunday . And , yes , I will bow my head and pray for forgiveness , and if I 'm worthy , Christ 's love . --LRB- CNN -RRB- Mullah Mohammed Omar is `` still the leader '' of the Taliban 's self-declared Islamic Emirate of Afghanistan . That appears to be the primary message of a biography , just published by the Taliban , of the reclusive militant who is credited with founding the group in the early 1990s . The Taliban 's `` Cultural Commission '' released the 11-page document in several different translations on the movement 's website , ostensibly to commemorate the 19th anniversary of an April 4 , 1996 , meeting in Afghanistan 's Kandahar province when an assembly of Afghans swore allegiance to Omar . Several Afghan observers say the biography is aimed at dispelling rumors of Omar 's demise . `` There have been a lot of rumors lately about him . Some people are saying that he is not alive , '' said Sayyed Muhammad Akbar Agha , a former Taliban insider who has written an autobiography about his days with the movement . `` I think the Taliban thought it was an important time to release his biography to give assurances that he is alive and present , '' Agha told CNN in a telephone interview . Bergen : Why U.S. must stay in Afghanistan past 2016 . The biography also appears to be an attempt to remind the world of the Afghan 's jihadi leadership credentials , at a time when ISIS leader Abu Bakr al-Baghdadi has declared himself `` caliph '' of the world 's Muslims . `` The Taliban has a huge leadership problem at a critical political moment , '' said Graeme Smith , a Kabul-based analyst for the International Crisis Group . `` Another caliph has announced himself to the world , and the Taliban has been silent . And that is getting noticed by militants across South Asia . '' Omar was famously camera-shy during the Taliban 's six-year rule over most of Afghanistan . To this day , there are only a handful of photographs of the one-eyed leader . `` He never was actively involved in any of these propaganda campaigns . No publicity . No interviews . He never used the Internet , '' said Rahimullah Yusufzai , a Pakistani journalist and expert on Afghanistan who once interviewed Osama bin Laden . Omar then all but disappeared after a U.S.-led bombing campaign routed the Taliban from Kabul in 2001 . Washington has offered a $ 10 million reward for his capture . The Taliban have released written statements purportedly made by the leader-in-hiding . But years without any video or audio recordings of the fugitive have led to growing speculation that Omar may have died . The biography challenges rumors of Omar 's death by offering a description of his daily work schedule , which begins with prayers , study of the Quran , and then delivering `` orders in a specific way to his Jihadi commanders . '' The publication also seeks to fill in some of the gaps about the militant 's early years , including the detail that his `` preferred weapon of choice '' was the RPG-7 , a rocket-propelled grenade . According to the biography , Omar was born in 1960 in a village called Chah-i-Himmat in Afghanistan 's Kandahar province . His father , a `` well-known and respected erudite and social figure , '' died only five years later , apparently of natural causes . Omar studied at a religious school , or madrassa , run by his uncle . The rise of the Communist Party in Afghanistan , and the subsequent 1979 Soviet invasion , interrupted the young man 's studies and propelled him into the arms of the armed Afghan opposition known as the mujahedeen . For the next decade , Omar commanded rebel groups `` against the invading Russians and their internal communist puppets , '' according to the biography . Along the way , he was wounded a number of times and was blinded in his right eye . In one battle , the biography claims , Omar and a fighter named Mullah Biradar Akhund destroyed four Soviet tanks , even though they were armed with only four RPG rounds . The Taliban biography makes no mention of the fact that the U.S. , allied with Saudi Arabia and Pakistan , helped arm and bankroll the mujahedeen until the Soviet army withdrew in defeat in 1989 . Afghan historians have documented the rapid rise of the Taliban in the chaotic years after the communist government in Kabul collapsed in 1992 . The movement of warriors who identified themselves as religious scholars emerged to bring order to a country being ripped apart by rival mujahedeen warlords who battled one another for power . The Taliban biography says that Omar and his compatriots `` launched their struggle and fight against corruption and anarchy '' after an initial meeting in Kandahar in June 1994 . Two years later , the Taliban captured Kabul and began imposing its austere interpretation of Islamic law on the rest of the country . While the document denounces the Taliban 's post-9 / 11 overthrow at the hands of a U.S.-backed coalition of rival Afghan fighters , it makes no mention of the Taliban 's alliance with bin Laden and al Qaeda . During a decade in exile , the Saudi-born bin Laden continued to release periodic video and audio statements until he was killed by U.S. raid on his hideout in the Pakistani city of Abbottabad in 2011 . Though Taliban militants have continued to battle the U.S.-backed government across Afghanistan , Omar has not been seen or heard from in years . The movement claims he continues to oversee a Taliban leadership council , judiciary and nine executive commissions , as well as military commanders who operate in all 34 provinces of Afghanistan . Exclusive : ISIS ` recruits Afghans ' in chilling video . CNN 's Masoud Popalzai contributed to this report from Kabul , Afghanistan . --LRB- CNN -RRB- An Amnesty International report is calling for authorities to address the number of attacks on women 's rights activists in Afghanistan . The report , entitled `` Their Lives on the Line , '' examines the persecution of activists and other champions of women 's rights not only by the Taliban and tribal warlords , but also by government officials . Its publication is timely . The brutal murder of Farkhunda , a young woman in Afghanistan , whose body was burnt and callously chucked into a river in Kabul , shocked the world . Accused of burning pages from the Muslim holy book , the Quran , many protested the 27-year-old 's innocence . But what also made international headlines was the fact that for the first time in history , women in Afghanistan became pallbearers , hoisting the victim 's coffin on their shoulders draped with headscarves , under the gazes of men ; unreservedly sobbing and shouting messages of women 's solidarity as they marched along the streets . In a country ranked in 2011 by a Thomson Reuters Foundation poll as the most dangerous place in the world for women , this feminist act seemed perilous . Latest figures suggest they were risking their lives to be heard . In 2013 , the U.N. Assistance Mission in Afghanistan -LRB- UNAMA -RRB- released statistics that showed the number of women killed in the country had increased by 20 % from the previous year , although the number of civilian victims had decreased , said Amnesty in the report . The Special Representative of the U.N. Secretary-General in Afghanistan at the time , Jan Kubis , told the U.N. Security Council that `` the majority -LRB- of women killed -RRB- is linked to domestic violence , tradition , culture of the country . `` Women activists have been deliberately targeted . '' And according to the human rights group , little support has come from those in power . `` The Afghan government has done very little to protect them , '' Amnesty 's Afghanistan researcher , Horia Mosadiq , tells CNN . `` Perpetrators almost always walk free , and threats reported by women rights defenders are often simply ignored . `` Many women defenders we spoke to said that even when they received some protection from authorities , it was often significantly less than what male counterparts or colleagues were afforded . '' During the attack on Farkhunda , `` many eyewitnesses have testified that police officers stood idly by while this woman was being lynched and killed , '' says Mosadiq . Twenty-six people were arrested and thirteen police officials suspended in connection with the attack , but she argues that this is insufficient . `` Suspending police officers is not enough , those who failed in their duty must also be held to account -- anything less will just encourage further mob violence . '' But what is striking is the resilience of the activists , who continue their work despite their lives being on the line . `` It was a remarkable moment , '' says Mosadiq , recalling the female protesters at Farkhunda 's funeral . `` Unlike anything I have seen in my decades of campaigning for women 's rights in our country . '' Selay Ghaffer , 32 , is a women 's rights activist and spokesperson for the Solidarity Party of Afghanistan -- a small but outspoken political party based in Kabul and twenty provinces that fights for issues such as democracy , social justice and women 's rights . The party was the first to be banned in the country for accusing Afghan leaders and commanders of war crimes and demanding that they be brought to justice . Taking part in Farkhunda 's funeral and protests against her death , she tells CNN that despite the onslaught of violence against Afghan women over the years , this was the worst case . But the opportunity was taken to deliver a clear message . `` So the women of Afghanistan showed that we will not keep silent anymore ... And we are not ready to accept more brutality and violence against women , '' said Ghaffer . `` So this is why we decided to carry the dead body of Farkhunda on our own shoulders and show to the world that not only men can do it and somehow broke the traditionalism that -LRB- a -RRB- man has to do this job . '' Surprisingly , she says that male onlookers supported their mission , although they are in the minority overall in the country . `` Men -LRB- at the funeral -RRB- , they said you have to do this , because this is how you can change the hatred in Afghanistan . `` Without men , it is not possible for women to get their rights , '' she says . `` So these men and women were working together . But at the same time , women need to step forward for their rights . '' Mosadiq says the fight for women 's rights was established a while ago . `` Women 's activism in Afghanistan is nothing new -- the women 's rights movement has grown substantially since 2001 , and has fought for and achieved some very significant gains . `` These gains are under threat now , however , and some are even rolled back . It 's essential that the government and its international partners do not allow this to happen . '' Ghaffer herself has been subject to threats because of her work , received through emails and phone calls , at her home and office . But she says she knew what she was getting herself into . `` I knew it was n't an easy task . There might be many challenges and you have to lose your life when you are going and struggling for your rights . `` As a woman , I want to struggle more -LRB- for my rights -RRB- , I want to have more people around me , to struggle with me . '' Mosadiq says it is too soon to talk about a revolution , although the response to Farkhunda 's killing , from both men and women , has been a `` silver lining . '' Ghaffer , however , believes this is the beginning of an uprising -- but she says it needs to keep moving . Interestingly , it was a man in her life that motivated her to fight . `` I must say strongly that it was my father -LRB- who inspired me -RRB- , who is not any more with me , because he ... died three months ago , '' she says . `` He always told me that women always suffered in this country , '' she says , her voice overcome with emotion . `` And you have to struggle for your rights . Because in this traditional , patriarchal society , nobody will give these rights -LRB- to -RRB- you . '' She realizes how lucky she is , she adds , in a society where she has witnessed men -- fathers and husbands -- oppressing women as opposed to being their role models . Ghaffer maintains that silence is an injustice to women , not least to the victim of the recent , horrific mob violence . `` So if I should not do it , if another sister is not doing it , then who will do it ? Who will get the rights for us ? We have to struggle for it . `` If we keep our silence , more Farkhundas will be killed in this country . '' --LRB- CNN -RRB- Hip-hop star Nelly has been arrested on drug charges in Tennessee after a state trooper pulled over the private bus in which he was traveling , authorities said . The 40-year-old rapper from St. Louis , who shot to fame 15 years ago with the track `` Country Grammar , '' has been charged with felony possession of drugs , simple possession of marijuana and possession of drug paraphernalia , the Tennessee Department of Safety and Homeland Security said . The state trooper stopped the bus carrying Nelly and five other people on Interstate 40 in Putnam County on Saturday because it was n't displaying U.S. Department of Transportation and International Fuel Tax Association stickers , according to Tennessee authorities . The trooper was about to conduct an inspection of the bus , a Prevost motor coach , when he `` noticed an odor of marijuana emitting from the vehicle , '' authorities said in a statement . Two troopers then searched the bus , finding `` five colored crystal-type rocks that tested positive for methamphetamine , as well as a small amount of marijuana and other drug paraphernalia , '' the statement said . The search also turned up several handguns and 100 small Ziploc bags , which the statement said are commonly used for selling drugs . The guns included a gold-plated .50 - caliber Desert Eagle pistol , a .45 - caliber Taurus pistol and a .500 Smith & Wesson magnum . Nelly , whose real name is Cornell Haynes , was taken to the Putnam County Jail along with another passenger . He later posted bond and left the jail , the Putnam County Sheriff 's Office said . CNN could n't immediately reach Nelly 's representatives for comment Saturday . CNN 's Janet DiGiacomo contributed to this report . --LRB- CNN -RRB- `` Star Wars '' fans will get more than they bargained for when the saga comes to digital HD on Friday . The collection of the first six `` Star Wars '' movies will also include many special features , some of which give fans a rare glimpse behind the scenes of the saga . One focus of the features will be the sound effects of the movies , including that of the insect-like Geonosians , as seen in `` Star Wars Episode II : Attack of the Clones . '' ` Star Wars ' universe gets its first gay character . In the exclusive first-look video , sound designer Ben Burtt explains which animals were used to capture the alien sounds made by the Geonosians . Take a look at the video above to find out . ` Star Wars ' films available for digital download for first time . --LRB- CNN -RRB- Hillary Clinton is finally announcing her candidacy for the 2016 presidential election . Although she has watched her standing in the polls sag in recent months , there is likely to be a boost in the days that follow the announcement . For Democrats , there is ample reason to be excited about Clinton 's run for the presidency . She is certainly one of the strongest candidates in many decades . She brings to the table extensive political and policy experience , a combination of skills that is often lacking . She has been through some of the roughest partisan wars and emerged stronger than ever before . She has a keen sense about the nature of the modern news media , how to use it to her advantage and how to survive scandal frenzies . She is a hardened , tough partisan who will not shy away from Republican attack . Americans have many positive memories of Clinton name , given the booming economy of the late 1990s during Bill Clinton 's presidency . If Hillary Clinton puts together an effective campaign , she could be unbeatable in the Democratic primaries as well as in the general election . However , during the buildup to her final decision , some of her weaknesses have also been exposed . Clinton does n't want to end up like Vice President Al Gore in 2000 . Although he did relatively well in the final election -LRB- with many Americans believing that he did actually defeat George W. Bush -RRB- he did n't generate much energy once the campaign started . Although he too was touted as a `` perfect '' candidate who was the ideal person for the job , something seemed stiff and inauthentic when he actually hit the trail . He seemed to freeze when the television cameras were rolling . Gore had trouble connecting with voters , and he seemed to remake his image constantly . His biggest asset ended up being that he was viewed as the inevitable nominee , rather than what he actually stood for . Clinton must avoid following Gore 's path . She suffered this fate in the 2008 primaries and ca n't afford to do so again . She needs to do more than rest on the perception that her candidacy is inevitable and on her record of experience . That is not enough . More important is for her to put forth an exciting vision about what she would stand for in the White House . Voters thirst for signs of greatness when they pick their presidents , even if they are savvy enough to understand that the reality of a polarized Washington will probably limit her ability to achieve bold change . A recent story in The Washington Post suggests that her advisers are aware of this potential liability . After the announcement , they are going to avoid big rallies and events and instead concentrate on smaller events where she will meet with voters directly in states such as Iowa and New Hampshire . Clinton also will have to contend with doubts about her authenticity . In his first day on the campaign trail , Sen. Rand Paul immediately tapped into these concerns by raising questions about whether she could be trusted . That question has dogged the Clintons ever since they came onto the national political scene in the late 1980s . Their greatest virtue , their immense skills as politicians , has often come back to haunt them . Bill Clinton was attacked as `` slick Willie '' by members of both parties for the perception that he would say anything to win and Hillary Clinton has faced similar criticism . When she tried to distance herself from her vote for the use of force in Iraq , many Democrats did n't buy her critique of President George W. Bush 's foreign policies and went for Barack Obama instead . When she conducted her `` listening tour '' of New York before running for the Senate , many voters saw it as a manufactured effort to hide the fact she was running for office as an outsider . When she explained that there was nothing to the recent stories about her use of a private email server rather than her State Department email , some felt that even if the story was relatively minor it indicated that she was n't always telling us what she was really about . Even if she is n't hiding anything , she often gives that appearance . During the next few months , Clinton will also have to connect with her party 's base . The ongoing speculation about Sen. Elizabeth Warren of Massachusetts has suggested that the most active part of the Democratic Party is not that enthused with Clinton 's candidacy . While they will probably vote for her , they are not very motivated and do n't trust that she will stand for Democratic values . She will need to address these concerns , not through her style but through her agenda . Voters will want to hear her talking about issues such as tougher financial regulation and policies to diminish economic inequality as well as her positions on race and policing . She will also need to make clear that she has heard voters on being too hawkish about going to war and give clear indications about how she would handle a nuclear agreement with Iran . Clinton will also have to contend with the gender bias that still exists in the electorate at large . Without any doubt she will be subject to questions and comments -- about her appearance , for instance -- that wo n't be aimed at male candidates . Part of her candidacy is itself an effort to break down these remaining vestiges of political sexism . But the struggle will be tough . Finally , and this relates to the last challenge , Clinton will have to contend with her husband . To be sure he can be an immense force on the campaign trail , one of the most compelling Democrats of our generation . But he can also be liability . As she learned in 2008 , Bill Clinton is not always easy to control . When he speaks his mind , as he did in dismissive comments about Obama 's candidacy , it can often work against her . The fund-raising records of the Clinton Foundation will also raise questions about conflict of interest , and ongoing stories about his personal life , as was the case when Monica Lewinsky returned to the media a few months ago , could re-emerge on the campaign trail . Whether that is fair or not is beside the point : Everything is fair game on the modern campaign trail . Hillary Clinton has the potential to be a hugely successful presidential candidate . But she and her campaign team will need to address the multiple questions and weaknesses that have become clear in recent months . -Des Moines , Iowa -LRB- CNN -RRB- Martin O'Malley told reporters in Iowa on Friday that inevitability -- a term bandied about regarding Democratic presidential frontrunner Hillary Clinton -- is not unbreakable . `` I 've seen it before , '' the former Governor of Maryland and possible presidential contender said . `` History is full of examples where the inevitable frontrunner was inevitable right up until she was no longer or he was no longer inevitable . '' Clinton was considered inevitable to win the nomination in 2008 but ended up losing to Barack Obama . O'Malley had previously dropped the inevitability comment in a television interview last month . The former governor , who capped off his two-day trip to the first-in-the-nation caucus state with a speech to the Polk County Democrats in Des Moines , said that although Clinton is an `` eminently qualified candidate , '' the Democratic Party is full of `` good leaders . '' `` History is full of examples where people who are not very well known nationally can be very well known once they are willing to make their case to the people of Iowa , '' O'Malley said . In some polls , he has scored in the low single digits in the state . In a March CNN/ORC poll of national Democrats , only 1 % picked O'Malley . In a January poll by Bloomberg Politics and the Des Moines Register , O'Malley was also at 1 % among Iowa Democrats . Clinton , who leads most polls by upwards of 40 points , is planning to launch her presidential candidacy on Sunday through a video message on social media , a person close to her campaign-in-waiting told CNN on Friday . While he would n't say much about Clinton , when asked about her candidacy , O'Malley said , `` if leaders believe that they have the experience and the framework to move our country forward , they should run . And they should engage with voters and our country would be the better for it . '' O'Malley , like other Democrats , appears to refrain from directly attacking Clinton . Although last month on ABC , he said that the presidency is `` not some crown to be passed between two families , '' he has not focused on her . He has , however , openly teased a presidential run . `` I know that , as Democrats , we expect -- and I have heard this all over the country -- the Democrats expect a robust conversation about the issues we face as a nation and the challenges we face , '' he said . `` They believe that that conversation needs to take place in something as important as a presidential primary . '' He concluded : `` It would be an extreme poverty indeed if there was only one person willing to compete for our party 's nomination for President . '' -New Delhi -LRB- CNN -RRB- An Indian software pioneer and nine others have been sentenced to seven years in jail for their role in what has been dubbed India 's biggest corporate scandal in memory , police said . Ramalinga Raju , the former chairman of software services exporter Satyam Computers Services , was also fined $ 804,000 , R.K. Gaur , a spokesman for India 's Central Bureau of Investigation , told CNN . In 2009 , Satyam Computers Services was at the center of a massive $ 1.6 billion fraud case after its then-chairman Raju admitted inflating profits with fictitious assets and nonexistent cash . Investigators say losses to investors resulting from the company 's book manipulation were much higher . A special court convicted Raju and nine other people of cheating , criminal conspiracy , breach of public trust and other charges , said the Central Bureau of Investigation , which looked into the case . In the media , the case has been compared to the 2001 Enron Corp. scandal , in which a Houston energy company 's earnings had been overstated by several hundred million dollars . When the scam made headlines , Satyam , which means `` truth '' in Sanskrit , was India 's fourth-largest software services provider . It was serving almost 700 companies , including 185 Fortune 500 companies , and generated more than half of its revenue from the United States . The company had about 53,000 employees and operated in 65 countries . After Raju 's shock disclosures six years ago , the Indian government fired Satyam 's board . In a subsequent state-backed auction , the company was bought by Tech Mahindra , part of the country 's Mahindra Group . A heavyweight of the nation 's software industry , Raju , 60 , has been in jail for the past 32 months . He had founded Satyam in 1987 . His company made giant strides as the outsourcing business grew in India in the 1990s . --LRB- CNN -RRB- When photographer Johan Bavman became a father for the first time , he took more than a passing wonder about how his native Sweden is said to be the most generous nation on Earth for parental leave . He immersed himself in fatherhood -- twice over , you might say . He used his photography to document the real-life experience of other fathers taking full advantage of Sweden 's extraordinary program , which allows mothers and fathers to take long , long leaves from their careers so they can care for their newborns . Get this : Sweden grants a total of 480 calendar days of parental leave , with 390 of them paid at 80 % of income , with a maximum of 3,160 euros a month or $ 3,474 . The remaining 90 days are paid at a flat-rate benefit of 20 euros a day , or $ 22 . But there 's a catch . Fathers have to share that leave with mothers . So to promote both parents to raise their children , Sweden has mandated that 60 of the 480 days be `` daddy months '' or `` partner months . '' If the 60 daddy days are n't used , they are lost , reducing the maximum leave to 420 days . The country also created a `` gender equality bonus '' : the more days that parents share the leave equally , they get a bonus that could total up to 1,500 euros , or $ 1,649 . The idea is for both parents to share the joys and struggles of raising infants . In reality , only 12 % of Swedish couples equally share the 480 days of leave , Bavman said , with women continuing to lead the way as the stay-at-home parent and men as the careerist . Still , Bavman mused last summer about how the policy impacts those men who use the full measure of their parental leave . Social media . Follow @CNNPhotos on Twitter to join the conversation about photography . At first , Bavman had difficulty finding such men . But the fathers he did find and photograph , he captured their devotion in realistic imagery . `` I realized while I was talking to these dads , these dads are struck by how important the bonding is between you and the children , '' said Bavman , who now has a 3-year-old son , Viggo , with partner Linda Stark , a freelance journalist . `` I did n't want to bring out fathers as superdads , '' Bavman said . `` I wanted to bring out these role models which people can connect to . `` I want to have those dads who can also show their tiredness ... which comes with being home with your children . It 's a hard full-time job . This is something that we have been taking for granted for hundreds of years . This is something that mothers have never been recognized for . '' He also found moments of humor , with one child nearly ripping apart the shirt of his busy father . The fathers have become more understanding of their wives and even their own mothers , Bavman said . Some are now considering a career change to accommodate their parenthood . `` Being home nine months , they get time to think about their life , '' the photographer said . Bavman is looking for a total of 60 fathers to photograph , to culminate in an exhibition and a book . So far he 's found 35 worthy of his lens . Johan Bavman is a freelance photographer based in Malmo , Sweden . From 2008-2011 , he worked as a staff photographer at Sydsvenskan , one of Sweden 's largest newspapers . --LRB- CNN -RRB- Craig Hicks , who is charged in the deaths of three Muslim college students in Chapel Hill , North Carolina , earlier this year , can face the death penalty , a judge ruled Monday , according to CNN affiliates . Superior Court Judge Orlando Hudson Jr. ruled that Hicks ' case is `` death penalty qualified , '' WRAL and WTVD reported . The 46-year-old was arrested February 10 in the deaths of Yusor Mohammad , 21 , her 23-year-old husband , Deah Shaddy Barakat , and 19-year-old sister , Razan Mohammad Abu-Salha . All three were shot in the head . Hicks , who was the victims ' neighbor , turned himself in to police the night of the killings . The next week , he was indicted on three counts of first-degree murder and a count of discharging a firearm into an occupied dwelling . He had no prior criminal record , police said . Police said `` an ongoing neighbor dispute over parking '' might have been a factor in the shootings but also said they were n't dismissing the possibility of a hate crime . On what is believed to be Hicks ' Facebook page , numerous posts rail against religion . The victims ' family members have called on authorities to investigate the slayings as a hate crime . The U.S. Department of Justice issued a statement in February saying the department 's Civil Rights Division , along with the the U.S. Attorney 's Office for the Middle District of North Carolina and the FBI , have opened `` a parallel preliminary inquiry '' to determine whether any federal laws , including hate crime laws , were violated . `` It has always been our position that Mr. Hicks should be held responsible for his actions to the full extent of the law . His killing of three college students was despicable , and now he must face the consequences of his actions , '' said Rob Maitland , an attorney for Hicks ' wife . Karen and Craig Hicks are in the process of divorce . --LRB- CNN -RRB- HBO just whetted our appetite for a new season of `` True Detective . '' The network released a teaser video for season 2 of the critically acclaimed show , and it looks intense . Colin Farrell , Vince Vaughn , Rachel McAdams and Taylor Kitsch star in the new season , which premieres June 21 . Here 's the plot synopsis , according to Den of Geek : . `` A bizarre murder brings together three law-enforcement officers and a career criminal , each of whom must navigate a web of conspiracy and betrayal in the scorched landscapes of California . Colin Farrell is Ray Velcoro , a compromised detective in the all-industrial City of Vinci , LA County . Vince Vaughn plays Frank Semyon , a criminal and entrepreneur in danger of losing his life 's work , while his wife and closest ally -LRB- Kelly Reilly -RRB- , struggles with his choices and her own . Rachel McAdams is Ani Bezzerides , a Ventura County Sheriff 's detective often at odds with the system she serves , while Taylor Kitsch plays Paul Woodrugh , a war veteran and motorcycle cop for the California Highway Patrol who discovers a crime scene which triggers an investigation involving three law enforcement groups , multiple criminal collusions , and billions of dollars . '' Yes , please . The first season starred Matthew McConaughey and Woody Harrelson as a pair of Louisiana State Police detectives investigating the death of a young woman . The crime drama proved to be a runaway hit , and the season 1 finale crashed the HBO Go site in March 2014 . diff --git a/tests/optimizer/fairseq/data/expected_output.hypo b/tests/optimizer/fairseq/data/expected_output.hypo deleted file mode 100644 index a4b6da91..00000000 --- a/tests/optimizer/fairseq/data/expected_output.hypo +++ /dev/null @@ -1,128 +0,0 @@ -French prosecutor says he is not aware of any video footage from on board the plane. Paris Match and Bild reported that the video was recovered from a phone at the wreckage site. The publications said that they watched the video, which was found by a source close to the investigation. An official with France 's accident investigation agency , the BEA, said the agency is notaware of any such video. -The Palestinian Authority officially becomes the 123rd member of the International Criminal Court. The formal accession was marked with a ceremony at The Hague, where the court is based. Israel and the United States opposed the Palestinians ' efforts to join the body. The ICC opened a preliminary examination into the situation in Palestinian territories in January. -Amnesty International's annual report catalogs the use of state-sanctioned killing as a punitive measure across the globe. The organization found positive developments worldwide, with most regions seeming to show reductions in the number of executions. The U.S. remains one of the worst offenders for imposing capital punishment, with only Iran executing more people in 2014. -Amnesty International releases its annual review of the death penalty worldwide. In Pakistan, the government lifted a six-year moratorium on the execution of civilians. In Indonesia, authorities announced plans to execute mainly drug traffickers. A sharp spike in death sentences recorded in 2014 -- up more than 500 on the previous year. -Anne Frank died of typhus in a Nazi concentration camp at the age of 15. Researchers re-examined archives of the Red Cross, the International Training Service and the Bergen-Belsen Memorial. They concluded that Anne and Margot probably did not survive to March 1945 -- contradicting the date of death previously determined by Dutch authorities. -A Duke student has admitted to hanging a noose from a tree, university officials say. The prestigious private school did n't identify the student, citing federal privacy laws. The student was identified during an investigation by campus police and student affairs. Officials are still trying to determine if other people were involved in the incident. -The Rev. Robert H. Schuller died Thursday at age 88. He was the founder of the television ministry "Hour of Power" He was diagnosed with esophageal cancer in August 2013. His Crystal Cathedral megachurch is now owned by the Roman Catholic Church. -Stray pooch in Washington State has used up at least three of her own after being hit by a car. The dog was apparently whacked on the head with a hammer and buried in a field. Four days after her apparent death, the dog managed to stagger to a nearby farm. She suffered a dislocated jaw, leg injuries and a caved-in sinus cavity. -Mohammad Javad Zarif is the Iranian foreign minister. He has been John Kerry 's opposite number in securing a breakthrough in nuclear discussions. Zarif received a hero 's welcome as he arrived in Iran on a sunny Friday morning. But there are some facts about Zarif that are less well-known. -Bob Barker returns to host The Price Is Right for the first time in eight years. Barker hosted the TV game show for 35 years before stepping down in 2007. Looking spry at 91, Barker handled the first price-guessing game of the show before turning hosting duties over to Drew Carey. -Trey Moses asked Ellie Meredith to be his prom date. Trey made the prom-posal in the gym during Ellie 's P.E. class. Ellie has struggled with friendships since elementary school. Trey is headed to play college ball next year at Ball State in Louisville, Kentucky. -Michele Bachmann compares President Obama to the co-pilot of the doomed Germanwings flight. Bachmann: Obama is for the 300 million souls of the United States what Andreas Lubitz was for the 150 souls on the German Wings flight. Many comments on her Facebook page blasted the former representative. -California is a breadbasket to the nation, growing more than a third of its vegetables and nearly two-thirds of its fruits and nuts. A strong dollar allows producers to import crops that may be withering under the absence of West Coast rain or other misfortunes elsewhere in the nation. Though fruits and vegetable prices fell in February , overall prices are expected to rise this year. -Walmart is emerging as a bellwether for shifting public opinion on hot-button political issues that divide conservatives and liberals. Former Minnesota Gov. Tim Pawlenty says Walmart 's actions foreshadow where the Republican Party will need to move. The backlash over the religious freedom measures in Indiana and Arkansas this week is shining a bright light on the broader business community 's overwhelming support for workplace policies that promote gay equality. -The five were exposed to Ebola in Sierra Leone in March. None of them developed the deadly virus. They are clinicians for Partners in Health, a Boston-based aid group. They all had contact with a colleague who was diagnosed with Ebola and is being treated at the National Institutes of Health. -Andrew Getty, 47, appears to have died of natural causes, police say. An autopsy will be conducted, but there is no criminal investigation underway. Andrew Getty was found on his side near a bathroom in his home, KTLA reports. He was the grandson of oil tycoon J. Paul Getty, who died in 1976. -Mike Pence is drawing huge heat for his controversial decision to sign a religious freedom law last week. John Avlon: The bill was Pence 's way of shoring up his street cred among ultraconservatives. He says there is no way a Republican can get through the pending primary without denouncing LGBT rights. Avlon says the issue of LGBT rights will turn numerous Americans into single issue voters. -Maysak gained super typhoon status just a few days ago. It has since lost a lot of steam as it has spun west in the Pacific Ocean. It boasts steady winds of more than 70 mph -LRB- 115 kph -RRB- and gusts up to 90 mph. It 's expected to make landfall Sunday morning on the southeastern coast. -Louis Jordan, 37, left Conway, South Carolina, to fish in the ocean. A storm capsized his boat and broke his mast, so he couldn't fix it right away. After his food and water ran out, it became an issue of survival. The boat capsized two more times before he was rescued, according to Jordan. -Paul Walker died in November 2013 at the age of 40 after a car crash. The actor was on break from filming `` Furious 7 '' at the time of the fiery accident. The script was rewritten and special effects were used to finish scenes, with Walker 's brothers serving as body doubles. There are scenes that will resonate with the audience -- including the ending. -The U.S. and its negotiating partners reached a very strong framework agreement with Iran. Peter Bergen: The debate that has already begun will likely result in more heat than light. He says the objective has always been to structure an agreement so that Iran could not covertly develop a nuclear arsenal before the United States and its allies could respond. Bergen says the inspections provisions that are part of this agreement are designed to protect against any covert action. -Mötley Crüe 's Vince Neil reminded us of the dangers of tackling The Star-Spangled Banner. Whitney Houston set the modern standard for the national anthem at Super Bowl XXV. Jimi Hendrix inflamed mainstream America with his psychedelic take on the anthem. -Yahya Rashid, a UK national from northwest London, was detained at Luton airport on Tuesday. He 's been charged with engaging in conduct in preparation of acts of terrorism, police say. Rashid is due to appear in Westminster Magistrates ' Court on Wednesday. -The total lunar eclipse started at 3:16 a.m. Pacific Daylight Time. People west of the Mississippi River will have the best view. Parts of South America, India, China and Russia also will be able to see the eclipse. The eclipse will only last four minutes and 43 seconds, NASA says. -Memories Pizza in Walkerton, Indiana, at center of debate over state 's Religious Freedom Restoration Act. Owners said they 'd refuse to cater a same-sex couple 's wedding. Critics said new law would allow businesses to discriminate against gays and lesbians. But supporters rallied and donated more than $ 842,000 for business. -Miracles do happen, though, and not just in Hollywood. Louis Jordan says that he set off on his 35-foot sailboat from South Carolina in late January. Jose Salvador Alvarenga says his journey began in Paredon Viejo, Mexico, in late 2012. Ron Ingraham is n't one of those people -- he 's a fisherman who survived at sea. -Iranian authorities imposed the ban on women attending men 's sports events after the revolution in 1979. The ban was reinstated in 2005 after the more hard-line Mahmoud Ahmadinejad came to power. FIFA President Sepp Blatter called on Iran last month to end its ban. -Israeli Prime Minister Benjamin Netanyahu criticizes the Iran nuclear deal. He says he sees better options than "this bad deal or war" Democrats and Republicans spar over the framework announced last week to lift Western sanctions. GOP contenders for the 2016 presidential nomination lambasted it as giving Iran too much flexibility. -A trip to a former heavyweight champ 's gaudy, abandoned mansion. The tallest and fastest '' giga-coaster '' in the world. A dramatic interview with a famed spiritual leader. A professor of physics at a British university asked 100 people to create a composite with facial features. -Easter celebrates the completion of Christ 's mission of salvation in the Crucifixion and Resurrection. It does n't fall on the same day every year but shifts around in spring depending upon cosmic events. A blood moon appeared in the sky early Saturday -- right between Good Friday and Easter Sunday and during Passover. -Police in Indian city of Malegaon are requiring identity cards for cattle owners. Cows are considered holy and revered by that state 's majority Hindu population. The Maharashtra Animal Preservation Bill now includes bans on the killing of bulls and bullocks. The consumption or sale of beef could now land you in prison for five years. -Keonna Thomas is one of three women arrested this week on terror charges. Two New York women were also taken into custody. The FBI said Thomas purchased an electronic visa to Turkey on March 23. Turkey is known as the easiest place from which to enter Syria and join ISIS. -Online activity is the alternative to traditional mainstream media in authoritarian countries. Lack of access to traditional print and broadcast media is driving force leading disaffected voices to post online. Jailing journalists is one thing, but being killed and doing little or nothing about it is another. Since 1992, 11 of the 11 journalists killed for their work online have been bloggers. -Robert Lewis Burns Jr. was the original drummer in Southern rock band Lynyrd Skynyrd. Burns, 64, died after his car hit a mailbox and a tree in Cartersville, Georgia. He was not restrained at the time of the crash, a Georgia State Patrol spokesman says. -Avril Lavigne was bedridden for five months after contracting Lyme disease. Lavigne believes that she was bitten by a tick last spring. The 30-year-old performer said she recuperated in her Ontario home. She is releasing a new single this month to support the 2015 Special Olympics. -Two FBI agents were injured in a crash and the suspect was shot before being captured. Kevone Charleston, 36, is suspected of involvement in 32 commercial robberies dating to November 2013. Charleston was shot and wounded by FBI agents and task force officers, but his injuries are not life threatening. -NCAA says it has no legal responsibility to ensure academic integrity of courses offered to student-athletes. NCAA says it does not have direct, day-to-day, operational control over member institutions like UNC. UNC scandal involved thousands of athletes who, over 18 years, were funneled into classes that never met. -The Large Hadron Collider -LRB- LHC -RRB- is ready for action following a two-year shutdown. The purpose of the lengthy project is to recreate the conditions that existed moments after the Big Bang. The LHC generates up to 600 million particles per second , with a beam circulating for 10 hours. -Fighting has killed hundreds of people in Yemen in less than two weeks. The Red Cross has cried out for a humanitarian ceasefire to let aid in. The U.N. Security Council discussed the humanitarian situation at Russia 's behest. Moscow submitted a draft resolution calling for a halt to the airstrikes. -20 states have some version of the religious liberty law, and the legal controversies have grown. A tea used by a Brazilian faith is to them like wine used by Catholics at communion. The church became alarmed and cited how the federal government allows an exception for American Indians to use another illegal drug. -Somalia-based Al-Shabaab has been behind a string of recent attacks in Kenya. The group is predominantly driven by the same radical interpretation of the Koran as al-Qaeda and ISIS. It is not clear whether it will switch allegiances to ISIS. -Cassandra C. is in remission after nearly six months of forced chemo treatments. A Connecticut juvenile court judge issued a written decision denying a motion to let the teen go home. The 17-year-old is in temporary custody of the state for the time being, her attorney says. Cassandra was diagnosed with Hodgkin lymphoma in September. -Mark Ronson's "Uptown Funk!" is the longest-leading Billboard Hot 100 of the 2010s. It's also just the 10th single in the Hot 100 's entire history to spend at least 13 weeks at No. 1. `` Funk '' is just three weeks from potentially tying `` One Sweet Day '' for the record. -Thai Smile unveils colorful new livery featuring Jake , Finn and the beloved Princess Bubblegum sprawled across an Airbus A320. The interior of the plane also has an Adventure Time theme with overhead bins, head rests and even air sickness bags covered in the faces of characters from the show. The inaugural Thai Smile Adventure Time flight takes place on April 4 , heading from Bangkok to Phuket. -The temperature was recorded at Argentina 's Esperanza Base on the northern tip of the Antarctica Peninsula. The World Meteorological Organization is in the process of setting up an international ad-hoc committee. The committee will examine the equipment used to measure the temperature, whether it was in good working order. -Kim Ki-Jong is charged with attempted murder. He is also charged with assaulting a foreign envoy and business obstruction. U.S. Ambassador Mark Lippert was stabbed March 5 during an event in Seoul. Police say Kim stabbed him because he opposed the joint South Korean-U.S.-North Korean military drills. -Reaching a good, solid agreement with Iran is a worthy, desirable goal. But the process has unfolded under the destructive influence of political considerations, says Peter Bergen. Bergen: Obama has a huge political stake in these negotiations. He says the notion that Obama is not handling the Iranian threat effectively is contributing to a new war in Yemen. -Deion Sanders calls out his son on Twitter. Deion Sanders Jr. is a wide receiver at Southern Methodist University. His Twitter timeline is a mix of biblical verses, motivational quotes and references to sports, cars, school and Balenciaga shoes. He also has gone on record with his love for hood doughnuts. -Blue Bell ice cream has temporarily shut down one of its manufacturing plants. Public health officials warned consumers Friday not to eat any Blue Bell-branded products made at the plant. That includes 3-ounce servings of Blue Bell ice Cream from this plant that went to institutions. Listeria monocytogenes was recently found in a cup of ice cream recovered from the hospital. -Former banker Rurik Jutting, 29, charged with two counts of murder in Hong Kong. Court hearing to determine whether there was enough evidence to proceed to trial adjourned until May. Police found bodies of two women at J Residence in Wan Chai last November. One woman was lying on the floor with cuts to her neck and buttocks. Another was stuffed inside a suitcase on the balcony. -"Furious 7 '' is getting the widest release in Universal 's history. The final film featuring the late Paul Walker is opening around the globe this weekend. The movie enjoys massive awareness and interest, due to both the popularity of the street-racing series and Walker 's death. -Manning is serving a 35-year prison sentence for leaking thousands of classified documents. She said she will be using a voice phone to dictate her tweets to communications firm Fitzgibbon Media. The former Army intelligence analyst was convicted of stealing and disseminating 750,000 pages of documents and videos. -Can UVA, Phi Kappa Psi or any of the other fraternities on campus sue for defamation? The Virginia Supreme Court said in Jordan v. Kollman that the elements of libel are -LRB- 1 -RRB- publication of an actionable statement. A private person suing for defamation must establish that the defendant has published a false factual statement. -Defense Minister Gen Nakatani told the Diet that his jets had never come across any UFOs from outer space. He was responding to a query from flamboyant former wrestler-turned-lawmaker Antonio Inoki. Inoki also claims to have seen a UFO with his own eyes, but admitted he did n't know personally if aliens existed. -The FBI has confirmed that one of its most wanted terrorists, Marwan, was killed in the Philippines. Marwan was believed by the FBI to be a member of southeast Asian terror group Jemaah Islamiyah 's central command. The FBI had been offering a $ 5 million reward for information leading to Marwan's capture. -Shibuya ward in Tokyo passes ordinance allowing same-sex couples some of the rights of married heterosexual couples. Proponents of marriage equality in socially conservative Japan say that the ward 's decision is a step in the right direction. A recent poll found that a slight majority at 52.4 % oppose gay marriage, but support amongst young adults in their 20s and 30s is as high as 70%. -David Lynch has confirmed he will no longer direct the revival of Twin Peaks. The cult 1990s television show was set to return in 2016. Lynch broke the news about his departure in a series of tweets. He said he felt the network was not offering enough money to produce the show. -A hot mic picked up Kentucky guard Andrew Harrison saying of Wisconsin's Frank Kaminsky. Harrison said his words were in jest and that he meant no disrespect to Kaminsky, who is white. Kaminsky said Sunday that he was over it and that nothing needs to be made out of it. -The blast occurred at an oil storage facility Monday night after an oil leak. Five out of six people were injured by broken glass and have been sent to the hospital. The plant produces paraxylene -LRB- PX -RRB- which is used in the production of polyester films and fabrics. -The EPA says there was a presence of methyl bromide in the unit where the family was staying. The use of the pesticide is restricted in the U.S. because of its acute toxicity. The EPA is working with local government agencies to investigate whether any environmental regulations or laws were violated. -Rand Paul has tried to sell himself as a different type of Republican. He 's tried to brand himself as the GOP 's minority outreach candidate. A quick survey of Sen. Paul 's positions makes clear that he does not. The American people deserve better than Rand Paul. -U.S. Department of Justice has named a new defendant in the war on drugs. The courier delivery service FedEx is charged in a 15-count indictment. Peter Bergen: Corporations can indeed be prosecuted like a person. He says FedEx argues that it is indeed a common carrier, performing the normal duties. -For the 1960s, the end arrived with -- depending on your ideals and your tribe -- either the Rolling Stones ' Altamont fiasco in December 1969 or Richard Nixon 's 1972 re-election. The end of a TV series brings with it some risk. Expect a number of longtime characters -- Ken Cosgrove, Harry Crane, Joan Harris -- to look for an exit. -Comedian Chris Rock documented three traffic stops in seven weeks. Many African-Americans have long bemoaned being pulled over for no apparent reason. Blacks are about 30 % more likely to be pulled over by police than whites. Actor Isaiah Washington urged Rock to '' #Adapt '' to avoid racial profiling. -Boston native Mark Wahlberg will star in a film about the Boston Marathon bombing and the manhunt that followed. The film is being produced by CBS Films and will feature material researched and shot by CBS News program 60 Minutes. Fox announced in November that it will be making a film called '' Boston Strong '' about the event. -Model Manuela Arbelaez accidentally reveals the correct answer to a guessing game for a new Hyundai Sonata. Host Drew Carey could n't stop laughing. Arbelarez was mortified , attempting to hide behind the display. But everything turned out OK, she tweeted later. -Kenyans use social media to share the victims' stories, hopes and dreams. The hashtag # 147notjustanumber refers to the number of people killed at Garissa University College. Kenyan authorities have not released a list of the victims. The attack was the nation 's deadliest since the bombing of the U.S. Embassy in 1998. -Investigators are not expected to return to the crash site, a French national police official says. The plane crashed March 24 in rugged terrain of the Alps about 6 miles from the town of Seyne-les-Alpes. The flight data recorder was found Thursday by a member of the recovery team. -Carlos Colina, 32, arraigned on charges of assault and battery causing serious bodily injury and improper disposal of a body. Police were notified Saturday morning about a suspicious item along a walkway in Cambridge. Officers opened a duffel bag and found human remains. Surveillance video led them to an apartment building where more body parts were discovered. -American Jennifer Stewart says Etihad Airways lost her most important baggage. Her 2-year-old pet cat, Felix, went missing on a flight from Abu Dhabi to New York. Stewart believes the cat 's plastic carrier was badly damaged during the flight or the transfer from the airplane to the pickup area. -Executive producer Brian Grazer said the show will return for a fifth season of 17 episodes. The fourth season was streamed exclusively on Netflix in 2013 after Fox canceled the show several years before. It was not yet known if the full cast , including Jason Bateman , Michael Cera and Will Arnett will return. -Easter is unique on the Christian calendar, a major point in the cycle of the religious year. Easter Triduum refers to the three days of Easter that begin with Good Friday, proceed through Holy Saturday, and conclude with Easter Sunday. Easter embraces the great mystery of resurrection , with its promise of transformation -- a shift from one form to another. -Money gets 37 mentions in the New Testament, while gold gets 38 citations. The Jesus community had a common purse because they needed money to survive. Jesus and his disciples walked, wore what they had, slept outside or in stayed in friends ' homes. Rabbi Joshua Garroway: It was possible Jesus and followers received donations from supporters. -The nation 's top stories will be unfolding Tuesday in courthouses and political arenas across the country. In Louisville, Kentucky, Sen. Rand Paul made the not-so-surprising announcement that he will run for president. In Chicago, voters will head to the polls in a very surprising runoff between Mayor Rahm Emanuel and challenger Jesus Garcia. In Ferguson, Missouri, the shadow of Michael Brown and the protests over his shooting by Officer Darren Wilson will loom large over the city 's elections. -Ted Cruz hit the trail in Iowa for the first time as a presidential candidate last week. Cruz drew large crowds during his two-day swing across the state. He 's counting on Iowa, known for its vocal and active evangelical base, to propel him forward. Cruz was one of the loudest defenders of the religious freedom law in Indiana. -Nina Dobrev announced she will be leaving the CW show at the end of this season. Many chastised the show 's producers for allowing the show to go on to a seventh season. Dobrev seemed to anticipate the pain , urging fans to hold on through the season finale. -Zhou Yongkang is the highest-ranking Chinese Communist Party official ever to face corruption charges. Zhou was one of nine men who effectively ruled the country of more than 1.3 billion people. Zhou controlled police forces, spy agencies, court systems as well as prosecution offices across China. He was expelled from the Communist Party and arrested last December. -Education minister Smriti Irani was visiting a FabIndia outlet in the tourist resort state of Goa. She discovered a surveillance camera pointed at the changing room, police said. Four employees of the store have been arrested, but its manager is still at large. The arrested staff have been charged with voyeurism and breach of privacy. -The group included four children -- the oldest being 10 or 11 , a Turkish official says. The nine were arrested at the Turkey-Syria border, the Turkish military says. It did n't say why the group allegedly was trying to get into Syria. The British Foreign Office says it is aware of reports of the arrests. -Kayahan was one of Turkey 's best-loved singers and songwriters. He was first diagnosed with cancer in 1990, the year he competed in the Eurovision Song Contest. The cancer returned in 2005 and then again in 2014. He died Friday in a hospital in Istanbul, five days after his 66th birthday. -A nuclear submarine being repaired at a Russian shipyard has caught on fire. The submarine is in a dry dock and there is no ammunition on board. The fire presents no threat to people and the shipyard, a spokesman says. The sub had been undergoing repairs since November 2013. -Mexican state oil company Pemex said 45 workers were injured in the blaze. Two of them are in serious condition, the company said. Authorities evacuated about 300 people from the Abkatun Permanente platform. At least 10 boats worked to battle the blaze for hours off the coast of Mexico. -TV5Monde was gradually regaining control of its channels and social media outlets. The outage began around 8:45 p.m. Paris time Wednesday. The network said it was hacked by an Islamist group. There was no immediate claim of responsibility by ISIS or any other group. -A group of armed assailants stormed into the attorney general 's office in Balkh province. Two police officers and a security guard of the provincial attorney general's office were among the dead. Most staff members and civilians have been rescued. An exchange of fire between Afghan security forces and the assailants is ongoing. -Jurors found Dzhokhar Tsarnaev guilty of all 30 counts he faced in the Boston Marathon bombing trial. Seventeen of the 30 counts were capital charges, meaning he is eligible for the death penalty. The trial will next move into a penalty phase, where the jury will hear testimony and arguments from both sides. Jurors will be asked to weigh aggravating factors against mitigating factors. -The fire broke out at the General Electric Appliance Park in Louisville, Kentucky. Video showed both smoke and bright orange flames. There were no reports of anyone injured or trapped. The park is large, such that 34 football fields could fit in one of its warehouses in the facility. -A U.S. official says Washington is not putting a timeframe on a possible invasion of Mosul. Mosul has long been the big prize in the Iraqi government 's fight to defeat ISIS. It has also long been a source of embarrassment, considering how it fell last June. -Most of the penalty amounts to forced spending on improving pipeline safety. On September 9, 2010, a section of PG&E pipeline exploded in San Bruno, killing eight people. The company says it has paid more than $ 500 million in claims to the victims and victims ' families. -One person is killed in Fairdale, Illinois. The tornado cuts a 22-mile path through Ogle County. Hail stones the size of tennis balls plummet down on Ashton. The National Weather Service warns people to be on alert for severe weather on Friday. The storm took away a local favorite restaurant. -Officer Michael Slager has been fired and charged with murder in the death of 50-year-old Walter Scott. A bystander 's cell phone video shows the five-year police veteran shooting at Scott eight times as Scott runs away. The officer initially said that he used a Taser on Scott , who, Slager said, tried to take the weapon. -Lucknow police to use pepper-spraying drones to control unruly crowds. The miniature aircraft will be fitted with a camera and pepper spray. Each drone costs between $ 9,560 and $ 19,300. Views on the new measure are mixed, with some concerned about the suppression of freedom of speech. -A female employee accused Xavier Morales , a supervisor within the agency , of assault after he made sexual advances at her. This is just the latest chapter for an organization embroiled in scandal over the past several months. Last month, two top-ranking officials were suspended following an incident at a White House command post. -Richard Dysart played cranky senior partner Leland McKenzie in NBC's "L.A. Law" Dysart was nominated for Emmy for outstanding supporting actor in a drama series for four straight years. He was one of the few actors to appear in every episode of the long-running series. Dysart also played Harry Truman in the CBS telefilm "Day One" -Vijay Chokalingam applied to medical school claiming to be African-American. He received only one admission offer, to St. Louis University 's School of Medicine. He claims African-Americans garner special privileges that are unavailable to whites or Asians. The statute of limitations on his act of fraud has expired, he says. -Don McLean 's pop masterpiece "American Pie" sold for $1.2 million. Song is a hybrid of modern poetry and folk ballad, beer-hall chant and high-art rock. Song replaced Bob Dylan 's "The Times They Are A Changin '' as Peoples Almanac of the new decade. -Anthony Ray Hinton was convicted of murder in the 1985 deaths of two Birmingham-area fast-food managers. A new trial was ordered in 2014 after firearms experts testified 12 years earlier that the revolver could not be matched to evidence in either case. The state then declined to re-prosecute the case. Hinton, 58, was 29 at the time of the killings. -April 8 was also "Rex Manning Day" on Twitter. April 14 was the date of Titanic's doomed love affair. October 3 is Mean Girls Day. April 25 is Miss Congeniality Day. October 21 is Back to the Future Part II's date in the 1989 film. -Mary Kay Letourneau Fualaau was a married 34-year-old teacher and mother of four in 1996 when she began an affair with her 13-year old student. She gave birth to her young lover 's child and went on to serve more than seven years in prison on charges related to their sexual relationship. The pair wed soon after she was released from prison in 2005 and are now the parents of two teen girls. -Twisted Sister says its 2016 tour will be its last. Next year marks the band 's 40th anniversary. Band will play with a new drummer, Mike Portnoy of Adrenaline Mob. The band will also perform two shows in Pero 's honor : one at Las Vegas ' Hard Rock Hotel and Casino and the other in Sayreville, New Jersey. -The Weinstein Co. decided to sell the film directly to Lifetime rather than book it into U.S. theaters. The critically-panned film opened last year 's Cannes Film Festival. The film focuses on a period in the early '60s when Monaco was involved in a stand-off over taxes with France. -The lyrics to the famed Don McLean song sold for $ 1.2 million Tuesday morning at an auction held by Christie 's. McLean has said that the opening lines were inspired by the death of Buddy Holly. The song catapulted the former folk singer to headliner status. The record for a popular music manuscript is held by Bob Dylan's "Like a Rolling Stone" -Kanye West has settled a lawsuit with a paparazzi photographer he assaulted. The photographer, Daniel Ramos, had filed the civil suit against West after the hip-hop star attacked him. West pleaded no contest last year to a misdemeanor count of battery over the scuffle. A judge sentenced him to two years ' probation , as well as anger management sessions. -Scientologist John Travolta is not a fan of HBO's new documentary. The actor is one of the Church of Scientology 's most high-profile members. The HBO documentary is critical of the organization, which has close ties to the showbiz industry. He credited the church with helping him to survive the death of his teen son, Jett. -Blues legend B.B. King was hospitalized for dehydration. dehydration was caused by his Type II diabetes, his daughter says. King, 89, has 30 Grammy nominations and was inducted into the Rock and Roll Hall of Fame in 1987. Last year, the bluesman suffered from dehydration and exhaustion after a show. -Dzhokhar Tsarnaev is found guilty on all 30 counts he faced for the Boston Marathon bombings. He and his brother planted bombs at the marathon, setting off deadly explosions. Hundreds of people were wounded in the bombings and their aftermath. The verdict brings a mix of emotions, from triumphant vows to move forward to expressions of gratitude. -Chinese TV host known for impromptu satire caught on camera cursing the late Chairman Mao Zedong. Bi Fujian was filmed at a dinner party singing a revolutionary song that eulogizes the Communist Party 's early years when he started going off script. The 75-second video clip was uploaded on Monday and has since been removed from video-sharing sites inside China. Bi later apologized, saying his personal speech had led to "grave social consequences" -Tornado sirens blare in Kansas as several storms bring reports of twisters. A tornado may have touched down in the small town of Potosi , Missouri. More storms are expected in the Midwest, Mississippi River Valley, Tennessee River Valley and near the southern Great Lakes. -Katie, a giraffe at the Dallas Zoo, gave birth to a not-so-little baby early Friday evening. There was no immediate word on the newborn 's gender or condition. The baby joins a sister, 4-year-old calf Jamie. Katie is one of the only giraffes who can stick her long tongue out on cue. -The fifth season of HBO's Game of Thrones premieres Sunday. It will be the most high-profile premiere yet, airing simultaneously in 170 countries for the first time. The Stark daughters, Arya and Sansa, will be characters to watch this season. The show currently set to end after seven years. -Heads of state from 35 countries in the Western Hemisphere have met every three years to discuss economic, social or political issues. Cuba has historically been the wrench in the diplomatic machinery. Some Latin American leaders threatened not to attend the Summit of the Americas if the United States and Canada did n't agree to invite President Raul Castro. -President Obama is giving up enormous leverage in his nuclear deal with Iran, says Peter Bergen. The deal would hand Tehran billions of previously sanctioned funds, he says. Bergen: The deal lacks tough safeguards to stop Iran from cheating. The best predictor of Iran's future behavior is its past behavior, he adds. -Martin O'Malley and Jim Webb are both toying with a presidential run. Both shared a stage at the Polk County Democrats Awards Dinner in Des Moines, Iowa. Webb is a decorated Vietnam War veteran and former senator from Virginia. In a March CNN/ORC poll -LRB- PDF -RRB- of national Democrats, only 1 % said O'Martin and Webb were their top choice. -Hundreds of mourners gather at a South Carolina church for the funeral of Walter Scott. The father of four was fatally shot in the back by a police officer a week ago. Officer Michael Slager was swiftly charged with murder and faces life in prison or the death penalty. Scott 's family was missing for the private burial. -The shootings are connected, authorities say. They began with what authorities believe was a domestic kidnapping incident. The suspect 's vehicle was spotted outside the Census Bureau in Suitland, Maryland. A guard apparently approached the vehicle and saw two people arguing . That guard was then shot at least once in the upper body. -Iranian military observation aircraft flew within 50 yards of an armed U.S. Navy helicopter over the Persian Gulf this month. The incident sparked concern that top Iranian commanders might not be in full control of local forces. The Navy MH-60R armed helicopter was flying from the deck of the USS Carl Vinson. -Liana Barrientos has been married 10 times in New York. Prosecutors say the marriages were part of an immigration scam. She pleaded not guilty at State Supreme Court in the Bronx on Friday. She was arrested and charged for allegedly sneaking into the New York subway through an emergency exit. -#UporDown is a trending question on social media thanks to a photo of a cat coming down some stairs. The picture was apparently uploaded on Imgur a few days ago. Some people are noting the apparent motion of the cat . Others are commenting about the construction of the stairs. -Pope Francis has reawakened the faith of a lapsed Catholic, says CNN's Richard Quest. Quest met one of the Pope 's newly appointed cardinals, Cardinal Gerald Lacroix, in Quebec City. The 57-year-old compared the Pope's approach to Jesus, who preached about the love of God. -Mullah Mohammed Omar is credited with founding the Taliban in the early 1990s. Omar all but disappeared after a U.S.-led bombing campaign routed the Taliban from Kabul. The Taliban has released written statements purportedly made by the leader-in-hiding. But years without any video or audio recordings of the fugitive have led to growing speculation that Omar may have died. -Amnesty International report is calling for authorities to address the number of attacks on women 's rights activists in Afghanistan. The report examines the persecution of activists by the Taliban and tribal warlords. The brutal murder of Farkhunda, a young woman whose body was burnt and callously chucked into a river in Kabul, shocked the world. -Nelly is charged with felony possession of drugs, simple possession of marijuana and possession of drug paraphernalia. A state trooper stopped the bus because it was not displaying U.S. Department of Transportation and International Fuel Tax Association stickers. The trooper was about to conduct an inspection of the bus when he noticed an odor of marijuana emitting from the vehicle. Two troopers then searched the bus, finding five colored crystal-type rocks and methamphetamine. -Collection of the first six Star Wars '' movies will also include many special features. Some of the features give fans a rare glimpse behind the scenes of the saga. Sound designer Ben Burtt explains which animals were used to capture the alien sounds made by the Geonosians. Take a look at the video above to find out. -Hillary Clinton is finally announcing her candidacy for the 2016 presidential election. Julian Zelizer says there is ample reason to be excited about Clinton 's run for the presidency. Zelizer: If Clinton puts together an effective campaign she could be unbeatable in the Democratic primaries as well as in the general election. He says Clinton will have to contend with doubts about her authenticity. -Martin O'Malley told reporters in Iowa on Friday that inevitability -- a term bandied about regarding Democratic presidential frontrunner Hillary Clinton -- is not unbreakable. Clinton was considered inevitable to win the nomination in 2008 but ended up losing to Barack Obama. The former governor capped off his two-day trip to the first-in-the-nation caucus state with a speech to the Polk County Democrats in Des Moines. -Ramalinga Raju is the former chairman of software services exporter Satyam Computers Services. Raju admitted inflating profits with fictitious assets and nonexistent cash. He and nine others were convicted of cheating, criminal conspiracy, breach of public trust. The case has been compared to the 2001 Enron Corp. scandal. -Sweden is said to be the most generous nation on Earth for parental leave. Fathers have to share that leave with mothers to promote both parents to raise their children. Only 12 % of Swedish couples equally share the 480 days of leave. Photographer Johan Bavman is looking for a total of 60 fathers to photograph to culminate in an exhibition and book. -Craig Hicks, 46, is charged in the deaths of three Muslim college students in Chapel Hill, North Carolina. Superior Court Judge Orlando Hudson Jr. ruled that Hicks ' case is death penalty qualified. The victims ' family members have called on authorities to investigate the slayings as a hate crime. Police said an ongoing neighbor dispute over parking might have been a factor. -Colin Farrell, Vince Vaughn, Rachel McAdams and Taylor Kitsch star in the new season. The new season premieres June 21. The first season starred Matthew McConaughey and Woody Harrelson as two Louisiana State Police detectives investigating the death of a young woman. diff --git a/tests/optimizer/fairseq/test_fairseq_optimizer.py b/tests/optimizer/fairseq/test_fairseq_optimizer.py index 4b703054..35c60168 100644 --- a/tests/optimizer/fairseq/test_fairseq_optimizer.py +++ b/tests/optimizer/fairseq/test_fairseq_optimizer.py @@ -17,11 +17,9 @@ from fastseq import config from fastseq.utils.file_utils import decompress_file, make_dirs, wget from fastseq.utils.test_utils import (BART_MODEL_URLS, CACHED_BART_MODEL_DIR, - CACHED_BART_MODEL_PATHS, + CACHED_BART_MODEL_PATHS, CNNDM_RAW_URL, CACHED_CNNDM_RAW_DATA_DIR, fastseq_test_main, TestCaseBase) - - logger = get_logger(__name__) class FairseqBeamSearchOptimizerTest(TestCaseBase): @@ -49,12 +47,22 @@ def setUp(self): CACHED_BART_MODEL_PATHS['bart.large.cnn'], checkpoint_file='model.pt') - self.source_path = 'tests/optimizer/fairseq/data/cnndm_128.txt' + make_dirs(CACHED_CNNDM_RAW_DATA_DIR, exist_ok=True) + self.source_path = os.path.join(CACHED_CNNDM_RAW_DATA_DIR, 'cnndm_128.txt') + if not os.path.exists(self.source_path): + with open(self.source_path, 'xb') as source_file: + wget(os.path.join(CNNDM_RAW_URL, 'cnndm_128.txt'), source_file) + source_file.close() + + self.target_path = os.path.join(CACHED_CNNDM_RAW_DATA_DIR, 'expected_output.hypo') + if not os.path.exists(self.target_path): + with open(self.target_path, 'xb') as target_file: + wget(os.path.join(CNNDM_RAW_URL, 'expected_output.hypo'), target_file) + target_file.close() # read the expected output. - self.expected_output_path = 'tests/optimizer/fairseq/data/expected_output.hypo' # pylint: disable=line-too-long self.expected_outputs = [] - with open(self.expected_output_path, 'rt', + with open(self.target_path, 'rt', encoding="utf-8") as expected_output_file: for line in expected_output_file: self.expected_outputs.append(line.strip()) diff --git a/tests/run_fairseq_tests.py b/tests/run_fairseq_tests.py index 2747c9f0..d5f738b5 100644 --- a/tests/run_fairseq_tests.py +++ b/tests/run_fairseq_tests.py @@ -2,6 +2,7 @@ # Licensed under the MIT License. """ script for importing fairseq tests """ +from fastseq.config import USE_EL_ATTN import glob import io import logging @@ -36,8 +37,7 @@ def clone_and_build_fairseq(self, repo, version): if os.path.isdir(FAIRSEQ_PATH): shutil.rmtree(FAIRSEQ_PATH) Repo.clone_from(FAIRSEQ_GIT_URL, FAIRSEQ_PATH, branch=version) - pipmain(['install', 'git+https://github.com/pytorch/fairseq.git@' + - version]) + pipmain(['install', '--editable', FAIRSEQ_PATH]) original_pythonpath = os.environ[ 'PYTHONPATH'] if 'PYTHONPATH' in os.environ else '' os.environ['PYTHONPATH'] = FAIRSEQ_PATH + ':' + original_pythonpath @@ -57,12 +57,14 @@ def get_test_suites(self, test_files_path, blocked_tests): ] return suites - @parameterized.named_parameters({ + @parameterized.named_parameters( + { 'testcase_name': 'Normal', 'without_fastseq_opt': False, - 'fairseq_version': 'v0.9.0', + 'fairseq_version': 'v0.10.2', 'blocked_tests': [ - 'test_binaries.py', 'test_bmuf.py', 'test_reproducibility.py'] + 'test_binaries.py', 'test_bmuf.py', 'test_reproducibility.py', + 'test_sequence_generator.py', 'test_backtranslation_dataset.py'] }) def test_suites(self, without_fastseq_opt, fairseq_version, blocked_tests): """"run test suites""" diff --git a/tests/run_fairseq_tests.sh b/tests/run_fairseq_tests.sh index bf4b4369..248ce95c 100755 --- a/tests/run_fairseq_tests.sh +++ b/tests/run_fairseq_tests.sh @@ -13,5 +13,8 @@ pip install torch==1.5.0+cu101 torchvision==0.6.0+cu101 -f https://download.pyto rm -rf build/ rm ngram_repeat_block_cuda*.so pip install --editable . -python tests/run_fairseq_tests.py +echo "******* Run Fairseq tests with Beam Search Optimization *******" +USE_EL_ATTN=0 python tests/run_fairseq_tests.py +echo "******* Run Fairseq tests with EL Attn Optimization *******" +USE_EL_ATTN=1 python tests/run_fairseq_tests.py deactivate