From 1e2dca870125a2941359f14f5e02971a28d6e199 Mon Sep 17 00:00:00 2001 From: fkm3 Date: Tue, 17 Apr 2018 12:24:31 -0400 Subject: [PATCH] Update to tensorflow 1.7 (#185) All of the non-s/1.3/1.7/ changes are because * There are new tensorflow datatypes * Some ops have looser types (e.g. fill now accepts both int64 and int32) * There are more ops of type "func" --- ChangeLog.md | 2 +- ci_build/Dockerfile | 6 +++--- docker/Dockerfile | 6 +++--- tensorflow-core-ops/Setup.hs | 8 ++++++++ tensorflow-opgen/src/TensorFlow/OpGen.hs | 5 ++++- tensorflow-ops/src/TensorFlow/Ops.hs | 2 +- tensorflow/src/TensorFlow/Types.hs | 26 ++++++++++++++++++++++-- third_party/tensorflow | 2 +- tools/install_macos_dependencies.sh | 2 +- tools/userchroot.nix | 4 ++-- 10 files changed, 48 insertions(+), 15 deletions(-) diff --git a/ChangeLog.md b/ChangeLog.md index e68a080..f9ff490 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -1,7 +1,7 @@ # ChangeLog ## Upcoming (v0.2.0.0) -- Switch to tensorflow 1.3. +- Switch to tensorflow 1.7. - Expand the `Rendered` class and add a `ToTensor` class to let more functions (gradients, feed, colocateWith) support `ResourceHandle` wrappers like `Variables`. diff --git a/ci_build/Dockerfile b/ci_build/Dockerfile index 6ea9bc2..e367340 100644 --- a/ci_build/Dockerfile +++ b/ci_build/Dockerfile @@ -3,7 +3,7 @@ # stack to be installed on the host. This comes at the expense of # flexibility. -FROM tensorflow/tensorflow:1.3.0 +FROM tensorflow/tensorflow:1.7.0 LABEL maintainer="TensorFlow authors " # The build context directory is the top of the tensorflow-haskell @@ -28,8 +28,8 @@ RUN \ curl -O -L https://github.com/google/protobuf/releases/download/v3.2.0/protoc-3.2.0-linux-x86_64.zip && \ unzip -d /usr/local protoc-3.2.0-linux-x86_64.zip bin/protoc && \ chmod 755 /usr/local/bin/protoc && \ - curl -O https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-linux-x86_64-1.3.0.tar.gz && \ - tar zxf libtensorflow-cpu-linux-x86_64-1.3.0.tar.gz -C /usr/local && \ + curl -O https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-linux-x86_64-1.7.0.tar.gz && \ + tar zxf libtensorflow-cpu-linux-x86_64-1.7.0.tar.gz -C /usr/local && \ ldconfig && \ stack setup && \ stack test --only-dependencies diff --git a/docker/Dockerfile b/docker/Dockerfile index d8be32d..7231f44 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,6 +1,6 @@ # Prepare the image with: # docker build -t tensorflow/haskell:v0 docker -FROM tensorflow/tensorflow:1.3.0 +FROM tensorflow/tensorflow:1.7.0 LABEL maintainer="TensorFlow authors " RUN apt-get update @@ -27,8 +27,8 @@ RUN \ curl -O -L https://github.com/google/protobuf/releases/download/v3.2.0/protoc-3.2.0-linux-x86_64.zip && \ unzip -d /usr/local protoc-3.2.0-linux-x86_64.zip bin/protoc && \ chmod 755 /usr/local/bin/protoc && \ - curl -O https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-linux-x86_64-1.3.0.tar.gz && \ - tar zxf libtensorflow-cpu-linux-x86_64-1.3.0.tar.gz -C /usr/local && \ + curl -O https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-linux-x86_64-1.7.0.tar.gz && \ + tar zxf libtensorflow-cpu-linux-x86_64-1.7.0.tar.gz -C /usr/local && \ ldconfig ENV LANG en_US.UTF-8 diff --git a/tensorflow-core-ops/Setup.hs b/tensorflow-core-ops/Setup.hs index 7be49a7..a127306 100644 --- a/tensorflow-core-ops/Setup.hs +++ b/tensorflow-core-ops/Setup.hs @@ -92,12 +92,20 @@ blackList = [ -- Requires the "func" type: "FilterDataset" , "FlatMapDataset" + , "GeneratorDataset" , "GroupByWindowDataset" , "InterleaveDataset" + , "MapAndBatchDataset" + , "MapDataset" , "MapDataset" , "OneShotIterator" + , "ParallelInterleaveDataset" , "ParallelMapDataset" + , "RemoteCall" + , "ScanDataset" , "SymbolicGradient" + , "_If" + , "_While" ] autogenModulesDir :: LocalBuildInfo -> FilePath diff --git a/tensorflow-opgen/src/TensorFlow/OpGen.hs b/tensorflow-opgen/src/TensorFlow/OpGen.hs index 41bbab9..fe8afe5 100644 --- a/tensorflow-opgen/src/TensorFlow/OpGen.hs +++ b/tensorflow-opgen/src/TensorFlow/OpGen.hs @@ -150,7 +150,7 @@ imports = stack [ , "import Data.Complex (Complex)" , "import Data.Int (Int8, Int16, Int32, Int64)" , "import Data.Proxy (Proxy(Proxy))" - , "import Data.Word (Word8, Word16)" + , "import Data.Word (Word8, Word16, Word32, Word64)" , "import Lens.Family2 ((.~), (&))" , "import TensorFlow.Build" , "import TensorFlow.BuildOp" @@ -415,9 +415,12 @@ dtTypeToHaskell DT_QUINT16 = "Data.Word.Word16" -- TODO(gnezdo): make unique dtTypeToHaskell DT_QUINT8 = "Data.Word.Word8" -- TODO(gnezdo): make unique dtTypeToHaskell DT_STRING = "Data.ByteString.ByteString" dtTypeToHaskell DT_UINT16 = "Data.Word.Word16" +dtTypeToHaskell DT_UINT32 = "Data.Word.Word32" +dtTypeToHaskell DT_UINT64 = "Data.Word.Word64" dtTypeToHaskell DT_HALF = "Data.Word.Word16" -- TODO(gnezdo): make unique dtTypeToHaskell DT_UINT8 = "Data.Word.Word8" dtTypeToHaskell DT_RESOURCE = "ResourceHandle" +dtTypeToHaskell DT_VARIANT = "Variant" dtTypeToHaskell x = Text.pack $ "Unsupported type in dtTypeToHaskell: " ++ show x diff --git a/tensorflow-ops/src/TensorFlow/Ops.hs b/tensorflow-ops/src/TensorFlow/Ops.hs index eaa2957..7a1df89 100644 --- a/tensorflow-ops/src/TensorFlow/Ops.hs +++ b/tensorflow-ops/src/TensorFlow/Ops.hs @@ -377,7 +377,7 @@ truncatedNormal' :: (MonadBuild m, OneOf '[Word16, Double, Float] a) truncatedNormal' = CoreOps.truncatedNormal' zeros :: forall a . (Num a, TensorType a) => Shape -> Tensor Build a -zeros (Shape s) = CoreOps.fill (vector $ map fromIntegral s) (scalar 0) +zeros (Shape s) = CoreOps.fill (vector s) (scalar 0) shape :: TensorType t => Tensor v t -> Tensor Build Int32 shape = CoreOps.shape diff --git a/tensorflow/src/TensorFlow/Types.hs b/tensorflow/src/TensorFlow/Types.hs index 5d8215c..8f3fbeb 100644 --- a/tensorflow/src/TensorFlow/Types.hs +++ b/tensorflow/src/TensorFlow/Types.hs @@ -41,6 +41,7 @@ module TensorFlow.Types , Attribute(..) , DataType(..) , ResourceHandle + , Variant -- * Lists , ListOf(..) , List @@ -72,7 +73,7 @@ import Data.Monoid ((<>)) import Data.ProtoLens.TextFormat (showMessageShort) import Data.Proxy (Proxy(..)) import Data.String (IsString) -import Data.Word (Word8, Word16, Word64) +import Data.Word (Word8, Word16, Word32, Word64) import Foreign.Storable (Storable) import GHC.Exts (Constraint, IsList(..)) import Lens.Family2 (Lens', view, (&), (.~), (^..)) @@ -109,7 +110,8 @@ import Proto.Tensorflow.Core.Framework.Tensor as Tensor , int64Val , resourceHandleVal , stringVal - , stringVal + , uint32Val + , uint64Val ) import Proto.Tensorflow.Core.Framework.TensorShape ( TensorShapeProto(..) @@ -124,6 +126,11 @@ import qualified TensorFlow.Internal.FFI as FFI type ResourceHandle = ResourceHandleProto +-- | Dynamic type. +-- TensorFlow variants aren't supported yet. This type acts a placeholder to +-- simplify op generation. +data Variant + -- | The class of scalar types supported by tensorflow. class TensorType a where tensorType :: a -> DataType @@ -163,6 +170,16 @@ instance TensorType Word16 where tensorRefType _ = DT_UINT16_REF tensorVal = intVal . integral +instance TensorType Word32 where + tensorType _ = DT_UINT32 + tensorRefType _ = DT_UINT32_REF + tensorVal = uint32Val + +instance TensorType Word64 where + tensorType _ = DT_UINT64 + tensorRefType _ = DT_UINT64_REF + tensorVal = uint64Val + instance TensorType Int16 where tensorType _ = DT_INT16 tensorRefType _ = DT_INT16_REF @@ -198,6 +215,11 @@ instance TensorType ResourceHandle where tensorRefType _ = DT_RESOURCE_REF tensorVal = resourceHandleVal +instance TensorType Variant where + tensorType _ = DT_VARIANT + tensorRefType _ = DT_VARIANT_REF + tensorVal = error "TODO Variant" + -- | Tensor data with the correct memory layout for tensorflow. newtype TensorData a = TensorData { unTensorData :: FFI.TensorData } diff --git a/third_party/tensorflow b/third_party/tensorflow index 408fd45..92e6c3e 160000 --- a/third_party/tensorflow +++ b/third_party/tensorflow @@ -1 +1 @@ -Subproject commit 408fd454d7d2a16269576ea12bcd516e25a6b0c5 +Subproject commit 92e6c3e4f5c1cabfda1e61547a6a1b268ef95fa5 diff --git a/tools/install_macos_dependencies.sh b/tools/install_macos_dependencies.sh index 742d763..a320916 100755 --- a/tools/install_macos_dependencies.sh +++ b/tools/install_macos_dependencies.sh @@ -25,7 +25,7 @@ else fi echo "Downloading libtensorflow..." -curl https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-darwin-x86_64-1.3.0.tar.gz > libtensorflow.tar.gz +curl https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-darwin-x86_64-1.7.0.tar.gz > libtensorflow.tar.gz echo "Extracting and copying libtensorflow..." sudo tar zxf libtensorflow.tar.gz -C /usr/local diff --git a/tools/userchroot.nix b/tools/userchroot.nix index 74907f7..0e0a7cb 100644 --- a/tools/userchroot.nix +++ b/tools/userchroot.nix @@ -13,8 +13,8 @@ let name = "tensorflow-c"; src = fetchurl { - url = "https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-linux-x86_64-1.3.0.tar.gz"; - sha256 = "1d4bda5316063b70cf50a668d774b2067ef2a8ab163ff2eb29592bf3c24e2183"; + url = "https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-linux-x86_64-1.7.0.tar.gz"; + sha256 = "621642b1fddd3831e048817d2220d9d7cf8ba359ac81c83a808bcdd9a982ee90"; }; buildCommand = ''